@theseam/ui-common 0.4.26 → 0.4.28-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/breadcrumbs/breadcrumbs/breadcrumbs.component.scss +1 -1
  2. package/datatable/datatable/datatable.component.d.ts +60 -9
  3. package/datatable/datatable-column-filter-menu/datatable-column-filter-menu.component.d.ts +25 -0
  4. package/datatable/datatable-column-filter-search-date/datatable-column-filter-search-date.component.d.ts +18 -0
  5. package/datatable/datatable-column-filter-search-numeric/datatable-column-filter-search-numeric.component.d.ts +16 -0
  6. package/datatable/datatable-column-filter-search-text/datatable-column-filter-search-text.component.d.ts +15 -0
  7. package/datatable/datatable-menu-bar/datatable-menu-bar.component.d.ts +2 -2
  8. package/datatable/datatable.module.d.ts +29 -20
  9. package/datatable/directives/datatable-column-filter-tpl.directive.d.ts +8 -0
  10. package/datatable/directives/datatable-column-filter.directive.d.ts +10 -0
  11. package/datatable/models/action-item-column-position.d.ts +13 -0
  12. package/datatable/models/columns-data-filter.d.ts +57 -0
  13. package/datatable/models/columns-data-filters/models.d.ts +65 -0
  14. package/datatable/models/columns-data-filters/search-date.columns-data-filter.d.ts +23 -0
  15. package/datatable/models/columns-data-filters/search-numeric.columns-data-filter.d.ts +22 -0
  16. package/datatable/models/columns-data-filters/search-text.columns-data-filter.d.ts +21 -0
  17. package/datatable/models/columns-data-filters/utils.d.ts +15 -0
  18. package/datatable/models/datatable-config.d.ts +90 -0
  19. package/datatable/models/table-column.d.ts +22 -1
  20. package/datatable/public-api.d.ts +14 -0
  21. package/datatable/services/columns-filters.service.d.ts +29 -0
  22. package/datatable/services/columns-manager.service.d.ts +7 -0
  23. package/datatable/utils/create-action-menu-column.d.ts +1 -1
  24. package/esm2020/breadcrumbs/breadcrumbs/breadcrumbs.component.mjs +2 -2
  25. package/esm2020/datatable/datatable/datatable.component.mjs +231 -31
  26. package/esm2020/datatable/datatable-action-menu/datatable-action-menu.component.mjs +2 -2
  27. package/esm2020/datatable/datatable-column-filter-menu/datatable-column-filter-menu.component.mjs +55 -0
  28. package/esm2020/datatable/datatable-column-filter-search-date/datatable-column-filter-search-date.component.mjs +54 -0
  29. package/esm2020/datatable/datatable-column-filter-search-numeric/datatable-column-filter-search-numeric.component.mjs +48 -0
  30. package/esm2020/datatable/datatable-column-filter-search-text/datatable-column-filter-search-text.component.mjs +44 -0
  31. package/esm2020/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.mjs +1 -1
  32. package/esm2020/datatable/datatable-export-button/datatable-export-button.component.mjs +1 -1
  33. package/esm2020/datatable/datatable-menu-bar/datatable-menu-bar.component.mjs +1 -1
  34. package/esm2020/datatable/datatable.module.mjs +49 -7
  35. package/esm2020/datatable/directives/datatable-column-filter-tpl.directive.mjs +16 -0
  36. package/esm2020/datatable/directives/datatable-column-filter.directive.mjs +26 -0
  37. package/esm2020/datatable/models/action-item-column-position.mjs +5 -0
  38. package/esm2020/datatable/models/columns-data-filter.mjs +10 -0
  39. package/esm2020/datatable/models/columns-data-filters/models.mjs +74 -0
  40. package/esm2020/datatable/models/columns-data-filters/search-date.columns-data-filter.mjs +113 -0
  41. package/esm2020/datatable/models/columns-data-filters/search-numeric.columns-data-filter.mjs +104 -0
  42. package/esm2020/datatable/models/columns-data-filters/search-text.columns-data-filter.mjs +86 -0
  43. package/esm2020/datatable/models/columns-data-filters/utils.mjs +28 -0
  44. package/esm2020/datatable/models/datatable-config.mjs +3 -0
  45. package/esm2020/datatable/models/table-column.mjs +1 -1
  46. package/esm2020/datatable/public-api.mjs +15 -1
  47. package/esm2020/datatable/services/columns-filters.service.mjs +109 -0
  48. package/esm2020/datatable/services/columns-manager.service.mjs +27 -2
  49. package/esm2020/datatable/utils/create-action-menu-column.mjs +4 -3
  50. package/esm2020/datatable-dynamic/datatable-dynamic-action-menu/datatable-dynamic-action-menu.component.mjs +1 -1
  51. package/esm2020/datatable-dynamic/datatable-dynamic.component.mjs +1 -1
  52. package/esm2020/framework/base-layout/base-layout.component.mjs +14 -4
  53. package/esm2020/framework/base-layout/base-layout.module.mjs +6 -1
  54. package/esm2020/framework/base-layout/directives/base-layout-nav-toggle.directive.mjs +21 -5
  55. package/esm2020/framework/base-layout/directives/base-layout-side-bar-header.directive.mjs +16 -0
  56. package/esm2020/framework/base-layout/index.mjs +2 -1
  57. package/esm2020/framework/nav/horizontal-nav/horizontal-nav.component.mjs +55 -0
  58. package/esm2020/framework/nav/index.mjs +6 -0
  59. package/esm2020/framework/nav/nav-item/nav-item.component.mjs +227 -0
  60. package/esm2020/framework/nav/nav-utils.mjs +107 -0
  61. package/esm2020/framework/nav/nav.models.mjs +2 -0
  62. package/esm2020/framework/nav/nav.module.mjs +67 -0
  63. package/esm2020/framework/nav/nav.service.mjs +204 -0
  64. package/esm2020/framework/public-api.mjs +2 -1
  65. package/esm2020/framework/schema-form-controls/schema-form-submit-split/schema-form-submit-split.component.mjs +2 -2
  66. package/esm2020/framework/side-nav/side-nav-item/side-nav-item.component.mjs +28 -67
  67. package/esm2020/framework/side-nav/side-nav-toggle/side-nav-toggle.component.mjs +12 -5
  68. package/esm2020/framework/side-nav/side-nav.component.mjs +116 -38
  69. package/esm2020/framework/side-nav/side-nav.models.mjs +1 -1
  70. package/esm2020/framework/side-nav/side-nav.module.mjs +9 -39
  71. package/esm2020/framework/side-nav/side-nav.service.mjs +1 -1
  72. package/esm2020/framework/top-bar/index.mjs +3 -1
  73. package/esm2020/framework/top-bar/top-bar-compact-menu-btn-detail.directive.mjs +16 -0
  74. package/esm2020/framework/top-bar/top-bar-item.directive.mjs +10 -4
  75. package/esm2020/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.mjs +6 -4
  76. package/esm2020/framework/top-bar/top-bar-nav-toggle-btn-detail.directive.mjs +16 -0
  77. package/esm2020/framework/top-bar/top-bar.component.mjs +55 -11
  78. package/esm2020/framework/top-bar/top-bar.module.mjs +15 -5
  79. package/esm2020/graphql/datatable/datatable-graphql.service.mjs +1 -1
  80. package/esm2020/graphql/datatable/index.mjs +4 -1
  81. package/esm2020/graphql/datatable/map-filter-states.mjs +1 -1
  82. package/esm2020/graphql/datatable/map-search-date-columns-data-filter-state-to-gql.mjs +139 -0
  83. package/esm2020/graphql/datatable/map-search-numeric-columns-data-filter-state-to-gql.mjs +75 -0
  84. package/esm2020/graphql/datatable/map-search-text-columns-data-filter-state-to-gql.mjs +44 -0
  85. package/esm2020/layout/layout.service.mjs +12 -2
  86. package/esm2020/menu/menu-toggle.directive.mjs +7 -2
  87. package/esm2020/popover/popover/popover.component.mjs +7 -3
  88. package/esm2020/popover/popover.directive.mjs +6 -2
  89. package/esm2020/rich-text/public-api.mjs +1 -1
  90. package/esm2020/rich-text/rich-text/rich-text.component.mjs +24 -3
  91. package/esm2020/rich-text/utils/models.mjs +1 -1
  92. package/esm2020/rich-text/utils/utils.mjs +1 -1
  93. package/esm2020/table-cell-types/table-cell-type-string/table-cell-type-string.component.mjs +5 -3
  94. package/fesm2015/theseam-ui-common-breadcrumbs.mjs +2 -2
  95. package/fesm2015/theseam-ui-common-breadcrumbs.mjs.map +1 -1
  96. package/fesm2015/theseam-ui-common-datatable-dynamic.mjs +2 -2
  97. package/fesm2015/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
  98. package/fesm2015/theseam-ui-common-datatable.mjs +1025 -62
  99. package/fesm2015/theseam-ui-common-datatable.mjs.map +1 -1
  100. package/fesm2015/theseam-ui-common-framework.mjs +905 -156
  101. package/fesm2015/theseam-ui-common-framework.mjs.map +1 -1
  102. package/fesm2015/theseam-ui-common-graphql.mjs +254 -1
  103. package/fesm2015/theseam-ui-common-graphql.mjs.map +1 -1
  104. package/fesm2015/theseam-ui-common-layout.mjs +11 -2
  105. package/fesm2015/theseam-ui-common-layout.mjs.map +1 -1
  106. package/fesm2015/theseam-ui-common-menu.mjs +6 -1
  107. package/fesm2015/theseam-ui-common-menu.mjs.map +1 -1
  108. package/fesm2015/theseam-ui-common-popover.mjs +11 -3
  109. package/fesm2015/theseam-ui-common-popover.mjs.map +1 -1
  110. package/fesm2015/theseam-ui-common-rich-text.mjs +25 -2
  111. package/fesm2015/theseam-ui-common-rich-text.mjs.map +1 -1
  112. package/fesm2015/theseam-ui-common-table-cell-types.mjs +4 -2
  113. package/fesm2015/theseam-ui-common-table-cell-types.mjs.map +1 -1
  114. package/fesm2020/theseam-ui-common-breadcrumbs.mjs +2 -2
  115. package/fesm2020/theseam-ui-common-breadcrumbs.mjs.map +1 -1
  116. package/fesm2020/theseam-ui-common-datatable-dynamic.mjs +2 -2
  117. package/fesm2020/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
  118. package/fesm2020/theseam-ui-common-datatable.mjs +1010 -62
  119. package/fesm2020/theseam-ui-common-datatable.mjs.map +1 -1
  120. package/fesm2020/theseam-ui-common-framework.mjs +907 -156
  121. package/fesm2020/theseam-ui-common-framework.mjs.map +1 -1
  122. package/fesm2020/theseam-ui-common-graphql.mjs +254 -1
  123. package/fesm2020/theseam-ui-common-graphql.mjs.map +1 -1
  124. package/fesm2020/theseam-ui-common-layout.mjs +11 -2
  125. package/fesm2020/theseam-ui-common-layout.mjs.map +1 -1
  126. package/fesm2020/theseam-ui-common-menu.mjs +6 -1
  127. package/fesm2020/theseam-ui-common-menu.mjs.map +1 -1
  128. package/fesm2020/theseam-ui-common-popover.mjs +11 -3
  129. package/fesm2020/theseam-ui-common-popover.mjs.map +1 -1
  130. package/fesm2020/theseam-ui-common-rich-text.mjs +23 -2
  131. package/fesm2020/theseam-ui-common-rich-text.mjs.map +1 -1
  132. package/fesm2020/theseam-ui-common-table-cell-types.mjs +4 -2
  133. package/fesm2020/theseam-ui-common-table-cell-types.mjs.map +1 -1
  134. package/framework/base-layout/base-layout.component.d.ts +4 -2
  135. package/framework/base-layout/base-layout.component.scss +18 -10
  136. package/framework/base-layout/base-layout.module.d.ts +11 -10
  137. package/framework/base-layout/directives/base-layout-nav-toggle.directive.d.ts +8 -3
  138. package/framework/base-layout/directives/base-layout-side-bar-header.directive.d.ts +9 -0
  139. package/framework/base-layout/index.d.ts +1 -0
  140. package/framework/base-layout/styles/_variables.scss +21 -0
  141. package/framework/nav/_nav-theme.scss +4 -0
  142. package/framework/nav/horizontal-nav/horizontal-nav.component.d.ts +25 -0
  143. package/framework/nav/horizontal-nav/horizontal-nav.component.scss +50 -0
  144. package/framework/nav/index.d.ts +5 -0
  145. package/framework/nav/nav-item/nav-item.component.d.ts +74 -0
  146. package/framework/nav/nav-item/nav-item.component.scss +203 -0
  147. package/framework/nav/nav-utils.d.ts +20 -0
  148. package/framework/nav/nav.models.d.ts +77 -0
  149. package/framework/nav/nav.module.d.ts +17 -0
  150. package/framework/nav/nav.service.d.ts +27 -0
  151. package/framework/nav/styles/_themes/light/_variables.scss +56 -0
  152. package/framework/nav/styles/_themes/primary/_variables.scss +56 -0
  153. package/framework/nav/styles/_utilities.scss +3 -0
  154. package/framework/nav/styles/_variables.scss +2 -0
  155. package/framework/public-api.d.ts +1 -0
  156. package/framework/side-nav/side-nav-item/side-nav-item.component.d.ts +7 -14
  157. package/framework/side-nav/side-nav-item/side-nav-item.component.scss +7 -5
  158. package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.d.ts +5 -3
  159. package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.scss +3 -6
  160. package/framework/side-nav/side-nav.component.d.ts +13 -1
  161. package/framework/side-nav/side-nav.component.scss +0 -1
  162. package/framework/side-nav/side-nav.models.d.ts +7 -1
  163. package/framework/side-nav/side-nav.module.d.ts +1 -9
  164. package/framework/side-nav/styles/_themes/light/_variables.scss +24 -14
  165. package/framework/side-nav/styles/_themes/primary/_variables.scss +8 -0
  166. package/framework/top-bar/index.d.ts +2 -0
  167. package/framework/top-bar/top-bar-compact-menu-btn-detail.directive.d.ts +8 -0
  168. package/framework/top-bar/top-bar-item.directive.d.ts +4 -1
  169. package/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.d.ts +5 -2
  170. package/framework/top-bar/top-bar-nav-toggle-btn-detail.directive.d.ts +8 -0
  171. package/framework/top-bar/top-bar.component.d.ts +25 -3
  172. package/framework/top-bar/top-bar.component.scss +7 -2
  173. package/framework/top-bar/top-bar.module.d.ts +10 -8
  174. package/graphql/datatable/datatable-graphql.service.d.ts +1 -1
  175. package/graphql/datatable/index.d.ts +3 -0
  176. package/graphql/datatable/map-filter-states.d.ts +2 -2
  177. package/graphql/datatable/map-search-date-columns-data-filter-state-to-gql.d.ts +4 -0
  178. package/graphql/datatable/map-search-numeric-columns-data-filter-state-to-gql.d.ts +4 -0
  179. package/graphql/datatable/map-search-text-columns-data-filter-state-to-gql.d.ts +4 -0
  180. package/layout/layout.service.d.ts +9 -1
  181. package/menu/menu-toggle.directive.d.ts +2 -1
  182. package/package.json +2 -2
  183. package/popover/popover/popover.component.d.ts +4 -1
  184. package/popover/popover.directive.d.ts +2 -1
  185. package/rich-text/rich-text/rich-text.component.d.ts +6 -4
  186. package/styles/vendor/ngx-datatable/_ngx-datatable.scss +83 -14
  187. package/styles/vendor/ngx-datatable/_themes/bootstrap/_variables.scss +38 -3
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-popover.mjs","sources":["../../../projects/ui-common/popover/popover-animations.ts","../../../projects/ui-common/popover/popover/popover.component.ts","../../../projects/ui-common/popover/popover/popover.component.html","../../../projects/ui-common/popover/popover.directive.ts","../../../projects/ui-common/popover/popover.module.ts","../../../projects/ui-common/popover/theseam-ui-common-popover.ts"],"sourcesContent":["import { animate, animation, group, query, style } from '@angular/animations'\n\nexport const popoverSlideIn = animation([\n query(':self', [\n style({\n opacity: 0,\n transform: 'translateY(-70%)'\n }),\n group([\n animate('170ms linear', style({ opacity: 1 })),\n animate('220ms ease', style({ transform: 'translateY(0)' })),\n ])\n ])\n])\n\nexport const popoverSlideOut = animation([\n query(':self', [\n style({\n opacity: 1,\n transform: 'translateY(0)'\n }),\n group([\n animate('170ms linear', style({ opacity: 0 })),\n animate('220ms ease', style({ transform: 'translateY(-70%)' })),\n ])\n ])\n])\n\nexport const popoverExpandIn = animation([\n style({\n opacity: 0,\n transform: 'scale(0.8)'\n }),\n group([\n animate('100ms linear', style({ opacity: 1 })),\n animate('120ms ease', style({ transform: 'scale(1)' })),\n ])\n])\n\nexport const popoverExpandOut = animation([\n style({\n opacity: 1,\n transform: 'scale(1)'\n }),\n group([\n animate('100ms linear', style({ opacity: 0 })),\n animate('120ms ease', style({ transform: 'scale(0.8)' })),\n ])\n])\n","import { AnimationEvent, transition, trigger, useAnimation } from '@angular/animations'\nimport { coerceNumberProperty } from '@angular/cdk/coercion'\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes'\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef\n} from '@angular/core'\nimport { BehaviorSubject, fromEvent, Observable, of, Subject } from 'rxjs'\nimport { distinctUntilChanged, map, startWith, switchMap, takeUntil } from 'rxjs/operators'\n\nimport { popoverExpandIn, popoverExpandOut, popoverSlideIn, popoverSlideOut } from '../popover-animations'\n\n@Component({\n selector: 'seam-popover',\n templateUrl: './popover.component.html',\n styleUrls: ['./popover.component.scss'],\n animations: [\n trigger('slideDown', [\n transition(':enter', useAnimation(popoverExpandIn)),\n transition(':leave', useAnimation(popoverExpandOut)),\n ])\n ],\n host: {\n class: 'popover show m-2 position-static',\n '[@slideDown]': `{\n value: _state,\n params: {\n enterAnimationDuration: enterAnimationDuration,\n exitAnimationDuration: exitAnimationDuration\n }\n }`,\n '(@slideDown.start)': '_onAnimationStart($event)',\n '(@slideDown.done)': '_animationDone.next($event)',\n '[style.width]': '_popoverWidth'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopoverComponent implements OnInit, OnDestroy {\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n /** Duration of the enter animation. Has to be a valid CSS value (e.g. 100ms). */\n enterAnimationDuration?: string = '225ms'\n\n /** Duration of the exit animation. Has to be a valid CSS value (e.g. 50ms). */\n exitAnimationDuration?: string = '225ms'\n\n /** State of the dialog animation. */\n _state: 'void' | 'enter' | 'exit' = 'enter'\n\n /** A subject emitting before the dialog enters the view. */\n _beforeEnter: Subject<void> = new Subject()\n\n /** A subject emitting after the dialog enters the view. */\n _afterEnter: Subject<void> = new Subject()\n\n /** A subject emitting before the dialog exits the view. */\n _beforeExit: Subject<void> = new Subject()\n\n /** A subject emitting after the dialog exits the view. */\n _afterExit: Subject<void> = new Subject()\n\n /** Stream of animation `done` events. */\n _animationDone = new Subject<AnimationEvent>()\n\n // @HostBinding('attr.role') get _role() { return this._config.role }\n @HostBinding('attr.role') get _role() { return 'dialog' }\n\n @HostBinding('attr.tabindex') get _tabindex() { return -1 }\n\n @Input() template: TemplateRef<any> | undefined | null\n\n // @Output() readonly closed = new EventEmitter<void | 'click' | 'keydown'>()\n\n @Input() popoverClass: string | undefined | null\n\n /**\n * Defines a width for a popover that will scale down if the window innerWidth is\n * smaller than the value.\n */\n @Input()\n get baseWidth() { return this._baseWidth.value }\n set baseWidth(value: number | null) {\n const _val = coerceNumberProperty(value, null)\n if (_val !== this._baseWidth.value) {\n this._baseWidth.next(_val)\n }\n }\n private _baseWidth = new BehaviorSubject<number | null>(600)\n // _popoverWidth$: Observable<string | undefined>\n _popoverWidth: string | undefined\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n // TODO: Implement PopoverConfig\n ) {\n // We use a Subject with a distinctUntilChanged, rather than a callback attached to .done,\n // because some browsers fire the done event twice and we don't want to emit duplicate events.\n // See: https://github.com/angular/angular/issues/24084\n this._animationDone.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState\n })).subscribe(event => {\n // Emit lifecycle events based on animation `done` callback.\n if (event.toState === 'enter') {\n this._afterEnter.next()\n this._afterEnter.complete()\n }\n\n if (event.fromState === 'enter' && (event.toState === 'void' || event.toState === 'exit')) {\n this._afterExit.next()\n this._afterExit.complete()\n }\n })\n }\n\n ngOnInit() {\n // this._popoverWidth$ =\n this._baseWidth.pipe(\n switchMap(baseWidth => {\n if (baseWidth) {\n return fromEvent(window, 'resize').pipe(\n startWith(undefined),\n map(() => window.innerWidth < baseWidth ? `${window.innerWidth}px` : `${baseWidth}px`)\n )\n }\n return of(undefined)\n }),\n takeUntil(this._ngUnsubscribe)\n ).subscribe(w => {\n this._popoverWidth = w\n this._changeDetectorRef.markForCheck()\n })\n }\n\n ngOnDestroy() {\n // this.closed.complete()\n this._animationDone.complete()\n\n this._ngUnsubscribe.next(undefined)\n this._ngUnsubscribe.complete()\n }\n\n /** Starts the dialog exit animation. */\n _startExiting(): void {\n this._state = 'exit'\n\n // Mark the container for check so it can react if the\n // view container is using OnPush change detection.\n this._changeDetectorRef.markForCheck()\n }\n\n /** Emit lifecycle events based on animation `start` callback. */\n _onAnimationStart(event: AnimationEvent) {\n if (event.toState === 'enter') {\n this._beforeEnter.next()\n this._beforeEnter.complete()\n }\n if (event.fromState === 'enter' && (event.toState === 'void' || event.toState === 'exit')) {\n this._beforeExit.next()\n this._beforeExit.complete()\n }\n }\n\n /** Handle a keyboard event from the menu, delegating to the appropriate action. */\n @HostListener('keydown', [ '$event' ])\n _handleKeydown(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n const keyCode = event.keyCode\n\n switch (keyCode) {\n case ESCAPE:\n if (!hasModifierKey(event)) {\n event.preventDefault()\n // this.closed.emit('keydown')\n this._startExiting()\n }\n break\n }\n }\n\n}\n","<div class=\"popover-body\">\n <ng-container *ngIf=\"template; else noTemplate\">\n <ng-template [ngTemplateOutlet]=\"template\"></ng-template>\n </ng-container>\n\n <ng-template #noTemplate>\n Example\n <!-- <ng-content></ng-content> -->\n </ng-template>\n</div>\n","import { FocusMonitor, FocusOrigin, isFakeMousedownFromScreenReader } from '@angular/cdk/a11y'\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion'\nimport { ESCAPE } from '@angular/cdk/keycodes'\nimport { ConnectionPositionPair, Overlay, OverlayRef, PositionStrategy } from '@angular/cdk/overlay'\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform'\nimport { ComponentPortal } from '@angular/cdk/portal'\nimport { ComponentRef, Directive, ElementRef, HostListener, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core'\nimport { BehaviorSubject, fromEvent, merge, of, Subject, Subscription } from 'rxjs'\nimport { switchMap, takeUntil } from 'rxjs/operators'\n\nimport { PopoverComponent } from './popover/popover.component'\n\n/** Options for binding a passive event listener. */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true })\n\n@Directive({\n selector: '[seamPopover]',\n // tslint:disable-next-line:use-host-property-decorator\n host: {\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'popoverOpen() || null'\n },\n exportAs: 'seamPopover'\n})\nexport class TheSeamPopoverDirective implements OnDestroy {\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n @Input() seamPopover?: TemplateRef<any> | null\n\n /**\n * Defines a width for a popover that will scale down if the window innerWidth is\n * smaller than the value.\n */\n @Input()\n get seamPopoverBaseWidth() { return this._seamPopoverBaseWidth.value }\n set seamPopoverBaseWidth(value: number | null) {\n const _val = coerceNumberProperty(value, null)\n if (_val !== this._seamPopoverBaseWidth.value) {\n this._seamPopoverBaseWidth.next(_val)\n }\n }\n private _seamPopoverBaseWidth = new BehaviorSubject<number | null>(null)\n\n @Input()\n get seamPopoverDisabled() { return this._seamPopoverDisabled.value }\n set seamPopoverDisabled(val: boolean) { this._seamPopoverDisabled.next(coerceBooleanProperty(val)) }\n private _seamPopoverDisabled = new BehaviorSubject<boolean>(false)\n\n // ngOnInit() {\n // this._seamPopoverDisabled.pipe(\n // switchMap(disabled => {\n // if (disabled) {\n // this.close()\n // return of(undefined)\n // }\n\n // if (!(this._elementRef && this._elementRef.nativeElement)) {\n // return of(undefined)\n // }\n\n // return fromEvent(this._elementRef.nativeElement, 'click')\n // })\n // ).subscribe()\n // }\n\n private _active = false\n private _closing = false\n private _overlayRef: OverlayRef | undefined | null\n private _compRef: ComponentRef<PopoverComponent> | undefined | null\n private _popoverClosedSubscription = Subscription.EMPTY\n private _closingActionsSubscription = Subscription.EMPTY\n\n public restoreFocus = true\n\n // Tracking input type is necessary so it's possible to only auto-focus\n // the first item of the list when the menu is opened via the keyboard\n _openedBy: 'mouse' | 'touch' | null = null\n\n @HostListener('mousedown', [ '$event' ])\n _onMouseDown(event: MouseEvent) {\n if (!isFakeMousedownFromScreenReader(event)) {\n // Since right or middle button clicks won't trigger the `click` event,\n // we shouldn't consider the menu as opened by mouse in those cases.\n this._openedBy = event.button === 0 ? 'mouse' : null\n }\n }\n\n @HostListener('click', [ '$event' ])\n _onClick(event: any) {\n this.toggle()\n }\n\n @HostListener('document:keydown', [ '$event' ])\n _onDocumentKeydown(event: any) {\n if (event.keyCode === ESCAPE) {\n this.closePopover()\n }\n }\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n private _viewContainerRef: ViewContainerRef,\n private _overlay: Overlay,\n private _focusMonitor: FocusMonitor\n ) {\n this._elementRef.nativeElement.addEventListener('touchstart', this._handleTouchStart,\n passiveEventListenerOptions)\n\n this._seamPopoverBaseWidth\n .pipe(takeUntil(this._ngUnsubscribe))\n .subscribe(w => {\n if (this._compRef && this._compRef.instance) {\n this._compRef.instance.baseWidth = w\n this._compRef.changeDetectorRef.markForCheck()\n }\n })\n }\n\n ngOnDestroy() {\n this.closePopover()\n\n this._elementRef.nativeElement.removeEventListener('touchstart', this._handleTouchStart,\n passiveEventListenerOptions)\n\n this._popoverClosedSubscription.unsubscribe()\n this._closingActionsSubscription.unsubscribe()\n\n this._ngUnsubscribe.next(undefined)\n this._ngUnsubscribe.complete()\n }\n\n /**\n * Handles touch start events on the trigger.\n * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\n */\n private _handleTouchStart = () => this._openedBy = 'touch'\n\n public toggle(): void {\n if (this._active || this.seamPopoverDisabled) {\n this.closePopover()\n } else {\n this.openPopover()\n }\n }\n\n public openPopover(): void {\n if (this._active || !this.seamPopover) { return }\n this._active = true\n\n this._overlayRef = this._overlay.create({\n hasBackdrop: true,\n backdropClass: 'transparent',\n positionStrategy: this.getOverlayPosition(this._elementRef.nativeElement),\n })\n\n this._compRef = this._overlayRef.attach(new ComponentPortal(PopoverComponent, this._viewContainerRef))\n\n this._closingActionsSubscription = this._popoverClosingActions().subscribe(() => this.closePopover())\n\n this._compRef.instance.template = this.seamPopover\n this._compRef.instance.baseWidth = this.seamPopoverBaseWidth\n this._compRef.changeDetectorRef.markForCheck()\n\n this._popoverClosedSubscription = this._compRef.instance._afterExit.subscribe(v => {\n // console.log('closed', v)\n if (this._overlayRef?.hasAttached()) {\n this._overlayRef.detach()\n }\n\n this._resetPopover()\n\n this._popoverClosedSubscription.unsubscribe()\n this._closingActionsSubscription.unsubscribe()\n\n this._active = false\n this._closing = false\n })\n }\n\n public closePopover(): void {\n if (!this._active) { return }\n\n if (!this._closing) {\n if (this._compRef && this._compRef.instance) {\n this._closing = true\n this._compRef.instance._startExiting()\n }\n }\n }\n\n public popoverOpen(): boolean {\n return this._overlayRef?.hasAttached() ?? false\n }\n\n private getOverlayPosition(origin: HTMLElement): PositionStrategy {\n const positionStrategy = this._overlay.position()\n .flexibleConnectedTo(origin)\n .withPositions(this.getPositions())\n .withFlexibleDimensions(false)\n .withPush(true)\n\n return positionStrategy\n }\n\n private getPositions(): ConnectionPositionPair[] {\n return [\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top'\n },\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom'\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]\n }\n\n /**\n * Focuses the popover trigger.\n * @param origin Source of the popover trigger's focus.\n */\n focus(origin: FocusOrigin = 'program') {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(this._elementRef, origin)\n } else {\n this._elementRef.nativeElement.focus()\n }\n }\n\n /**\n * This method resets the popover when it's closed, most importantly restoring\n * focus to the popover trigger if the popover was opened via the keyboard.\n */\n private _resetPopover(): void {\n // We should reset focus if the user is navigating using a keyboard or\n // if we have a top-level trigger which might cause focus to be lost\n // when clicking on the backdrop.\n if (this.restoreFocus) {\n if (!this._openedBy) {\n // Note that the focus style will show up both for `program` and\n // `keyboard` so we don't have to specify which one it is.\n this.focus()\n }\n }\n\n this._openedBy = null\n }\n\n /** Returns a stream that emits whenever an action that should close the popover occurs. */\n private _popoverClosingActions() {\n const backdrop = this._overlayRef?.backdropClick() ?? of()\n const detachments = this._overlayRef?.detachments() ?? of()\n const hover = of()\n\n return merge(backdrop, hover, detachments)\n }\n\n}\n","import { OverlayModule } from '@angular/cdk/overlay'\nimport { PortalModule } from '@angular/cdk/portal'\nimport { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { TheSeamPopoverDirective } from './popover.directive'\nimport { PopoverComponent } from './popover/popover.component'\n\n@NgModule({\n declarations: [\n PopoverComponent,\n TheSeamPopoverDirective\n ],\n imports: [\n CommonModule,\n OverlayModule,\n PortalModule\n ],\n exports: [\n TheSeamPopoverDirective,\n OverlayModule,\n PortalModule\n ]\n})\nexport class TheSeamPopoverModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"theseam-ui-common-popover.mjs","sources":["../../../projects/ui-common/popover/popover-animations.ts","../../../projects/ui-common/popover/popover/popover.component.ts","../../../projects/ui-common/popover/popover/popover.component.html","../../../projects/ui-common/popover/popover.directive.ts","../../../projects/ui-common/popover/popover.module.ts","../../../projects/ui-common/popover/theseam-ui-common-popover.ts"],"sourcesContent":["import { animate, animation, group, query, style } from '@angular/animations'\n\nexport const popoverSlideIn = animation([\n query(':self', [\n style({\n opacity: 0,\n transform: 'translateY(-70%)'\n }),\n group([\n animate('170ms linear', style({ opacity: 1 })),\n animate('220ms ease', style({ transform: 'translateY(0)' })),\n ])\n ])\n])\n\nexport const popoverSlideOut = animation([\n query(':self', [\n style({\n opacity: 1,\n transform: 'translateY(0)'\n }),\n group([\n animate('170ms linear', style({ opacity: 0 })),\n animate('220ms ease', style({ transform: 'translateY(-70%)' })),\n ])\n ])\n])\n\nexport const popoverExpandIn = animation([\n style({\n opacity: 0,\n transform: 'scale(0.8)'\n }),\n group([\n animate('100ms linear', style({ opacity: 1 })),\n animate('120ms ease', style({ transform: 'scale(1)' })),\n ])\n])\n\nexport const popoverExpandOut = animation([\n style({\n opacity: 1,\n transform: 'scale(1)'\n }),\n group([\n animate('100ms linear', style({ opacity: 0 })),\n animate('120ms ease', style({ transform: 'scale(0.8)' })),\n ])\n])\n","import { AnimationEvent, transition, trigger, useAnimation } from '@angular/animations'\nimport { coerceNumberProperty } from '@angular/cdk/coercion'\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes'\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef\n} from '@angular/core'\nimport { BehaviorSubject, fromEvent, of, Subject } from 'rxjs'\nimport { distinctUntilChanged, map, startWith, switchMap, takeUntil } from 'rxjs/operators'\n\nimport { popoverExpandIn, popoverExpandOut } from '../popover-animations'\nimport { TheSeamPopoverDirective } from '../popover.directive'\n\n@Component({\n selector: 'seam-popover',\n templateUrl: './popover.component.html',\n styleUrls: ['./popover.component.scss'],\n animations: [\n trigger('slideDown', [\n transition(':enter', useAnimation(popoverExpandIn)),\n transition(':leave', useAnimation(popoverExpandOut)),\n ])\n ],\n host: {\n class: 'popover show m-2 position-static',\n '[@slideDown]': `{\n value: _state,\n params: {\n enterAnimationDuration: enterAnimationDuration,\n exitAnimationDuration: exitAnimationDuration\n }\n }`,\n '(@slideDown.start)': '_onAnimationStart($event)',\n '(@slideDown.done)': '_animationDone.next($event)',\n '[style.width]': '_popoverWidth'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopoverComponent implements OnInit, OnDestroy {\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n /** Duration of the enter animation. Has to be a valid CSS value (e.g. 100ms). */\n enterAnimationDuration?: string = '225ms'\n\n /** Duration of the exit animation. Has to be a valid CSS value (e.g. 50ms). */\n exitAnimationDuration?: string = '225ms'\n\n /** State of the dialog animation. */\n _state: 'void' | 'enter' | 'exit' = 'enter'\n\n /** A subject emitting before the dialog enters the view. */\n _beforeEnter: Subject<void> = new Subject()\n\n /** A subject emitting after the dialog enters the view. */\n _afterEnter: Subject<void> = new Subject()\n\n /** A subject emitting before the dialog exits the view. */\n _beforeExit: Subject<void> = new Subject()\n\n /** A subject emitting after the dialog exits the view. */\n _afterExit: Subject<void> = new Subject()\n\n /** Stream of animation `done` events. */\n _animationDone = new Subject<AnimationEvent>()\n\n // @HostBinding('attr.role') get _role() { return this._config.role }\n @HostBinding('attr.role') get _role() { return 'dialog' }\n\n @HostBinding('attr.tabindex') get _tabindex() { return -1 }\n\n @Input() template: TemplateRef<any> | undefined | null\n\n // @Output() readonly closed = new EventEmitter<void | 'click' | 'keydown'>()\n\n @Input() popoverClass: string | undefined | null\n\n @Input() popover: TheSeamPopoverDirective | undefined | null\n\n @Input() popoverContext: any\n\n /**\n * Defines a width for a popover that will scale down if the window innerWidth is\n * smaller than the value.\n */\n @Input()\n get baseWidth() { return this._baseWidth.value }\n set baseWidth(value: number | null) {\n const _val = coerceNumberProperty(value, null)\n if (_val !== this._baseWidth.value) {\n this._baseWidth.next(_val)\n }\n }\n private _baseWidth = new BehaviorSubject<number | null>(600)\n // _popoverWidth$: Observable<string | undefined>\n _popoverWidth: string | undefined\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n // TODO: Implement PopoverConfig\n ) {\n // We use a Subject with a distinctUntilChanged, rather than a callback attached to .done,\n // because some browsers fire the done event twice and we don't want to emit duplicate events.\n // See: https://github.com/angular/angular/issues/24084\n this._animationDone.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState\n })).subscribe(event => {\n // Emit lifecycle events based on animation `done` callback.\n if (event.toState === 'enter') {\n this._afterEnter.next()\n this._afterEnter.complete()\n }\n\n if (event.fromState === 'enter' && (event.toState === 'void' || event.toState === 'exit')) {\n this._afterExit.next()\n this._afterExit.complete()\n }\n })\n }\n\n ngOnInit() {\n // this._popoverWidth$ =\n this._baseWidth.pipe(\n switchMap(baseWidth => {\n if (baseWidth) {\n return fromEvent(window, 'resize').pipe(\n startWith(undefined),\n map(() => window.innerWidth < baseWidth ? `${window.innerWidth}px` : `${baseWidth}px`)\n )\n }\n return of(undefined)\n }),\n takeUntil(this._ngUnsubscribe)\n ).subscribe(w => {\n this._popoverWidth = w\n this._changeDetectorRef.markForCheck()\n })\n }\n\n ngOnDestroy() {\n // this.closed.complete()\n this._animationDone.complete()\n\n this._ngUnsubscribe.next(undefined)\n this._ngUnsubscribe.complete()\n }\n\n /** Starts the dialog exit animation. */\n _startExiting(): void {\n this._state = 'exit'\n\n // Mark the container for check so it can react if the\n // view container is using OnPush change detection.\n this._changeDetectorRef.markForCheck()\n }\n\n /** Emit lifecycle events based on animation `start` callback. */\n _onAnimationStart(event: AnimationEvent) {\n if (event.toState === 'enter') {\n this._beforeEnter.next()\n this._beforeEnter.complete()\n }\n if (event.fromState === 'enter' && (event.toState === 'void' || event.toState === 'exit')) {\n this._beforeExit.next()\n this._beforeExit.complete()\n }\n }\n\n /** Handle a keyboard event from the menu, delegating to the appropriate action. */\n @HostListener('keydown', [ '$event' ])\n _handleKeydown(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n const keyCode = event.keyCode\n\n switch (keyCode) {\n case ESCAPE:\n if (!hasModifierKey(event)) {\n event.preventDefault()\n // this.closed.emit('keydown')\n this._startExiting()\n }\n break\n }\n }\n\n}\n","<div class=\"popover-body\">\n <ng-container *ngIf=\"template; else noTemplate\">\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ $implicit: popover, popover: popover, popoverContext: popoverContext }\"></ng-template>\n </ng-container>\n\n <ng-template #noTemplate>\n Example\n <!-- <ng-content></ng-content> -->\n </ng-template>\n</div>\n","import { FocusMonitor, FocusOrigin, isFakeMousedownFromScreenReader } from '@angular/cdk/a11y'\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion'\nimport { ESCAPE } from '@angular/cdk/keycodes'\nimport { ConnectionPositionPair, Overlay, OverlayRef, PositionStrategy } from '@angular/cdk/overlay'\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform'\nimport { ComponentPortal } from '@angular/cdk/portal'\nimport { ComponentRef, Directive, ElementRef, HostListener, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core'\nimport { BehaviorSubject, fromEvent, merge, of, Subject, Subscription } from 'rxjs'\nimport { switchMap, takeUntil } from 'rxjs/operators'\n\nimport { PopoverComponent } from './popover/popover.component'\n\n/** Options for binding a passive event listener. */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true })\n\n@Directive({\n selector: '[seamPopover]',\n // tslint:disable-next-line:use-host-property-decorator\n host: {\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'popoverOpen() || null'\n },\n exportAs: 'seamPopover'\n})\nexport class TheSeamPopoverDirective implements OnDestroy {\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n @Input() seamPopover?: TemplateRef<any> | null\n\n @Input() seamPopoverContext?: any\n\n /**\n * Defines a width for a popover that will scale down if the window innerWidth is\n * smaller than the value.\n */\n @Input()\n get seamPopoverBaseWidth() { return this._seamPopoverBaseWidth.value }\n set seamPopoverBaseWidth(value: number | null) {\n const _val = coerceNumberProperty(value, null)\n if (_val !== this._seamPopoverBaseWidth.value) {\n this._seamPopoverBaseWidth.next(_val)\n }\n }\n private _seamPopoverBaseWidth = new BehaviorSubject<number | null>(null)\n\n @Input()\n get seamPopoverDisabled() { return this._seamPopoverDisabled.value }\n set seamPopoverDisabled(val: boolean) { this._seamPopoverDisabled.next(coerceBooleanProperty(val)) }\n private _seamPopoverDisabled = new BehaviorSubject<boolean>(false)\n\n // ngOnInit() {\n // this._seamPopoverDisabled.pipe(\n // switchMap(disabled => {\n // if (disabled) {\n // this.close()\n // return of(undefined)\n // }\n\n // if (!(this._elementRef && this._elementRef.nativeElement)) {\n // return of(undefined)\n // }\n\n // return fromEvent(this._elementRef.nativeElement, 'click')\n // })\n // ).subscribe()\n // }\n\n private _active = false\n private _closing = false\n private _overlayRef: OverlayRef | undefined | null\n private _compRef: ComponentRef<PopoverComponent> | undefined | null\n private _popoverClosedSubscription = Subscription.EMPTY\n private _closingActionsSubscription = Subscription.EMPTY\n\n public restoreFocus = true\n\n // Tracking input type is necessary so it's possible to only auto-focus\n // the first item of the list when the menu is opened via the keyboard\n _openedBy: 'mouse' | 'touch' | null = null\n\n @HostListener('mousedown', [ '$event' ])\n _onMouseDown(event: MouseEvent) {\n if (!isFakeMousedownFromScreenReader(event)) {\n // Since right or middle button clicks won't trigger the `click` event,\n // we shouldn't consider the menu as opened by mouse in those cases.\n this._openedBy = event.button === 0 ? 'mouse' : null\n }\n }\n\n @HostListener('click', [ '$event' ])\n _onClick(event: any) {\n this.toggle()\n }\n\n @HostListener('document:keydown', [ '$event' ])\n _onDocumentKeydown(event: any) {\n if (event.keyCode === ESCAPE) {\n this.closePopover()\n }\n }\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n private _viewContainerRef: ViewContainerRef,\n private _overlay: Overlay,\n private _focusMonitor: FocusMonitor\n ) {\n this._elementRef.nativeElement.addEventListener('touchstart', this._handleTouchStart,\n passiveEventListenerOptions)\n\n this._seamPopoverBaseWidth\n .pipe(takeUntil(this._ngUnsubscribe))\n .subscribe(w => {\n if (this._compRef && this._compRef.instance) {\n this._compRef.instance.baseWidth = w\n this._compRef.changeDetectorRef.markForCheck()\n }\n })\n }\n\n ngOnDestroy() {\n this.closePopover()\n\n this._elementRef.nativeElement.removeEventListener('touchstart', this._handleTouchStart,\n passiveEventListenerOptions)\n\n this._popoverClosedSubscription.unsubscribe()\n this._closingActionsSubscription.unsubscribe()\n\n this._ngUnsubscribe.next(undefined)\n this._ngUnsubscribe.complete()\n }\n\n /**\n * Handles touch start events on the trigger.\n * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\n */\n private _handleTouchStart = () => this._openedBy = 'touch'\n\n public toggle(): void {\n if (this._active || this.seamPopoverDisabled) {\n this.closePopover()\n } else {\n this.openPopover()\n }\n }\n\n public openPopover(): void {\n if (this._active || !this.seamPopover) { return }\n this._active = true\n\n this._overlayRef = this._overlay.create({\n hasBackdrop: true,\n backdropClass: 'transparent',\n positionStrategy: this.getOverlayPosition(this._elementRef.nativeElement),\n })\n\n this._compRef = this._overlayRef.attach(new ComponentPortal(PopoverComponent, this._viewContainerRef))\n\n this._closingActionsSubscription = this._popoverClosingActions().subscribe(() => this.closePopover())\n\n this._compRef.instance.template = this.seamPopover\n this._compRef.instance.baseWidth = this.seamPopoverBaseWidth\n this._compRef.instance.popover = this\n this._compRef.instance.popoverContext = this.seamPopoverContext\n this._compRef.changeDetectorRef.markForCheck()\n\n this._popoverClosedSubscription = this._compRef.instance._afterExit.subscribe(v => {\n // console.log('closed', v)\n if (this._overlayRef?.hasAttached()) {\n this._overlayRef.detach()\n }\n\n this._resetPopover()\n\n this._popoverClosedSubscription.unsubscribe()\n this._closingActionsSubscription.unsubscribe()\n\n this._active = false\n this._closing = false\n })\n }\n\n public closePopover(): void {\n if (!this._active) { return }\n\n if (!this._closing) {\n if (this._compRef && this._compRef.instance) {\n this._closing = true\n this._compRef.instance._startExiting()\n }\n }\n }\n\n public popoverOpen(): boolean {\n return this._overlayRef?.hasAttached() ?? false\n }\n\n private getOverlayPosition(origin: HTMLElement): PositionStrategy {\n const positionStrategy = this._overlay.position()\n .flexibleConnectedTo(origin)\n .withPositions(this.getPositions())\n .withFlexibleDimensions(false)\n .withPush(true)\n\n return positionStrategy\n }\n\n private getPositions(): ConnectionPositionPair[] {\n return [\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top'\n },\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom'\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]\n }\n\n /**\n * Focuses the popover trigger.\n * @param origin Source of the popover trigger's focus.\n */\n focus(origin: FocusOrigin = 'program') {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(this._elementRef, origin)\n } else {\n this._elementRef.nativeElement.focus()\n }\n }\n\n /**\n * This method resets the popover when it's closed, most importantly restoring\n * focus to the popover trigger if the popover was opened via the keyboard.\n */\n private _resetPopover(): void {\n // We should reset focus if the user is navigating using a keyboard or\n // if we have a top-level trigger which might cause focus to be lost\n // when clicking on the backdrop.\n if (this.restoreFocus) {\n if (!this._openedBy) {\n // Note that the focus style will show up both for `program` and\n // `keyboard` so we don't have to specify which one it is.\n this.focus()\n }\n }\n\n this._openedBy = null\n }\n\n /** Returns a stream that emits whenever an action that should close the popover occurs. */\n private _popoverClosingActions() {\n const backdrop = this._overlayRef?.backdropClick() ?? of()\n const detachments = this._overlayRef?.detachments() ?? of()\n const hover = of()\n\n return merge(backdrop, hover, detachments)\n }\n\n}\n","import { OverlayModule } from '@angular/cdk/overlay'\nimport { PortalModule } from '@angular/cdk/portal'\nimport { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { TheSeamPopoverDirective } from './popover.directive'\nimport { PopoverComponent } from './popover/popover.component'\n\n@NgModule({\n declarations: [\n PopoverComponent,\n TheSeamPopoverDirective\n ],\n imports: [\n CommonModule,\n OverlayModule,\n PortalModule\n ],\n exports: [\n TheSeamPopoverDirective,\n OverlayModule,\n PortalModule\n ]\n})\nexport class TheSeamPopoverModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
2
  import * as i0 from '@angular/core';
3
- import { InjectionToken, forwardRef, EventEmitter, Component, Optional, Inject, Input, Output, ViewChild, NgModule } from '@angular/core';
3
+ import { InjectionToken, forwardRef, EventEmitter, Component, Optional, Inject, Input, Output, ViewChild, HostListener, NgModule } from '@angular/core';
4
4
  import * as i2 from '@angular/forms';
5
5
  import { NG_VALUE_ACCESSOR, FormControl, ReactiveFormsModule } from '@angular/forms';
6
6
  import 'quill-mention';
@@ -371,6 +371,16 @@ class RichTextComponent {
371
371
  this._pollCalculatedRowHeight.next();
372
372
  }, 0);
373
373
  }
374
+ _handleKeydown(event) {
375
+ if (event.code === 'Escape') {
376
+ const qlEditor = this._quillEditor?.editorElem?.querySelector('.ql-editor');
377
+ if (notNullOrUndefined(qlEditor) && qlEditor === document.activeElement && qlEditor instanceof HTMLElement) {
378
+ event.preventDefault();
379
+ event.stopImmediatePropagation();
380
+ qlEditor.blur();
381
+ }
382
+ }
383
+ }
374
384
  constructor(_renderer, _customConfig) {
375
385
  this._renderer = _renderer;
376
386
  this._customConfig = _customConfig;
@@ -449,6 +459,14 @@ class RichTextComponent {
449
459
  }
450
460
  this._templateSet.next(true);
451
461
  }
462
+ ngOnDestroy() {
463
+ // hacky way to ensure mentions menu gets destroyed when component is destroyed
464
+ const mentionModule = this._quillEditor?.quillEditor.getModule('mention');
465
+ const hideMentionList = mentionModule?.hideMentionList;
466
+ if (hideMentionList && typeof hideMentionList === 'function') {
467
+ hideMentionList.call(mentionModule);
468
+ }
469
+ }
452
470
  _buildQuillConfig() {
453
471
  this._configSet.next(false);
454
472
  const config = {
@@ -624,7 +642,7 @@ class RichTextComponent {
624
642
  }
625
643
  }
626
644
  RichTextComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: RichTextComponent, deps: [{ token: i0.Renderer2 }, { token: THESEAM_QUILL_EDITOR_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
627
- RichTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: RichTextComponent, selector: "seam-rich-text", inputs: { val: ["value", "val"], required: "required", placeholder: "placeholder", rows: "rows", resizable: "resizable", disableRichText: "disableRichText", displayCharacterCounter: "displayCharacterCounter", minLength: "minLength", maxLength: "maxLength", characterCounterTpl: "characterCounterTpl", characterCounterFn: "characterCounterFn", useMentions: "useMentions", mentionItems: "mentionItems", mentionSearchFn: "mentionSearchFn", mentionRenderListFn: "mentionRenderListFn", mentionListLoadingText: "mentionListLoadingText", mentionListEmptyText: "mentionListEmptyText" }, outputs: { quillEditorCreated: "quillEditorCreated", quillEditorChanged: "quillEditorChanged", quillContentChanged: "quillContentChanged", quillSelectionChanged: "quillSelectionChanged", quillFocus: "quillFocus", quillBlur: "quillBlur", mentionsUpdated: "mentionsUpdated" }, providers: [
645
+ RichTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: RichTextComponent, selector: "seam-rich-text", inputs: { val: ["value", "val"], required: "required", placeholder: "placeholder", rows: "rows", resizable: "resizable", disableRichText: "disableRichText", displayCharacterCounter: "displayCharacterCounter", minLength: "minLength", maxLength: "maxLength", characterCounterTpl: "characterCounterTpl", characterCounterFn: "characterCounterFn", useMentions: "useMentions", mentionItems: "mentionItems", mentionSearchFn: "mentionSearchFn", mentionRenderListFn: "mentionRenderListFn", mentionListLoadingText: "mentionListLoadingText", mentionListEmptyText: "mentionListEmptyText" }, outputs: { quillEditorCreated: "quillEditorCreated", quillEditorChanged: "quillEditorChanged", quillContentChanged: "quillContentChanged", quillSelectionChanged: "quillSelectionChanged", quillFocus: "quillFocus", quillBlur: "quillBlur", mentionsUpdated: "mentionsUpdated" }, host: { listeners: { "keydown": "_handleKeydown($event)" } }, providers: [
628
646
  RICH_TEXT_VALUE_ACCESSOR
629
647
  ], viewQueries: [{ propertyName: "quillEditor", first: true, predicate: ["quillEditor"], descendants: true }, { propertyName: "defaultCharacterCounterTpl", first: true, predicate: ["characterCounter"], descendants: true }], ngImport: i0, template: "<div class=\"editor\" *ngIf=\"configSet$ | async\" [class.initializing]=\"!(initialized$ | async)\">\n <ng-container *ngIf=\"config$ | async as config\">\n <quill-editor\n #quillEditor\n seamInput\n [class.disabled]=\"readOnly\"\n [attr.disabled]=\"readOnly\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [readOnly]=\"readOnly\"\n [required]=\"required\"\n [minLength]=\"minLength\"\n [maxLength]=\"maxLength\"\n [format]=\"config.format\"\n [theme]=\"config.theme\"\n [modules]=\"config.modules\"\n [debug]=\"config.debug\"\n [formats]=\"config.formats\"\n [customToolbarPosition]=\"config.customToolbarPosition\"\n [sanitize]=\"config.sanitize\"\n [styles]=\"config.styles\"\n [strict]=\"config.strict\"\n [scrollingContainer]=\"config.scrollingContainer\"\n [bounds]=\"config.bounds\"\n [customOptions]=\"config.customOptions\"\n [customModules]=\"config.customModules\"\n [trackChanges]=\"config.trackChanges\"\n [preserveWhitespace]=\"config.preserveWhitespace\"\n [classes]=\"config.classes\"\n [trimOnValidation]=\"config.trimOnValidation\"\n [linkPlaceholder]=\"config.linkPlaceholder\"\n [compareValues]=\"config.compareValues\"\n [filterNull]=\"config.filterNull\"\n [debounceTime]=\"config.debounceTime\"\n [class.can-resize]=\"resizable\"\n (onEditorCreated)=\"_onEditorCreated($event)\"\n (onEditorChanged)=\"_onEditorChanged($event)\"\n (onContentChanged)=\"_onContentChanged($event)\"\n (onSelectionChanged)=\"_onSelectionChanged($event)\"\n (onFocus)=\"_onFocus($event)\"\n (onBlur)=\"_onBlur($event)\"></quill-editor>\n <ng-container *ngIf=\"displayCharacterCounter\">\n <ng-container\n [ngTemplateOutlet]=\"characterCounterTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: characterCount$ | async, minLength: minLength, maxLength: maxLength, characterCount: characterCount$ | async }\"></ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #characterCounter let-implicit let-minLength=\"minLength\" let-maxLength=\"maxLength\" let-characterCount=\"characterCount\">\n <div class=\"small text-black-50 text-right\">\n <ng-container *ngIf=\"characterCount || characterCount === 0\">\n Character Count:\n <span [class.text-danger]=\"characterCount && ((maxLength && characterCount > maxLength) || (minLength && characterCount < minLength))\">\n {{ characterCount | number }}\n </span>\n <ng-container *ngIf=\"maxLength\">\n / {{ maxLength }}\n </ng-container>\n <span *ngIf=\"minLength\" class=\"font-italic\">\n (minimum {{ minLength }} expected)\n </span>\n </ng-container>\n </div>\n</ng-template>\n", styles: [":host .editor{position:relative}:host .editor.initializing:before{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background:#f8f9fa;z-index:1}:host quill-editor.can-resize ::ng-deep .ql-editor{overflow:auto;resize:vertical}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.QuillEditorComponent, selector: "quill-editor" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] });
630
648
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: RichTextComponent, decorators: [{
@@ -692,6 +710,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
692
710
  }], defaultCharacterCounterTpl: [{
693
711
  type: ViewChild,
694
712
  args: ['characterCounter']
713
+ }], _handleKeydown: [{
714
+ type: HostListener,
715
+ args: ['keydown', ['$event']]
695
716
  }] } });
696
717
 
697
718
  const THESEAM_QUILL_FORMATS = [
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-rich-text.mjs","sources":["../../../projects/ui-common/rich-text/utils/utils.ts","../../../projects/ui-common/rich-text/rich-text/rich-text.component.ts","../../../projects/ui-common/rich-text/rich-text/rich-text.component.html","../../../projects/ui-common/rich-text/utils/models.ts","../../../projects/ui-common/rich-text/rich-text.module.ts","../../../projects/ui-common/rich-text/theseam-ui-common-rich-text.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\"\r\nimport { QuillToolbarConfig } from \"ngx-quill\"\r\nimport { TheSeamQuillModules, TheSeamQuillStyleFormat, TheSeamQuillEditorConfig, TheSeamQuillMentionMenuOption, TheSeamQuillInputFormat, TheSeamQuillMentionOptions, TheSeamQuillMentionSourceFn, TheSeamQuillMentionSearchFn, TheSeamCharacterCounterFn, TheSeamQuillMentionMenuItem } from \"./models\"\r\nimport { isNullOrUndefined, notNullOrUndefined, notNullOrUndefinedOrEmpty } from \"@theseam/ui-common/utils\"\r\n\r\nexport const HTML_ENTITY_REGEX = /<[^>]+>/gm\r\n\r\nexport const THESEAM_QUILL_TOOLBAR_OPTIONS_DEFAULT: QuillToolbarConfig = [\r\n ['bold', 'italic', 'underline', 'strike'],\r\n [{ header: [0, 1, 2, 3, 4, 5] }],\r\n [{ list: 'ordered' }, { list: 'bullet' }],\r\n [{ align: [] }],\r\n ['link'],\r\n ['clean'],\r\n]\r\n\r\nexport const THESEAM_QUILL_MENTION_OPTIONS_DEFAULT: Partial<TheSeamQuillMentionOptions> = {\r\n spaceAfterInsert: false,\r\n positioningStrategy: 'fixed',\r\n dataAttributes: [ 'type' ]\r\n}\r\n\r\nexport const THESEAM_QUILL_MODULES_DEFAULT: TheSeamQuillModules = {\r\n toolbar: THESEAM_QUILL_TOOLBAR_OPTIONS_DEFAULT\r\n}\r\n\r\nexport const THESEAM_QUILL_FORMATS_DEFAULT: TheSeamQuillStyleFormat[] = [\r\n 'align',\r\n 'bold',\r\n 'header',\r\n 'indent',\r\n 'italic',\r\n 'link',\r\n 'list',\r\n 'size',\r\n 'strike',\r\n 'underline',\r\n 'mention'\r\n]\r\n\r\nexport const THESEAM_QUILL_EDITOR_CONFIG_DEFAULT: TheSeamQuillEditorConfig = {\r\n format: 'html',\r\n modules: THESEAM_QUILL_MODULES_DEFAULT,\r\n formats: THESEAM_QUILL_FORMATS_DEFAULT,\r\n linkPlaceholder: 'https://google.com',\r\n customToolbarPosition: 'top',\r\n sanitize: false,\r\n strict: true,\r\n customOptions: [],\r\n customModules: [],\r\n preserveWhitespace: false,\r\n trimOnValidation: false,\r\n compareValues: false,\r\n filterNull: false\r\n}\r\n\r\nexport const THESEAM_QUILL_EDITOR_CONFIG = new InjectionToken<TheSeamQuillEditorConfig>('TheSeamQuillEditorConfig')\r\n\r\nexport const defaultHtmlCharacterCounterFn: TheSeamCharacterCounterFn = (value: string, format: TheSeamQuillInputFormat | undefined): number => {\r\n if (format === 'html') {\r\n return value.replace(HTML_ENTITY_REGEX, ' ').replace(/\\s\\s+/g, ' ').trim().length\r\n }\r\n else if (format === 'text') {\r\n return value.replace(/\\s\\s+/g, ' ').trim().length\r\n }\r\n else {\r\n console.warn(`Format ${format} not supported!`)\r\n return 0\r\n }\r\n}\r\n\r\nexport function isMentionMenuOption(value: TheSeamQuillMentionMenuItem | undefined): value is TheSeamQuillMentionMenuOption {\r\n if (isNullOrUndefined(value) || typeof value !== 'object') {\r\n return false\r\n }\r\n\r\n return Object.prototype.hasOwnProperty.call(value, 'id')\r\n}\r\n\r\nexport const defaultMentionSearchFn: TheSeamQuillMentionSearchFn = (source: TheSeamQuillMentionMenuItem[], textAfter: string, mentionChar: string) => {\r\n return source.filter(u => {\r\n if (!isMentionMenuOption(u) || u.searchIgnore === true) {\r\n return true\r\n }\r\n\r\n return u.value.toLowerCase().includes(textAfter.toLowerCase())\r\n })\r\n}\r\n\r\nexport const defaultMentionRenderListFn: TheSeamQuillMentionSourceFn = (source: TheSeamQuillMentionMenuItem[], searchFn: TheSeamQuillMentionSearchFn, emptyListItem: TheSeamQuillMentionMenuItem | undefined, textAfter: string, renderList: (list: any[], searchTerm: string) => any, mentionChar: string) => {\r\n let list = searchFn(source, textAfter, mentionChar)\r\n\r\n if (list.length === 0 && notNullOrUndefined(emptyListItem)) {\r\n list.push(emptyListItem)\r\n }\r\n else {\r\n let reduceIdx = 0\r\n list = list.reduce((acc, mention) => {\r\n const previousMenuItem = acc[reduceIdx - 1]\r\n const previousMenuItemGroupName = isMentionMenuOption(previousMenuItem) ? previousMenuItem.groupName : undefined\r\n if (isMentionMenuOption(mention)\r\n && notNullOrUndefinedOrEmpty(mention.groupName)\r\n && mention.groupName !== previousMenuItemGroupName\r\n ) {\r\n acc.push({\r\n value: mention.groupName,\r\n disabled: true,\r\n type: 'groupName'\r\n })\r\n\r\n reduceIdx++\r\n }\r\n\r\n if (!isMentionMenuOption(mention)) {\r\n mention.disabled = true\r\n }\r\n\r\n acc.push(mention)\r\n reduceIdx++\r\n\r\n return acc\r\n }, <TheSeamQuillMentionMenuItem[]>[] satisfies TheSeamQuillMentionMenuItem[])\r\n }\r\n\r\n renderList(list, textAfter)\r\n}\r\n\r\n// Keeping this as an example for a custom menu item.\r\n// There doesn't appear to be a better way of passing in a custom template.\r\n// export const defaultMentionRenderItem = (item: TheSeamQuillMentionListItem) => {\r\n // if (item.type === 'groupName') {\r\n // const text = document.createElement('div')\r\n // text.setAttribute('class', 'small text-black-50')\r\n // text.innerText = item.value\r\n\r\n // return text.outerHTML\r\n // }\r\n // else if (item.type === 'divider') {\r\n // const div = document.createElement('hr')\r\n // div.setAttribute('class', 'my-2')\r\n // return div.outerHTML\r\n // }\r\n // else {\r\n // return item.value\r\n // }\r\n// }\r\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { AfterViewInit, Component, EventEmitter, Inject, Input, OnInit, Optional, Output, Provider, Renderer2, TemplateRef, ViewChild, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { Blur, ContentChange, EditorChangeContent, EditorChangeSelection, Focus, QuillEditorComponent, SelectionChange } from 'ngx-quill';\nimport { Delta } from 'quill';\nimport 'quill-mention';\nimport { BehaviorSubject, Observable, Subject, combineLatest, filter, lastValueFrom, map, of, shareReplay, startWith, switchMap, take, tap } from 'rxjs';\n\nimport { isNullOrUndefined, notNullOrUndefined } from '@theseam/ui-common/utils';\nimport { TheSeamCharacterCounterFn, TheSeamQuillEditorConfig, TheSeamQuillMentionMenuItem, TheSeamQuillMentionMenuOption, TheSeamQuillMentionSearchFn, TheSeamQuillMentionSourceFn, TheSeamQuillModules } from '../utils/models';\nimport { THESEAM_QUILL_EDITOR_CONFIG, THESEAM_QUILL_EDITOR_CONFIG_DEFAULT, THESEAM_QUILL_MENTION_OPTIONS_DEFAULT, defaultHtmlCharacterCounterFn, defaultMentionRenderListFn, defaultMentionSearchFn, isMentionMenuOption } from '../utils/utils';\n\nexport const RICH_TEXT_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RichTextComponent),\n multi: true\n}\n\n@Component({\n selector: 'seam-rich-text',\n templateUrl: './rich-text.component.html',\n styleUrls: ['./rich-text.component.scss'],\n providers: [\n RICH_TEXT_VALUE_ACCESSOR\n ]\n})\nexport class RichTextComponent implements OnInit, AfterViewInit, ControlValueAccessor {\n\n onChange: any\n onTouched: any\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('value') val: string | undefined\n\n formControl = new FormControl<string | null>(null)\n\n @Input()\n get required(): boolean {\n return this._required\n }\n set required(value: boolean | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._required = coerceBooleanProperty(value)\n }\n }\n private _required = false\n\n /** @default '' (empty string) */\n @Input()\n get placeholder(): string {\n return this._placeholder\n }\n set placeholder(value: string | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._placeholder = value\n }\n }\n private _placeholder = ''\n\n /**\n * Initial rows visible in text area, set using `height` and `minHeight`.\n *\n * NOTE: Resizable editors will not be able to size below the height calculated from this value.\n *\n * @default 5\n */\n @Input()\n get rows(): number {\n return this._rows\n }\n set rows(value: number | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._rows = value\n\n this._pollCalculatedRowHeight.next()\n }\n }\n private _rows = 5\n\n /**\n * When `true`, text area can be resized vertically.\n *\n * @default true\n */\n @Input()\n get resizable(): boolean {\n return this._resizable\n }\n set resizable(value: boolean | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._resizable = coerceBooleanProperty(value)\n }\n }\n private _resizable = true\n\n /** @default false */\n get readOnly(): boolean {\n return this._readOnly\n }\n set readOnly(value: boolean | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._readOnly = coerceBooleanProperty(value)\n }\n }\n private _readOnly = false\n\n // TODO: fix bug where initial html value is rendered in plain text\n /**\n * When `true`, overrides all other provided settings to present the editor\n * as a standard textbox.\n *\n * NOTE: For the moment, `<p></p>` tags are still allowed, triggered by the `Enter` key.\n * https://github.com/slab/quill/issues/1432\n *\n * @default false\n */\n @Input()\n get disableRichText(): boolean {\n return this._disableRichText\n }\n set disableRichText(value: boolean | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._disableRichText = coerceBooleanProperty(value)\n\n this._updateQuillConfig()\n }\n }\n private _disableRichText = false\n\n /**\n * When `true`, displays a character counter at the bottom of the editor.\n * Character counter text is determined by values provided in `minLength`\n * and `maxLength`.\n *\n * The default count algorithm strips out html entities and replaces them\n * with spaces to get the string length. To override this behavior, pass\n * a custom function to `characterCounterFn`.\n *\n * To override default character counter display, pass a custom template to `characterCountTpl`.\n *\n * @default false\n */\n @Input()\n get displayCharacterCounter(): boolean {\n return this._displayCharacterCounter\n }\n set displayCharacterCounter(value: boolean | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._displayCharacterCounter = coerceBooleanProperty(value)\n }\n }\n private _displayCharacterCounter = false\n\n @Input()\n get minLength(): number | undefined {\n return this._minLength\n }\n set minLength(value: number | undefined) {\n if (notNullOrUndefined(value)) {\n this._minLength = value\n }\n }\n private _minLength: number | undefined\n\n @Input()\n get maxLength(): number | undefined {\n return this._maxLength\n }\n set maxLength(value: number | undefined) {\n if (notNullOrUndefined(value)) {\n this._maxLength = value\n }\n }\n private _maxLength: number | undefined\n\n /**\n * Set to override default character counter display.\n *\n * Template context includes variables `minLength`, `maxLength`, and `characterCount`.\n */\n @Input()\n get characterCounterTpl(): TemplateRef<any> | null {\n return this._characterCounterTpl\n }\n set characterCounterTpl(value) {\n if (notNullOrUndefined(value)) {\n this._characterCounterTpl = value\n }\n }\n private _characterCounterTpl: TemplateRef<any> | null = null\n\n /**\n * Set to override default counter function, which strips html entities and\n * replaces them with a space.\n */\n @Input() get characterCounterFn(): TheSeamCharacterCounterFn {\n return this._characterCounterFn\n }\n set characterCounterFn(value: TheSeamCharacterCounterFn | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._characterCounterFn = value\n }\n }\n private _characterCounterFn = defaultHtmlCharacterCounterFn\n\n /**\n * If `true`, component will configure the Quill editor with the quill-mentions extension\n * and listen for values passed to `mentionItems` to populate the mentions menu.\n *\n * @default false\n */\n @Input()\n get useMentions(): boolean {\n return this._useMentions\n }\n set useMentions(value: boolean | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._useMentions = coerceBooleanProperty(value)\n\n this._updateQuillConfig()\n }\n }\n private _useMentions: boolean = false\n\n /**\n * List of users, user groups, or other entities to display in mentions menu.\n * Minimum required properties are `id` (unique) and `value`, which acts as the label.\n *\n * By default, the menu is triggered by typing the `@` symbol into the text area.\n */\n @Input()\n get mentionItems(): TheSeamQuillMentionMenuItem[] | null | undefined {\n return this._mentionItems.value\n }\n set mentionItems(value: TheSeamQuillMentionMenuItem[] | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._mentionItems.next(value)\n }\n }\n private _mentionItems = new BehaviorSubject<TheSeamQuillMentionMenuItem[] | null | undefined>(undefined)\n public mentionItems$ = this._mentionItems.asObservable().pipe(\n filter(mentions => notNullOrUndefined(mentions) && mentions.length > 0),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n\n /**\n * Set to override default search function when user is typing a mention.\n */\n @Input()\n get mentionSearchFn(): TheSeamQuillMentionSearchFn {\n return this._mentionSearchFn\n }\n set mentionSearchFn(value: TheSeamQuillMentionSearchFn | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._mentionSearchFn = value\n }\n }\n private _mentionSearchFn: TheSeamQuillMentionSearchFn = defaultMentionSearchFn\n\n /**\n * Set to override default render function for mentions list.\n *\n * Function should call `renderList`.\n */\n @Input()\n get mentionRenderListFn(): TheSeamQuillMentionSourceFn {\n return this._mentionRenderListFn\n }\n set mentionRenderListFn(value: TheSeamQuillMentionSourceFn | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._mentionRenderListFn = value\n }\n }\n private _mentionRenderListFn: TheSeamQuillMentionSourceFn = defaultMentionRenderListFn\n\n /**\n * Set to override default text shown while mention items are loading.\n *\n * @default 'Loading...'\n */\n @Input()\n get mentionListLoadingText(): string {\n return this._mentionListLoadingText\n }\n set mentionListLoadingText(value: string | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._mentionListLoadingText = value\n }\n }\n private _mentionListLoadingText: string = 'Loading...'\n\n /**\n * Set to override default text shown when a mention search returns no items.\n *\n * @default 'No matches found.'\n */\n @Input()\n get mentionListEmptyText(): string {\n return this._mentionListEmptyText\n }\n set mentionListEmptyText(value: string | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._mentionListEmptyText = value\n }\n }\n private _mentionListEmptyText: string = 'No matches found.'\n\n get mentionListEmptyItem(): TheSeamQuillMentionMenuOption {\n return {\n id: 'undefined',\n value: this.mentionListEmptyText,\n disabled: true,\n emptyList: true\n }\n }\n\n @Output() quillEditorCreated: EventEmitter<any> = new EventEmitter()\n @Output() quillEditorChanged: EventEmitter<EditorChangeContent | EditorChangeSelection> = new EventEmitter()\n @Output() quillContentChanged: EventEmitter<ContentChange> = new EventEmitter()\n @Output() quillSelectionChanged: EventEmitter<SelectionChange> = new EventEmitter()\n @Output() quillFocus: EventEmitter<Focus> = new EventEmitter()\n @Output() quillBlur: EventEmitter<Blur> = new EventEmitter()\n\n @Output() mentionsUpdated: EventEmitter<TheSeamQuillMentionMenuOption[]> = new EventEmitter()\n\n @ViewChild('quillEditor')\n get quillEditor(): TemplateRef<QuillEditorComponent> | undefined {\n return this._quillEditor\n }\n set quillEditor(value: TemplateRef<QuillEditorComponent> | undefined) {\n this._quillEditor = value\n\n // setTimeout because full html isn't available until the next tick\n setTimeout(() => {\n this._pollCalculatedRowHeight.next()\n }, 0)\n }\n private _quillEditor: TemplateRef<QuillEditorComponent> | undefined\n\n @ViewChild('characterCounter') defaultCharacterCounterTpl: TemplateRef<any> | undefined\n\n private _isWritingValue = false\n\n private _pollCalculatedRowHeight = new Subject<void>()\n\n private _configSet = new BehaviorSubject<boolean>(false)\n public configSet$ = this._configSet.asObservable()\n\n private _stylesSet = new BehaviorSubject<boolean>(false)\n private _templateSet = new BehaviorSubject<boolean>(false)\n\n public initialized$: Observable<boolean>\n\n public characterCount$: Observable<number>\n\n private _config = new BehaviorSubject<TheSeamQuillEditorConfig | undefined>(undefined)\n public config$ = this._config.asObservable()\n\n private _selectedMentions = new BehaviorSubject<TheSeamQuillMentionMenuOption[]>([])\n public selectedMentions$ = this._selectedMentions.asObservable()\n\n constructor(\n private readonly _renderer: Renderer2,\n @Optional() @Inject(THESEAM_QUILL_EDITOR_CONFIG) private _customConfig?: TheSeamQuillEditorConfig\n ) {\n this.initialized$ = combineLatest([\n this._configSet.asObservable(),\n this._stylesSet.asObservable(),\n this._templateSet.asObservable(),\n ]).pipe(\n map(sets => sets.findIndex(s => !s) === -1)\n )\n\n this.characterCount$ = this.initialized$.pipe(\n filter(i => i),\n switchMap(() => {\n if (notNullOrUndefined(this.formControl)) {\n return this.formControl.valueChanges.pipe(\n startWith(this.formControl.value),\n map(v => this.characterCounterFn(v || '' as string, this._config.value?.format)),\n )\n }\n\n return of(0)\n })\n )\n\n this.selectedMentions$.pipe(\n tap(mentions => this.mentionsUpdated.emit(mentions))\n ).subscribe()\n }\n\n ngOnInit(): void {\n // TODO: test this more\n // ignore quill initial valueChange event, to keep functionality in line with other inputs\n let initialEmitComplete = false\n this._configSet.pipe(\n filter(s => s),\n switchMap(() => this.formControl.valueChanges.pipe(\n // skip(1),\n take(1),\n tap(() => initialEmitComplete = true)\n ))\n ).subscribe()\n\n this.formControl.valueChanges.pipe(\n filter(() => !this._isWritingValue && initialEmitComplete),\n tap(value => this.value = value)\n ).subscribe()\n\n this._pollCalculatedRowHeight.asObservable().pipe(\n tap(() => {\n this._stylesSet.next(false)\n\n const calculatedRowsHeight = `${this.rows * 1.5}rem`\n\n if (notNullOrUndefined(this.rows) && notNullOrUndefined(this._quillEditor)) {\n const editorEl = this._quillEditor.elementRef.nativeElement.querySelector('.ql-editor')\n\n if (notNullOrUndefined(editorEl)) {\n this._renderer.setStyle(editorEl, 'height', calculatedRowsHeight)\n this._renderer.setStyle(editorEl, 'min-height', calculatedRowsHeight)\n }\n }\n\n this._stylesSet.next(true)\n })\n ).subscribe()\n\n this._buildQuillConfig()\n }\n\n ngAfterViewInit(): void {\n if (isNullOrUndefined(this.characterCounterTpl)) {\n this.characterCounterTpl = this.defaultCharacterCounterTpl || null\n }\n\n this._templateSet.next(true)\n }\n\n private _buildQuillConfig() {\n this._configSet.next(false)\n\n const config: TheSeamQuillEditorConfig = {\n ...THESEAM_QUILL_EDITOR_CONFIG_DEFAULT\n }\n\n if (this.disableRichText) {\n config.format = 'text'\n config.formats = []\n config.modules = {\n toolbar: false\n }\n }\n else {\n config.format = this._getConfigOrDefault('format')\n config.formats = this._getConfigOrDefault('formats')\n config.modules = {\n ...this._getConfigOrDefault('modules')\n }\n }\n\n if (this.useMentions) {\n const mentionModules: TheSeamQuillModules = {\n ...config.modules,\n mention: {\n ...THESEAM_QUILL_MENTION_OPTIONS_DEFAULT,\n renderLoading: () => this.mentionListLoadingText,\n source: async (searchTerm: string, renderList: (list: any[], searchTerm: string) => void, mentionChar: string) => {\n // this function is called every time the menu is triggered,\n // so it will always have the latest value from mentionItems$\n const mentionsAsync = await lastValueFrom(this.mentionItems$.pipe(take(1)))\n\n if (notNullOrUndefined(mentionsAsync)) {\n this.mentionRenderListFn(mentionsAsync, this.mentionSearchFn, this.mentionListEmptyItem, searchTerm, renderList, mentionChar)\n }\n },\n ...config.modules?.mention,\n }\n }\n\n config.modules = mentionModules\n }\n\n config.theme = this._getConfigOrDefault('theme')\n config.debug = this._getConfigOrDefault('debug')\n config.customToolbarPosition = this._getConfigOrDefault('customToolbarPosition')\n config.sanitize = this._getConfigOrDefault('sanitize')\n config.styles = this._getConfigOrDefault('styles')\n config.strict = this._getConfigOrDefault('strict')\n config.scrollingContainer = this._getConfigOrDefault('scrollingContainer')\n config.bounds = this._getConfigOrDefault('bounds')\n config.customOptions = this._getConfigOrDefault('customOptions')\n config.customModules = this._getConfigOrDefault('customModules')\n config.trackChanges = this._getConfigOrDefault('trackChanges')\n config.preserveWhitespace = this._getConfigOrDefault('preserveWhitespace')\n config.classes = this._getConfigOrDefault('classes')\n config.trimOnValidation = this._getConfigOrDefault('trimOnValidation')\n config.linkPlaceholder = this._getConfigOrDefault('linkPlaceholder')\n config.compareValues = this._getConfigOrDefault('compareValues')\n config.filterNull = this._getConfigOrDefault('filterNull')\n config.debounceTime = this._getConfigOrDefault('debounceTime')\n\n this._config.next(config)\n\n // setTimeout bc ngx-quill library doesn't listen for input changes,\n // so we must destroy and create the component each time config is updated\n setTimeout(() => {\n this._configSet.next(true)\n }, 0)\n }\n\n private _getConfigOrDefault<K extends keyof TheSeamQuillEditorConfig>(prop: K): TheSeamQuillEditorConfig[K] {\n if (this._customConfig && Object.prototype.hasOwnProperty.call(this._customConfig, prop)) {\n return this._customConfig[prop]\n }\n return THESEAM_QUILL_EDITOR_CONFIG_DEFAULT[prop]\n }\n\n private _updateQuillConfig() {\n if (this._configSet.value) {\n this._buildQuillConfig()\n }\n }\n\n // Not usable, bc config has to be set immediately, potentially before mentions populate.\n // To set customDataAttributes, provide a custom config.\n // private _getCustomDataAttributes(mentions: TheSeamQuillMentionMenuOption[]): string[] {\n // return mentions.reduce((acc, mention) => {\n // const keys = Object.keys(mention)\n\n // keys.forEach(key => {\n // if (acc.findIndex(a => a === key) === -1) {\n // acc.push(key)\n // }\n // })\n\n // return acc\n // }, <string[]>[] satisfies string[])\n // }\n\n get value(): string | undefined | null {\n return this._value\n }\n set value(value: string | undefined | null) {\n this._value = value\n\n if (this.onChange) { this.onChange(value) }\n if (this.onTouched) { this.onTouched() }\n }\n private _value: string | undefined | null\n\n writeValue(value: any): void {\n this._isWritingValue = true\n\n this.formControl.setValue(value)\n this.value = value\n\n this._isWritingValue = false\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.readOnly = isDisabled\n }\n\n _onEditorCreated(event: any) {\n this.quillEditorCreated.emit(event)\n }\n\n _onEditorChanged(event: EditorChangeContent | EditorChangeSelection) {\n this.quillEditorChanged.emit(event)\n }\n\n _onContentChanged(event: ContentChange) {\n this.quillContentChanged.emit(event)\n\n this._updateMentionsFromDelta(event.content)\n }\n\n _onSelectionChanged(event: SelectionChange) {\n this.quillSelectionChanged.emit(event)\n }\n\n _onFocus(event: Focus) {\n this.quillFocus.emit(event)\n }\n\n _onBlur(event: Blur) {\n this.quillBlur.emit(event)\n\n if (this.onTouched) {\n this.onTouched()\n }\n }\n\n /**\n * Hacky way to track mention inserts/deletes\n */\n private _updateMentionsFromDelta(content: Delta) {\n if (notNullOrUndefined(content.ops)) {\n const contentMentionIds = content.ops.map(o => o.insert?.mention?.id).filter(notNullOrUndefined)\n const selectedMentions = [ ...this._selectedMentions.value ]\n const mentionOptions = [ ...this._mentionItems.value || [] ]\n\n const newMentions: TheSeamQuillMentionMenuOption[] = contentMentionIds.reduce((acc, mentionId) => {\n const insertMention = mentionOptions.find(m => isMentionMenuOption(m) && m.id === mentionId)\n\n if (notNullOrUndefined(insertMention)) {\n acc.push(insertMention)\n }\n else {\n console.warn('Mention addition failed! Selected mention option not found:', mentionId)\n }\n\n return acc\n }, <TheSeamQuillMentionMenuOption[]>[])\n\n let emitUpdate = false\n if (selectedMentions.length !== newMentions.length) {\n // if the length has changed, we know an update occurred\n emitUpdate = true\n }\n else {\n // otherwise, test ids for old and new items to see if we need to emit a change\n const selectedMentionIds = this._selectedMentions.value.map(m => m.id)\n const newMentionIds = newMentions.map(m => m.id)\n\n if (\n selectedMentionIds.findIndex(m => !newMentionIds.includes(m)) !== -1 ||\n newMentionIds.findIndex(m => !selectedMentionIds.includes(m)) !== -1\n ) {\n emitUpdate = true\n }\n }\n\n if (emitUpdate) {\n this._selectedMentions.next(newMentions)\n }\n }\n }\n}\n","<div class=\"editor\" *ngIf=\"configSet$ | async\" [class.initializing]=\"!(initialized$ | async)\">\n <ng-container *ngIf=\"config$ | async as config\">\n <quill-editor\n #quillEditor\n seamInput\n [class.disabled]=\"readOnly\"\n [attr.disabled]=\"readOnly\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [readOnly]=\"readOnly\"\n [required]=\"required\"\n [minLength]=\"minLength\"\n [maxLength]=\"maxLength\"\n [format]=\"config.format\"\n [theme]=\"config.theme\"\n [modules]=\"config.modules\"\n [debug]=\"config.debug\"\n [formats]=\"config.formats\"\n [customToolbarPosition]=\"config.customToolbarPosition\"\n [sanitize]=\"config.sanitize\"\n [styles]=\"config.styles\"\n [strict]=\"config.strict\"\n [scrollingContainer]=\"config.scrollingContainer\"\n [bounds]=\"config.bounds\"\n [customOptions]=\"config.customOptions\"\n [customModules]=\"config.customModules\"\n [trackChanges]=\"config.trackChanges\"\n [preserveWhitespace]=\"config.preserveWhitespace\"\n [classes]=\"config.classes\"\n [trimOnValidation]=\"config.trimOnValidation\"\n [linkPlaceholder]=\"config.linkPlaceholder\"\n [compareValues]=\"config.compareValues\"\n [filterNull]=\"config.filterNull\"\n [debounceTime]=\"config.debounceTime\"\n [class.can-resize]=\"resizable\"\n (onEditorCreated)=\"_onEditorCreated($event)\"\n (onEditorChanged)=\"_onEditorChanged($event)\"\n (onContentChanged)=\"_onContentChanged($event)\"\n (onSelectionChanged)=\"_onSelectionChanged($event)\"\n (onFocus)=\"_onFocus($event)\"\n (onBlur)=\"_onBlur($event)\"></quill-editor>\n <ng-container *ngIf=\"displayCharacterCounter\">\n <ng-container\n [ngTemplateOutlet]=\"characterCounterTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: characterCount$ | async, minLength: minLength, maxLength: maxLength, characterCount: characterCount$ | async }\"></ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #characterCounter let-implicit let-minLength=\"minLength\" let-maxLength=\"maxLength\" let-characterCount=\"characterCount\">\n <div class=\"small text-black-50 text-right\">\n <ng-container *ngIf=\"characterCount || characterCount === 0\">\n Character Count:\n <span [class.text-danger]=\"characterCount && ((maxLength && characterCount > maxLength) || (minLength && characterCount < minLength))\">\n {{ characterCount | number }}\n </span>\n <ng-container *ngIf=\"maxLength\">\n / {{ maxLength }}\n </ng-container>\n <span *ngIf=\"minLength\" class=\"font-italic\">\n (minimum {{ minLength }} expected)\n </span>\n </ng-container>\n </div>\n</ng-template>\n","import { CustomModule, CustomOption, QuillModules } from 'ngx-quill'\r\nimport QuillType from 'quill'\r\n\r\nexport interface TheSeamQuillMentionMenuOption {\r\n /** Must be unique. */\r\n id: string\r\n\r\n /**\r\n * The value is used as the label for the mentions,\r\n * both in the text area and in the menu.\r\n */\r\n value: string\r\n\r\n /**\r\n * When `true`, this item will be included in the menu,\r\n * regardless of the search function applied.\r\n */\r\n searchIgnore?: boolean\r\n\r\n /**\r\n * If provided, will group items with the same `groupName`\r\n * under one header.\r\n */\r\n groupName?: string\r\n\r\n /** Any additional optional parameters */\r\n [key: string]: any\r\n}\r\n\r\nexport interface TheSeamQuillMentionMenuDivider {\r\n type: 'divider'\r\n disabled?: boolean\r\n}\r\n\r\nexport interface TheSeamQuillMentionMenuHeader {\r\n value: string\r\n type: 'groupName'\r\n disabled?: boolean\r\n}\r\n\r\nexport type TheSeamQuillMentionMenuItem = TheSeamQuillMentionMenuOption | TheSeamQuillMentionMenuDivider | TheSeamQuillMentionMenuHeader\r\n\r\nexport type TheSeamQuillMentionSearchFn = (\r\n source: TheSeamQuillMentionMenuItem[],\r\n textAfter: string,\r\n mentionChar: string\r\n) => TheSeamQuillMentionMenuItem[]\r\n\r\nexport type TheSeamQuillMentionSourceFn = (\r\n source: TheSeamQuillMentionMenuItem[],\r\n searchFn: TheSeamQuillMentionSearchFn,\r\n emptyListItem: TheSeamQuillMentionMenuItem | undefined,\r\n textAfter: string,\r\n renderList: (\r\n matches: {\r\n id: string\r\n value: string\r\n [key: string]: string | undefined\r\n }[],\r\n searchTerm: string\r\n ) => void,\r\n mentionChar: string\r\n) => void\r\n\r\n/**\r\n * Typed version of Options object, copied from quill-mention@v6.0.1 (typescript version)\r\n */\r\nexport interface TheSeamQuillMentionOptions {\r\n /**\r\n * Specifies which characters will cause the mention autocomplete to open\r\n * @default ['@']\r\n */\r\n mentionDenotationChars?: string[]\r\n\r\n /**\r\n * Whether to show the used denotation character in the mention item or not\r\n * @default true\r\n */\r\n showDenotationChar?: boolean\r\n\r\n /**\r\n * Allowed characters in search term triggering a search request using regular expressions. Can be a function that takes the denotationChar and returns a regex.\r\n * @default /^[a-zA-Z0-9_]*$/\r\n */\r\n allowedChars?: RegExp | ((char: string) => RegExp)\r\n\r\n /**\r\n * Minimum number of characters after the @ symbol triggering a search request\r\n * @default 0\r\n */\r\n minChars?: number\r\n\r\n /**\r\n * Maximum number of characters after the @ symbol triggering a search request\r\n * @default 31\r\n */\r\n maxChars?: number\r\n\r\n /**\r\n * Additional top offset of the mention container position\r\n * @default 2\r\n */\r\n offsetTop?: number\r\n\r\n /**\r\n * Additional left offset of the mention container position\r\n * @default 0\r\n */\r\n offsetLeft?: number\r\n\r\n /**\r\n * Whether or not the denotation character(s) should be isolated. For example, to avoid mentioning in an email.\r\n * @default false\r\n */\r\n isolateCharacter?: boolean\r\n\r\n /**\r\n * Only works if isolateCharacter is set to true. Whether or not the denotation character(s) can appear inline of the mention text. For example, to allow mentioning an email with the @ symbol as the denotation character.\r\n * @default false\r\n */\r\n allowInlineMentionChar?: boolean\r\n\r\n /**\r\n * When set to true, the mentions menu will be rendered above or below the quill container. Otherwise, the mentions menu will track the denotation character(s);\r\n * @default false\r\n */\r\n fixMentionsToQuill?: boolean\r\n\r\n /**\r\n * Options are 'normal' and 'fixed'. When 'fixed', the menu will be appended to the body and use fixed positioning. Use this if the menu is clipped by a parent element that's using `overflow:hidden\r\n * @default 'normal'\r\n */\r\n positioningStrategy?: 'normal' | 'fixed'\r\n\r\n /**\r\n * Options are 'bottom' and 'top'. Determines what the default orientation of the menu will be. Quill-mention will attempt to render the menu either above or below the editor. If 'top' is provided as a value, and there is not enough space above the editor, the menu will be rendered below. Vice versa, if there is not enough space below the editor, and 'bottom' is provided as a value (or no value is provided at all), the menu will be rendered above the editor.\r\n * @default 'bottom'\r\n */\r\n defaultMenuOrientation?: 'top' | 'bottom'\r\n\r\n /**\r\n * The name of the Quill Blot to be used for inserted mentions. A default implementation is provided named 'mention', which may be overridden with a custom blot.\r\n * @default 'mention'\r\n */\r\n blotName?: string\r\n\r\n /**\r\n * A list of data values you wish to be passed from your list data to the html node. (id, value, denotationChar, link, target are included by default).\r\n * @default ['id', 'value', 'denotationChar', 'link', 'target', 'disabled']\r\n */\r\n dataAttributes?: string[]\r\n\r\n /**\r\n * Link target for mentions with a link\r\n * @default '_blank'\r\n */\r\n linkTarget?: string\r\n\r\n /**\r\n * Style class to be used for list items (may be null)\r\n * @default 'ql-mention-list-item'\r\n */\r\n listItemClass?: string\r\n\r\n /**\r\n * Style class to be used for the mention list container (may be null)\r\n * @default 'ql-mention-list-container'\r\n */\r\n mentionContainerClass?: string\r\n\r\n /**\r\n * Style class to be used for the mention list (may be null)\r\n * @default 'ql-mention-list'\r\n */\r\n mentionListClass?: string\r\n\r\n /**\r\n * Whether or not insert 1 space after mention block in text\r\n * @default true\r\n */\r\n spaceAfterInsert?: boolean\r\n\r\n /**\r\n * An array of keyboard key codes that will trigger the select action for the mention dropdown. Default is ENTER key. See this reference for a list of numbers for each keyboard key.\r\n * @default [13]\r\n */\r\n selectKeys?: (string | number | string)[]\r\n\r\n /**\r\n * Required callback function to handle the search term and connect it to a data source for matches. The data source can be a local source or an AJAX request.\r\n * The callback should call renderList(matches, searchTerm); with matches of JSON Objects in an array to show the result for the user. The JSON Objects should have id and value but can also have other values to be used in renderItem for custom display.\r\n * @param textAfter\r\n * @param render\r\n * @param mentionChar\r\n * @returns\r\n */\r\n source: (\r\n textAfter: string,\r\n renderList: (\r\n matches: {\r\n id: string\r\n value: string\r\n [key: string]: string | undefined\r\n }[],\r\n searchTerm: string\r\n ) => void,\r\n mentionChar: string\r\n ) => void\r\n\r\n /**\r\n * Callback when mention dropdown is open.\r\n * @returns\r\n */\r\n onOpen?: () => boolean\r\n\r\n /**\r\n * Callback before the DOM of mention dropdown is removed.\r\n * @returns\r\n */\r\n onBeforeClose?: () => boolean\r\n\r\n /**\r\n * Callback when mention dropdown is closed.\r\n * @returns\r\n */\r\n onClose?: () => boolean\r\n\r\n /**\r\n * A function that gives you control over how matches from source are displayed. You can use this function to highlight the search term or change the design with custom HTML. This function will need to return either a string possibly containing unsanitized user content, or a class implementing the Node interface which will be treated as a sanitized DOM node.\r\n * @param item\r\n * @param searchTerm\r\n * @returns\r\n */\r\n renderItem?: (\r\n item: { id: string; value: string; [key: string]: unknown },\r\n searchTerm: string\r\n ) => string | HTMLElement\r\n\r\n /**\r\n * A function that returns the HTML for a loading message during async calls from source. The function will need to return either a string possibly containing unsanitized user content, or a class implementing the Node interface which will be treated as a sanitized DOM node. The default functions returns null to prevent a loading message.\r\n * @returns\r\n */\r\n renderLoading?: () => string | HTMLElement | null\r\n\r\n /**\r\n * Callback for a selected item. When overriding this method, insertItem should be used to insert item to the editor. This makes async requests possible.\r\n * @param item\r\n * @param insertItem\r\n */\r\n onSelect?: (\r\n item: DOMStringMap,\r\n insertItem: (\r\n data: Record<string, unknown>,\r\n programmaticInsert?: boolean,\r\n overriddenOptions?: object\r\n ) => void\r\n ) => void\r\n}\r\n\r\nexport interface TheSeamQuillModules extends QuillModules {\r\n mention?: Partial<TheSeamQuillMentionOptions>\r\n}\r\n\r\nexport const THESEAM_QUILL_FORMATS = [\r\n 'align',\r\n 'background',\r\n 'blockquote',\r\n 'bold',\r\n 'code-block',\r\n 'code',\r\n 'color',\r\n 'direction',\r\n 'font',\r\n 'header',\r\n 'image',\r\n 'indent',\r\n 'italic',\r\n 'link',\r\n 'list',\r\n 'script',\r\n 'size',\r\n 'strike',\r\n 'underline',\r\n 'video',\r\n 'mention'\r\n] as const\r\n\r\nexport type TheSeamQuillStyleFormat = (typeof THESEAM_QUILL_FORMATS)[number]\r\n\r\nexport type TheSeamQuillInputFormat = 'object' | 'html' | 'text' | 'json'\r\n\r\nexport interface TheSeamQuillEditorConfig {\r\n /**\r\n * The format of the text inside the editor.\r\n *\r\n * @default 'html'\r\n */\r\n format: TheSeamQuillInputFormat\r\n\r\n /** @default 'snow' */\r\n theme?: string\r\n\r\n /**\r\n * Used to set custom config for built-in and add-on modules.\r\n *\r\n * See `SEAM_QUILL_MODULES_DEFAULT` for default value.\r\n */\r\n modules?: TheSeamQuillModules\r\n\r\n /**\r\n * Console level for debug messages.\r\n *\r\n * @default `warn`\r\n */\r\n debug?: 'warn' | 'log' | 'error' | false\r\n\r\n /**\r\n * List of formats allowed in editor.\r\n *\r\n * See `SEAM_QUILL_FORMATS_DEFAULT` for default value.\r\n *\r\n * NOTE: Adding or removing a value will enable/disable that format\r\n * in the editor, but has no effect on the toolbar buttons.\r\n * To modify the toolbar display, update `modules.toolbar`.\r\n */\r\n formats?: TheSeamQuillStyleFormat[] | null\r\n\r\n /** @default 'top' */\r\n customToolbarPosition: 'top' | 'bottom'\r\n\r\n /**\r\n * When `true`, runs the control value through Angular's DOM sanitizer\r\n * before setting the value.\r\n *\r\n * @default false\r\n */\r\n sanitize: boolean\r\n\r\n /** Custom css styles to add to the `.ql-container` element. */\r\n styles?: { [key: string]: string } | null\r\n\r\n /**\r\n * When `false`, user interactions in the toolbar will emit even\r\n * if the editor is marked as `readOnly`. This allows the user to\r\n * make some formatting changes (e.g. creating a list) to a value\r\n * that should be disabled.\r\n *\r\n * @default true.\r\n */\r\n strict: boolean\r\n\r\n /**\r\n * An element or selector that specifies the scrolling element of the editor.\r\n *\r\n * Default scrollingContainer is the `.ql-editor` element.\r\n */\r\n scrollingContainer?: HTMLElement | string | null\r\n\r\n /**\r\n * An element or selector that specifies the confining element of the editor.\r\n *\r\n * Default boundary container is the document's `body` element.\r\n */\r\n bounds?: HTMLElement | string\r\n\r\n /**\r\n * Defines custom formats for the editor. Can be used to overwrite existing options.\r\n *\r\n * TODO: Research this more.\r\n */\r\n customOptions: CustomOption[]\r\n\r\n /**\r\n * Defines custom modules for the editor. Can be used to overwrite existing modules.\r\n *\r\n * TODO: Research this more.\r\n */\r\n customModules: CustomModule[]\r\n\r\n /**\r\n * When `user`, only change events from the user will trigger a model change.\r\n * This is the default behavior, and is preferred.\r\n *\r\n * Changing to `all` is not recommended.\r\n */\r\n trackChanges?: 'user' | 'all'\r\n\r\n /**\r\n * When `true`, preserves duplicated whitespaces.\r\n *\r\n * @default false\r\n */\r\n preserveWhitespace: boolean\r\n\r\n /** Custom classes to add to the `.ql-container` element. */\r\n classes?: string\r\n\r\n /**\r\n * When `true`, trims leading/trailing newlines when validation is run.\r\n *\r\n * @default false\r\n */\r\n trimOnValidation: boolean\r\n\r\n /**\r\n * Sets a placeholder for the link input in the hyperlink form.\r\n *\r\n * @default 'https://quilljs.com'\r\n */\r\n linkPlaceholder?: string\r\n\r\n /**\r\n * When `true`, does a basic compare (using JSON.stringify) between the old\r\n * and new value on `writeValue()`. If the values are the same, it skips the update.\r\n *\r\n * @default false\r\n */\r\n compareValues: boolean\r\n\r\n /**\r\n * When `true`, skips the update for null values on `writeValue()`.\r\n *\r\n * @default false\r\n */\r\n filterNull: boolean\r\n\r\n /**\r\n * Debounces `onContentChanged()`, `onEditorChanged()`, `ngModel` and form control `valueChange()`.\r\n *\r\n * Defaults to `undefined`, so changes always emit immediately.\r\n *\r\n * @default undefined\r\n */\r\n debounceTime?: number\r\n\r\n /**\r\n * @deprecated The `ngx-quill` library doesn't accurately handle undefined\r\n * inputs, and the default `valueGetter` function is impossible to reference here,\r\n * so this config option is not used.\r\n *\r\n * Defines custom logic for reading the html value of the editor.\r\n */\r\n valueGetter?: (\r\n quillEditor: QuillType,\r\n editorElement: HTMLElement\r\n ) => string | any\r\n\r\n /**\r\n * @deprecated The `ngx-quill` library doesn't accurately handle undefined\r\n * inputs, and the default `valueSetter` function is impossible to reference here,\r\n * so this config option is not used.\r\n *\r\n * Defines custom logic for setting the html value of the editor.\r\n */\r\n valueSetter?: (quillEditor: QuillType, value: any) => any\r\n}\r\n\r\nexport type TheSeamCharacterCounterFn = (\r\n value: string,\r\n format: TheSeamQuillInputFormat | undefined\r\n) => number\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { QuillModule } from 'ngx-quill';\nimport { RichTextComponent } from './rich-text/rich-text.component';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@NgModule({\n declarations: [\n RichTextComponent,\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n QuillModule\n ],\n exports: [\n RichTextComponent,\n ]\n})\nexport class TheSeamRichTextModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theseam-ui-common-rich-text.mjs","sources":["../../../projects/ui-common/rich-text/utils/utils.ts","../../../projects/ui-common/rich-text/rich-text/rich-text.component.ts","../../../projects/ui-common/rich-text/rich-text/rich-text.component.html","../../../projects/ui-common/rich-text/utils/models.ts","../../../projects/ui-common/rich-text/rich-text.module.ts","../../../projects/ui-common/rich-text/theseam-ui-common-rich-text.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\"\nimport { QuillToolbarConfig } from \"ngx-quill\"\nimport { TheSeamQuillModules, TheSeamQuillStyleFormat, TheSeamQuillEditorConfig, TheSeamQuillMentionMenuOption, TheSeamQuillInputFormat, TheSeamQuillMentionOptions, TheSeamQuillMentionSourceFn, TheSeamQuillMentionSearchFn, TheSeamCharacterCounterFn, TheSeamQuillMentionMenuItem } from \"./models\"\nimport { isNullOrUndefined, notNullOrUndefined, notNullOrUndefinedOrEmpty } from \"@theseam/ui-common/utils\"\n\nexport const HTML_ENTITY_REGEX = /<[^>]+>/gm\n\nexport const THESEAM_QUILL_TOOLBAR_OPTIONS_DEFAULT: QuillToolbarConfig = [\n ['bold', 'italic', 'underline', 'strike'],\n [{ header: [0, 1, 2, 3, 4, 5] }],\n [{ list: 'ordered' }, { list: 'bullet' }],\n [{ align: [] }],\n ['link'],\n ['clean'],\n]\n\nexport const THESEAM_QUILL_MENTION_OPTIONS_DEFAULT: Partial<TheSeamQuillMentionOptions> = {\n spaceAfterInsert: false,\n positioningStrategy: 'fixed',\n dataAttributes: [ 'type' ]\n}\n\nexport const THESEAM_QUILL_MODULES_DEFAULT: TheSeamQuillModules = {\n toolbar: THESEAM_QUILL_TOOLBAR_OPTIONS_DEFAULT\n}\n\nexport const THESEAM_QUILL_FORMATS_DEFAULT: TheSeamQuillStyleFormat[] = [\n 'align',\n 'bold',\n 'header',\n 'indent',\n 'italic',\n 'link',\n 'list',\n 'size',\n 'strike',\n 'underline',\n 'mention'\n]\n\nexport const THESEAM_QUILL_EDITOR_CONFIG_DEFAULT: TheSeamQuillEditorConfig = {\n format: 'html',\n modules: THESEAM_QUILL_MODULES_DEFAULT,\n formats: THESEAM_QUILL_FORMATS_DEFAULT,\n linkPlaceholder: 'https://google.com',\n customToolbarPosition: 'top',\n sanitize: false,\n strict: true,\n customOptions: [],\n customModules: [],\n preserveWhitespace: false,\n trimOnValidation: false,\n compareValues: false,\n filterNull: false\n}\n\nexport const THESEAM_QUILL_EDITOR_CONFIG = new InjectionToken<TheSeamQuillEditorConfig>('TheSeamQuillEditorConfig')\n\nexport const defaultHtmlCharacterCounterFn: TheSeamCharacterCounterFn = (value: string, format: TheSeamQuillInputFormat | undefined): number => {\n if (format === 'html') {\n return value.replace(HTML_ENTITY_REGEX, ' ').replace(/\\s\\s+/g, ' ').trim().length\n }\n else if (format === 'text') {\n return value.replace(/\\s\\s+/g, ' ').trim().length\n }\n else {\n console.warn(`Format ${format} not supported!`)\n return 0\n }\n}\n\nexport function isMentionMenuOption(value: TheSeamQuillMentionMenuItem | undefined): value is TheSeamQuillMentionMenuOption {\n if (isNullOrUndefined(value) || typeof value !== 'object') {\n return false\n }\n\n return Object.prototype.hasOwnProperty.call(value, 'id')\n}\n\nexport const defaultMentionSearchFn: TheSeamQuillMentionSearchFn = (source: TheSeamQuillMentionMenuItem[], textAfter: string, mentionChar: string) => {\n return source.filter(u => {\n if (!isMentionMenuOption(u) || u.searchIgnore === true) {\n return true\n }\n\n return u.value.toLowerCase().includes(textAfter.toLowerCase())\n })\n}\n\nexport const defaultMentionRenderListFn: TheSeamQuillMentionSourceFn = (source: TheSeamQuillMentionMenuItem[], searchFn: TheSeamQuillMentionSearchFn, emptyListItem: TheSeamQuillMentionMenuItem | undefined, textAfter: string, renderList: (list: any[], searchTerm: string) => any, mentionChar: string) => {\n let list = searchFn(source, textAfter, mentionChar)\n\n if (list.length === 0 && notNullOrUndefined(emptyListItem)) {\n list.push(emptyListItem)\n }\n else {\n let reduceIdx = 0\n list = list.reduce((acc, mention) => {\n const previousMenuItem = acc[reduceIdx - 1]\n const previousMenuItemGroupName = isMentionMenuOption(previousMenuItem) ? previousMenuItem.groupName : undefined\n if (isMentionMenuOption(mention)\n && notNullOrUndefinedOrEmpty(mention.groupName)\n && mention.groupName !== previousMenuItemGroupName\n ) {\n acc.push({\n value: mention.groupName,\n disabled: true,\n type: 'groupName'\n })\n\n reduceIdx++\n }\n\n if (!isMentionMenuOption(mention)) {\n mention.disabled = true\n }\n\n acc.push(mention)\n reduceIdx++\n\n return acc\n }, <TheSeamQuillMentionMenuItem[]>[] satisfies TheSeamQuillMentionMenuItem[])\n }\n\n renderList(list, textAfter)\n}\n\n// Keeping this as an example for a custom menu item.\n// There doesn't appear to be a better way of passing in a custom template.\n// export const defaultMentionRenderItem = (item: TheSeamQuillMentionListItem) => {\n // if (item.type === 'groupName') {\n // const text = document.createElement('div')\n // text.setAttribute('class', 'small text-black-50')\n // text.innerText = item.value\n\n // return text.outerHTML\n // }\n // else if (item.type === 'divider') {\n // const div = document.createElement('hr')\n // div.setAttribute('class', 'my-2')\n // return div.outerHTML\n // }\n // else {\n // return item.value\n // }\n// }\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { AfterViewInit, Component, EventEmitter, HostListener, Inject, Input, OnDestroy, OnInit, Optional, Output, Provider, Renderer2, TemplateRef, ViewChild, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { Blur, ContentChange, EditorChangeContent, EditorChangeSelection, Focus, QuillEditorComponent, SelectionChange } from 'ngx-quill';\nimport { Delta } from 'quill';\nimport 'quill-mention';\nimport { BehaviorSubject, Observable, Subject, combineLatest, filter, lastValueFrom, map, of, shareReplay, startWith, switchMap, take, tap } from 'rxjs';\n\nimport { isNullOrUndefined, notNullOrUndefined } from '@theseam/ui-common/utils';\nimport { TheSeamCharacterCounterFn, TheSeamQuillEditorConfig, TheSeamQuillMentionMenuItem, TheSeamQuillMentionMenuOption, TheSeamQuillMentionSearchFn, TheSeamQuillMentionSourceFn, TheSeamQuillModules } from '../utils/models';\nimport { THESEAM_QUILL_EDITOR_CONFIG, THESEAM_QUILL_EDITOR_CONFIG_DEFAULT, THESEAM_QUILL_MENTION_OPTIONS_DEFAULT, defaultHtmlCharacterCounterFn, defaultMentionRenderListFn, defaultMentionSearchFn, isMentionMenuOption } from '../utils/utils';\n\nexport const RICH_TEXT_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RichTextComponent),\n multi: true\n}\n\n@Component({\n selector: 'seam-rich-text',\n templateUrl: './rich-text.component.html',\n styleUrls: ['./rich-text.component.scss'],\n providers: [\n RICH_TEXT_VALUE_ACCESSOR\n ]\n})\nexport class RichTextComponent implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor {\n\n onChange: any\n onTouched: any\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('value') val: string | undefined\n\n formControl = new FormControl<string | null>(null)\n\n @Input()\n get required(): boolean {\n return this._required\n }\n set required(value: boolean | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._required = coerceBooleanProperty(value)\n }\n }\n private _required = false\n\n /** @default '' (empty string) */\n @Input()\n get placeholder(): string {\n return this._placeholder\n }\n set placeholder(value: string | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._placeholder = value\n }\n }\n private _placeholder = ''\n\n /**\n * Initial rows visible in text area, set using `height` and `minHeight`.\n *\n * NOTE: Resizable editors will not be able to size below the height calculated from this value.\n *\n * @default 5\n */\n @Input()\n get rows(): number {\n return this._rows\n }\n set rows(value: number | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._rows = value\n\n this._pollCalculatedRowHeight.next()\n }\n }\n private _rows = 5\n\n /**\n * When `true`, text area can be resized vertically.\n *\n * @default true\n */\n @Input()\n get resizable(): boolean {\n return this._resizable\n }\n set resizable(value: boolean | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._resizable = coerceBooleanProperty(value)\n }\n }\n private _resizable = true\n\n /** @default false */\n get readOnly(): boolean {\n return this._readOnly\n }\n set readOnly(value: boolean | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._readOnly = coerceBooleanProperty(value)\n }\n }\n private _readOnly = false\n\n // TODO: fix bug where initial html value is rendered in plain text\n /**\n * When `true`, overrides all other provided settings to present the editor\n * as a standard textbox.\n *\n * NOTE: For the moment, `<p></p>` tags are still allowed, triggered by the `Enter` key.\n * https://github.com/slab/quill/issues/1432\n *\n * @default false\n */\n @Input()\n get disableRichText(): boolean {\n return this._disableRichText\n }\n set disableRichText(value: boolean | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._disableRichText = coerceBooleanProperty(value)\n\n this._updateQuillConfig()\n }\n }\n private _disableRichText = false\n\n /**\n * When `true`, displays a character counter at the bottom of the editor.\n * Character counter text is determined by values provided in `minLength`\n * and `maxLength`.\n *\n * The default count algorithm strips out html entities and replaces them\n * with spaces to get the string length. To override this behavior, pass\n * a custom function to `characterCounterFn`.\n *\n * To override default character counter display, pass a custom template to `characterCountTpl`.\n *\n * @default false\n */\n @Input()\n get displayCharacterCounter(): boolean {\n return this._displayCharacterCounter\n }\n set displayCharacterCounter(value: boolean | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._displayCharacterCounter = coerceBooleanProperty(value)\n }\n }\n private _displayCharacterCounter = false\n\n @Input()\n get minLength(): number | undefined {\n return this._minLength\n }\n set minLength(value: number | undefined) {\n if (notNullOrUndefined(value)) {\n this._minLength = value\n }\n }\n private _minLength: number | undefined\n\n @Input()\n get maxLength(): number | undefined {\n return this._maxLength\n }\n set maxLength(value: number | undefined) {\n if (notNullOrUndefined(value)) {\n this._maxLength = value\n }\n }\n private _maxLength: number | undefined\n\n /**\n * Set to override default character counter display.\n *\n * Template context includes variables `minLength`, `maxLength`, and `characterCount`.\n */\n @Input()\n get characterCounterTpl(): TemplateRef<any> | null {\n return this._characterCounterTpl\n }\n set characterCounterTpl(value) {\n if (notNullOrUndefined(value)) {\n this._characterCounterTpl = value\n }\n }\n private _characterCounterTpl: TemplateRef<any> | null = null\n\n /**\n * Set to override default counter function, which strips html entities and\n * replaces them with a space.\n */\n @Input() get characterCounterFn(): TheSeamCharacterCounterFn {\n return this._characterCounterFn\n }\n set characterCounterFn(value: TheSeamCharacterCounterFn | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._characterCounterFn = value\n }\n }\n private _characterCounterFn = defaultHtmlCharacterCounterFn\n\n /**\n * If `true`, component will configure the Quill editor with the quill-mentions extension\n * and listen for values passed to `mentionItems` to populate the mentions menu.\n *\n * @default false\n */\n @Input()\n get useMentions(): boolean {\n return this._useMentions\n }\n set useMentions(value: boolean | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._useMentions = coerceBooleanProperty(value)\n\n this._updateQuillConfig()\n }\n }\n private _useMentions: boolean = false\n\n /**\n * List of users, user groups, or other entities to display in mentions menu.\n * Minimum required properties are `id` (unique) and `value`, which acts as the label.\n *\n * By default, the menu is triggered by typing the `@` symbol into the text area.\n */\n @Input()\n get mentionItems(): TheSeamQuillMentionMenuItem[] | null | undefined {\n return this._mentionItems.value\n }\n set mentionItems(value: TheSeamQuillMentionMenuItem[] | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._mentionItems.next(value)\n }\n }\n private _mentionItems = new BehaviorSubject<TheSeamQuillMentionMenuItem[] | null | undefined>(undefined)\n public mentionItems$ = this._mentionItems.asObservable().pipe(\n filter(mentions => notNullOrUndefined(mentions) && mentions.length > 0),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n\n /**\n * Set to override default search function when user is typing a mention.\n */\n @Input()\n get mentionSearchFn(): TheSeamQuillMentionSearchFn {\n return this._mentionSearchFn\n }\n set mentionSearchFn(value: TheSeamQuillMentionSearchFn | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._mentionSearchFn = value\n }\n }\n private _mentionSearchFn: TheSeamQuillMentionSearchFn = defaultMentionSearchFn\n\n /**\n * Set to override default render function for mentions list.\n *\n * Function should call `renderList`.\n */\n @Input()\n get mentionRenderListFn(): TheSeamQuillMentionSourceFn {\n return this._mentionRenderListFn\n }\n set mentionRenderListFn(value: TheSeamQuillMentionSourceFn | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._mentionRenderListFn = value\n }\n }\n private _mentionRenderListFn: TheSeamQuillMentionSourceFn = defaultMentionRenderListFn\n\n /**\n * Set to override default text shown while mention items are loading.\n *\n * @default 'Loading...'\n */\n @Input()\n get mentionListLoadingText(): string {\n return this._mentionListLoadingText\n }\n set mentionListLoadingText(value: string | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._mentionListLoadingText = value\n }\n }\n private _mentionListLoadingText: string = 'Loading...'\n\n /**\n * Set to override default text shown when a mention search returns no items.\n *\n * @default 'No matches found.'\n */\n @Input()\n get mentionListEmptyText(): string {\n return this._mentionListEmptyText\n }\n set mentionListEmptyText(value: string | null | undefined) {\n if (notNullOrUndefined(value)) {\n this._mentionListEmptyText = value\n }\n }\n private _mentionListEmptyText: string = 'No matches found.'\n\n get mentionListEmptyItem(): TheSeamQuillMentionMenuOption {\n return {\n id: 'undefined',\n value: this.mentionListEmptyText,\n disabled: true,\n emptyList: true\n }\n }\n\n @Output() quillEditorCreated: EventEmitter<any> = new EventEmitter()\n @Output() quillEditorChanged: EventEmitter<EditorChangeContent | EditorChangeSelection> = new EventEmitter()\n @Output() quillContentChanged: EventEmitter<ContentChange> = new EventEmitter()\n @Output() quillSelectionChanged: EventEmitter<SelectionChange> = new EventEmitter()\n @Output() quillFocus: EventEmitter<Focus> = new EventEmitter()\n @Output() quillBlur: EventEmitter<Blur> = new EventEmitter()\n\n @Output() mentionsUpdated: EventEmitter<TheSeamQuillMentionMenuOption[]> = new EventEmitter()\n\n @ViewChild('quillEditor')\n get quillEditor(): QuillEditorComponent | undefined {\n return this._quillEditor\n }\n set quillEditor(value: QuillEditorComponent | undefined) {\n this._quillEditor = value\n\n // setTimeout because full html isn't available until the next tick\n setTimeout(() => {\n this._pollCalculatedRowHeight.next()\n }, 0)\n }\n private _quillEditor: QuillEditorComponent | undefined\n\n @ViewChild('characterCounter') defaultCharacterCounterTpl: TemplateRef<any> | undefined\n\n @HostListener('keydown', ['$event'])\n _handleKeydown(event: KeyboardEvent) {\n if (event.code === 'Escape') {\n const qlEditor = this._quillEditor?.editorElem?.querySelector('.ql-editor')\n if (notNullOrUndefined(qlEditor) && qlEditor === document.activeElement && qlEditor instanceof HTMLElement) {\n event.preventDefault()\n event.stopImmediatePropagation()\n qlEditor.blur()\n }\n }\n }\n\n private _isWritingValue = false\n\n private _pollCalculatedRowHeight = new Subject<void>()\n\n private _configSet = new BehaviorSubject<boolean>(false)\n public configSet$ = this._configSet.asObservable()\n\n private _stylesSet = new BehaviorSubject<boolean>(false)\n private _templateSet = new BehaviorSubject<boolean>(false)\n\n public initialized$: Observable<boolean>\n\n public characterCount$: Observable<number>\n\n private _config = new BehaviorSubject<TheSeamQuillEditorConfig | undefined>(undefined)\n public config$ = this._config.asObservable()\n\n private _selectedMentions = new BehaviorSubject<TheSeamQuillMentionMenuOption[]>([])\n public selectedMentions$ = this._selectedMentions.asObservable()\n\n constructor(\n private readonly _renderer: Renderer2,\n @Optional() @Inject(THESEAM_QUILL_EDITOR_CONFIG) private _customConfig?: TheSeamQuillEditorConfig\n ) {\n this.initialized$ = combineLatest([\n this._configSet.asObservable(),\n this._stylesSet.asObservable(),\n this._templateSet.asObservable(),\n ]).pipe(\n map(sets => sets.findIndex(s => !s) === -1)\n )\n\n this.characterCount$ = this.initialized$.pipe(\n filter(i => i),\n switchMap(() => {\n if (notNullOrUndefined(this.formControl)) {\n return this.formControl.valueChanges.pipe(\n startWith(this.formControl.value),\n map(v => this.characterCounterFn(v || '' as string, this._config.value?.format)),\n )\n }\n\n return of(0)\n })\n )\n\n this.selectedMentions$.pipe(\n tap(mentions => this.mentionsUpdated.emit(mentions))\n ).subscribe()\n }\n\n ngOnInit(): void {\n // TODO: test this more\n // ignore quill initial valueChange event, to keep functionality in line with other inputs\n let initialEmitComplete = false\n this._configSet.pipe(\n filter(s => s),\n switchMap(() => this.formControl.valueChanges.pipe(\n // skip(1),\n take(1),\n tap(() => initialEmitComplete = true)\n ))\n ).subscribe()\n\n this.formControl.valueChanges.pipe(\n filter(() => !this._isWritingValue && initialEmitComplete),\n tap(value => this.value = value)\n ).subscribe()\n\n this._pollCalculatedRowHeight.asObservable().pipe(\n tap(() => {\n this._stylesSet.next(false)\n\n const calculatedRowsHeight = `${this.rows * 1.5}rem`\n\n if (notNullOrUndefined(this.rows) && notNullOrUndefined(this._quillEditor)) {\n const editorEl = this._quillEditor.elementRef.nativeElement.querySelector('.ql-editor')\n\n if (notNullOrUndefined(editorEl)) {\n this._renderer.setStyle(editorEl, 'height', calculatedRowsHeight)\n this._renderer.setStyle(editorEl, 'min-height', calculatedRowsHeight)\n }\n }\n\n this._stylesSet.next(true)\n })\n ).subscribe()\n\n this._buildQuillConfig()\n }\n\n ngAfterViewInit(): void {\n if (isNullOrUndefined(this.characterCounterTpl)) {\n this.characterCounterTpl = this.defaultCharacterCounterTpl || null\n }\n\n this._templateSet.next(true)\n }\n\n ngOnDestroy(): void {\n // hacky way to ensure mentions menu gets destroyed when component is destroyed\n const mentionModule = this._quillEditor?.quillEditor.getModule('mention')\n const hideMentionList = mentionModule?.hideMentionList\n if (hideMentionList && typeof hideMentionList === 'function') {\n hideMentionList.call(mentionModule)\n }\n }\n\n private _buildQuillConfig() {\n this._configSet.next(false)\n\n const config: TheSeamQuillEditorConfig = {\n ...THESEAM_QUILL_EDITOR_CONFIG_DEFAULT\n }\n\n if (this.disableRichText) {\n config.format = 'text'\n config.formats = []\n config.modules = {\n toolbar: false\n }\n }\n else {\n config.format = this._getConfigOrDefault('format')\n config.formats = this._getConfigOrDefault('formats')\n config.modules = {\n ...this._getConfigOrDefault('modules')\n }\n }\n\n if (this.useMentions) {\n const mentionModules: TheSeamQuillModules = {\n ...config.modules,\n mention: {\n ...THESEAM_QUILL_MENTION_OPTIONS_DEFAULT,\n renderLoading: () => this.mentionListLoadingText,\n source: async (searchTerm: string, renderList: (list: any[], searchTerm: string) => void, mentionChar: string) => {\n // this function is called every time the menu is triggered,\n // so it will always have the latest value from mentionItems$\n const mentionsAsync = await lastValueFrom(this.mentionItems$.pipe(take(1)))\n\n if (notNullOrUndefined(mentionsAsync)) {\n this.mentionRenderListFn(mentionsAsync, this.mentionSearchFn, this.mentionListEmptyItem, searchTerm, renderList, mentionChar)\n }\n },\n ...config.modules?.mention,\n }\n }\n\n config.modules = mentionModules\n }\n\n config.theme = this._getConfigOrDefault('theme')\n config.debug = this._getConfigOrDefault('debug')\n config.customToolbarPosition = this._getConfigOrDefault('customToolbarPosition')\n config.sanitize = this._getConfigOrDefault('sanitize')\n config.styles = this._getConfigOrDefault('styles')\n config.strict = this._getConfigOrDefault('strict')\n config.scrollingContainer = this._getConfigOrDefault('scrollingContainer')\n config.bounds = this._getConfigOrDefault('bounds')\n config.customOptions = this._getConfigOrDefault('customOptions')\n config.customModules = this._getConfigOrDefault('customModules')\n config.trackChanges = this._getConfigOrDefault('trackChanges')\n config.preserveWhitespace = this._getConfigOrDefault('preserveWhitespace')\n config.classes = this._getConfigOrDefault('classes')\n config.trimOnValidation = this._getConfigOrDefault('trimOnValidation')\n config.linkPlaceholder = this._getConfigOrDefault('linkPlaceholder')\n config.compareValues = this._getConfigOrDefault('compareValues')\n config.filterNull = this._getConfigOrDefault('filterNull')\n config.debounceTime = this._getConfigOrDefault('debounceTime')\n\n this._config.next(config)\n\n // setTimeout bc ngx-quill library doesn't listen for input changes,\n // so we must destroy and create the component each time config is updated\n setTimeout(() => {\n this._configSet.next(true)\n }, 0)\n }\n\n private _getConfigOrDefault<K extends keyof TheSeamQuillEditorConfig>(prop: K): TheSeamQuillEditorConfig[K] {\n if (this._customConfig && Object.prototype.hasOwnProperty.call(this._customConfig, prop)) {\n return this._customConfig[prop]\n }\n return THESEAM_QUILL_EDITOR_CONFIG_DEFAULT[prop]\n }\n\n private _updateQuillConfig() {\n if (this._configSet.value) {\n this._buildQuillConfig()\n }\n }\n\n // Not usable, bc config has to be set immediately, potentially before mentions populate.\n // To set customDataAttributes, provide a custom config.\n // private _getCustomDataAttributes(mentions: TheSeamQuillMentionMenuOption[]): string[] {\n // return mentions.reduce((acc, mention) => {\n // const keys = Object.keys(mention)\n\n // keys.forEach(key => {\n // if (acc.findIndex(a => a === key) === -1) {\n // acc.push(key)\n // }\n // })\n\n // return acc\n // }, <string[]>[] satisfies string[])\n // }\n\n get value(): string | undefined | null {\n return this._value\n }\n set value(value: string | undefined | null) {\n this._value = value\n\n if (this.onChange) { this.onChange(value) }\n if (this.onTouched) { this.onTouched() }\n }\n private _value: string | undefined | null\n\n writeValue(value: any): void {\n this._isWritingValue = true\n\n this.formControl.setValue(value)\n this.value = value\n\n this._isWritingValue = false\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.readOnly = isDisabled\n }\n\n _onEditorCreated(event: any) {\n this.quillEditorCreated.emit(event)\n }\n\n _onEditorChanged(event: EditorChangeContent | EditorChangeSelection) {\n this.quillEditorChanged.emit(event)\n }\n\n _onContentChanged(event: ContentChange) {\n this.quillContentChanged.emit(event)\n\n this._updateMentionsFromDelta(event.content)\n }\n\n _onSelectionChanged(event: SelectionChange) {\n this.quillSelectionChanged.emit(event)\n }\n\n _onFocus(event: Focus) {\n this.quillFocus.emit(event)\n }\n\n _onBlur(event: Blur) {\n this.quillBlur.emit(event)\n\n if (this.onTouched) {\n this.onTouched()\n }\n }\n\n /**\n * Hacky way to track mention inserts/deletes\n */\n private _updateMentionsFromDelta(content: Delta) {\n if (notNullOrUndefined(content.ops)) {\n const contentMentionIds = content.ops.map(o => o.insert?.mention?.id).filter(notNullOrUndefined)\n const selectedMentions = [ ...this._selectedMentions.value ]\n const mentionOptions = [ ...this._mentionItems.value || [] ]\n\n const newMentions: TheSeamQuillMentionMenuOption[] = contentMentionIds.reduce((acc, mentionId) => {\n const insertMention = mentionOptions.find(m => isMentionMenuOption(m) && m.id === mentionId)\n\n if (notNullOrUndefined(insertMention)) {\n acc.push(insertMention)\n }\n else {\n console.warn('Mention addition failed! Selected mention option not found:', mentionId)\n }\n\n return acc\n }, <TheSeamQuillMentionMenuOption[]>[])\n\n let emitUpdate = false\n if (selectedMentions.length !== newMentions.length) {\n // if the length has changed, we know an update occurred\n emitUpdate = true\n }\n else {\n // otherwise, test ids for old and new items to see if we need to emit a change\n const selectedMentionIds = this._selectedMentions.value.map(m => m.id)\n const newMentionIds = newMentions.map(m => m.id)\n\n if (\n selectedMentionIds.findIndex(m => !newMentionIds.includes(m)) !== -1 ||\n newMentionIds.findIndex(m => !selectedMentionIds.includes(m)) !== -1\n ) {\n emitUpdate = true\n }\n }\n\n if (emitUpdate) {\n this._selectedMentions.next(newMentions)\n }\n }\n }\n}\n","<div class=\"editor\" *ngIf=\"configSet$ | async\" [class.initializing]=\"!(initialized$ | async)\">\n <ng-container *ngIf=\"config$ | async as config\">\n <quill-editor\n #quillEditor\n seamInput\n [class.disabled]=\"readOnly\"\n [attr.disabled]=\"readOnly\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [readOnly]=\"readOnly\"\n [required]=\"required\"\n [minLength]=\"minLength\"\n [maxLength]=\"maxLength\"\n [format]=\"config.format\"\n [theme]=\"config.theme\"\n [modules]=\"config.modules\"\n [debug]=\"config.debug\"\n [formats]=\"config.formats\"\n [customToolbarPosition]=\"config.customToolbarPosition\"\n [sanitize]=\"config.sanitize\"\n [styles]=\"config.styles\"\n [strict]=\"config.strict\"\n [scrollingContainer]=\"config.scrollingContainer\"\n [bounds]=\"config.bounds\"\n [customOptions]=\"config.customOptions\"\n [customModules]=\"config.customModules\"\n [trackChanges]=\"config.trackChanges\"\n [preserveWhitespace]=\"config.preserveWhitespace\"\n [classes]=\"config.classes\"\n [trimOnValidation]=\"config.trimOnValidation\"\n [linkPlaceholder]=\"config.linkPlaceholder\"\n [compareValues]=\"config.compareValues\"\n [filterNull]=\"config.filterNull\"\n [debounceTime]=\"config.debounceTime\"\n [class.can-resize]=\"resizable\"\n (onEditorCreated)=\"_onEditorCreated($event)\"\n (onEditorChanged)=\"_onEditorChanged($event)\"\n (onContentChanged)=\"_onContentChanged($event)\"\n (onSelectionChanged)=\"_onSelectionChanged($event)\"\n (onFocus)=\"_onFocus($event)\"\n (onBlur)=\"_onBlur($event)\"></quill-editor>\n <ng-container *ngIf=\"displayCharacterCounter\">\n <ng-container\n [ngTemplateOutlet]=\"characterCounterTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: characterCount$ | async, minLength: minLength, maxLength: maxLength, characterCount: characterCount$ | async }\"></ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #characterCounter let-implicit let-minLength=\"minLength\" let-maxLength=\"maxLength\" let-characterCount=\"characterCount\">\n <div class=\"small text-black-50 text-right\">\n <ng-container *ngIf=\"characterCount || characterCount === 0\">\n Character Count:\n <span [class.text-danger]=\"characterCount && ((maxLength && characterCount > maxLength) || (minLength && characterCount < minLength))\">\n {{ characterCount | number }}\n </span>\n <ng-container *ngIf=\"maxLength\">\n / {{ maxLength }}\n </ng-container>\n <span *ngIf=\"minLength\" class=\"font-italic\">\n (minimum {{ minLength }} expected)\n </span>\n </ng-container>\n </div>\n</ng-template>\n","import { CustomModule, CustomOption, QuillModules } from 'ngx-quill'\nimport QuillType from 'quill'\n\nexport interface TheSeamQuillMentionMenuOption {\n /** Must be unique. */\n id: string\n\n /**\n * The value is used as the label for the mentions,\n * both in the text area and in the menu.\n */\n value: string\n\n /**\n * When `true`, this item will be included in the menu,\n * regardless of the search function applied.\n */\n searchIgnore?: boolean\n\n /**\n * If provided, will group items with the same `groupName`\n * under one header.\n */\n groupName?: string\n\n /** Any additional optional parameters */\n [key: string]: any\n}\n\nexport interface TheSeamQuillMentionMenuDivider {\n type: 'divider'\n disabled?: boolean\n}\n\nexport interface TheSeamQuillMentionMenuHeader {\n value: string\n type: 'groupName'\n disabled?: boolean\n}\n\nexport type TheSeamQuillMentionMenuItem = TheSeamQuillMentionMenuOption | TheSeamQuillMentionMenuDivider | TheSeamQuillMentionMenuHeader\n\nexport type TheSeamQuillMentionSearchFn = (\n source: TheSeamQuillMentionMenuItem[],\n textAfter: string,\n mentionChar: string\n) => TheSeamQuillMentionMenuItem[]\n\nexport type TheSeamQuillMentionSourceFn = (\n source: TheSeamQuillMentionMenuItem[],\n searchFn: TheSeamQuillMentionSearchFn,\n emptyListItem: TheSeamQuillMentionMenuItem | undefined,\n textAfter: string,\n renderList: (\n matches: {\n id: string\n value: string\n [key: string]: string | undefined\n }[],\n searchTerm: string\n ) => void,\n mentionChar: string\n) => void\n\n/**\n * Typed version of Options object, copied from quill-mention@v6.0.1 (typescript version)\n */\nexport interface TheSeamQuillMentionOptions {\n /**\n * Specifies which characters will cause the mention autocomplete to open\n * @default ['@']\n */\n mentionDenotationChars?: string[]\n\n /**\n * Whether to show the used denotation character in the mention item or not\n * @default true\n */\n showDenotationChar?: boolean\n\n /**\n * Allowed characters in search term triggering a search request using regular expressions. Can be a function that takes the denotationChar and returns a regex.\n * @default /^[a-zA-Z0-9_]*$/\n */\n allowedChars?: RegExp | ((char: string) => RegExp)\n\n /**\n * Minimum number of characters after the @ symbol triggering a search request\n * @default 0\n */\n minChars?: number\n\n /**\n * Maximum number of characters after the @ symbol triggering a search request\n * @default 31\n */\n maxChars?: number\n\n /**\n * Additional top offset of the mention container position\n * @default 2\n */\n offsetTop?: number\n\n /**\n * Additional left offset of the mention container position\n * @default 0\n */\n offsetLeft?: number\n\n /**\n * Whether or not the denotation character(s) should be isolated. For example, to avoid mentioning in an email.\n * @default false\n */\n isolateCharacter?: boolean\n\n /**\n * Only works if isolateCharacter is set to true. Whether or not the denotation character(s) can appear inline of the mention text. For example, to allow mentioning an email with the @ symbol as the denotation character.\n * @default false\n */\n allowInlineMentionChar?: boolean\n\n /**\n * When set to true, the mentions menu will be rendered above or below the quill container. Otherwise, the mentions menu will track the denotation character(s);\n * @default false\n */\n fixMentionsToQuill?: boolean\n\n /**\n * Options are 'normal' and 'fixed'. When 'fixed', the menu will be appended to the body and use fixed positioning. Use this if the menu is clipped by a parent element that's using `overflow:hidden\n * @default 'normal'\n */\n positioningStrategy?: 'normal' | 'fixed'\n\n /**\n * Options are 'bottom' and 'top'. Determines what the default orientation of the menu will be. Quill-mention will attempt to render the menu either above or below the editor. If 'top' is provided as a value, and there is not enough space above the editor, the menu will be rendered below. Vice versa, if there is not enough space below the editor, and 'bottom' is provided as a value (or no value is provided at all), the menu will be rendered above the editor.\n * @default 'bottom'\n */\n defaultMenuOrientation?: 'top' | 'bottom'\n\n /**\n * The name of the Quill Blot to be used for inserted mentions. A default implementation is provided named 'mention', which may be overridden with a custom blot.\n * @default 'mention'\n */\n blotName?: string\n\n /**\n * A list of data values you wish to be passed from your list data to the html node. (id, value, denotationChar, link, target are included by default).\n * @default ['id', 'value', 'denotationChar', 'link', 'target', 'disabled']\n */\n dataAttributes?: string[]\n\n /**\n * Link target for mentions with a link\n * @default '_blank'\n */\n linkTarget?: string\n\n /**\n * Style class to be used for list items (may be null)\n * @default 'ql-mention-list-item'\n */\n listItemClass?: string\n\n /**\n * Style class to be used for the mention list container (may be null)\n * @default 'ql-mention-list-container'\n */\n mentionContainerClass?: string\n\n /**\n * Style class to be used for the mention list (may be null)\n * @default 'ql-mention-list'\n */\n mentionListClass?: string\n\n /**\n * Whether or not insert 1 space after mention block in text\n * @default true\n */\n spaceAfterInsert?: boolean\n\n /**\n * An array of keyboard key codes that will trigger the select action for the mention dropdown. Default is ENTER key. See this reference for a list of numbers for each keyboard key.\n * @default [13]\n */\n selectKeys?: (string | number | string)[]\n\n /**\n * Required callback function to handle the search term and connect it to a data source for matches. The data source can be a local source or an AJAX request.\n * The callback should call renderList(matches, searchTerm); with matches of JSON Objects in an array to show the result for the user. The JSON Objects should have id and value but can also have other values to be used in renderItem for custom display.\n * @param textAfter\n * @param render\n * @param mentionChar\n * @returns\n */\n source: (\n textAfter: string,\n renderList: (\n matches: {\n id: string\n value: string\n [key: string]: string | undefined\n }[],\n searchTerm: string\n ) => void,\n mentionChar: string\n ) => void\n\n /**\n * Callback when mention dropdown is open.\n * @returns\n */\n onOpen?: () => boolean\n\n /**\n * Callback before the DOM of mention dropdown is removed.\n * @returns\n */\n onBeforeClose?: () => boolean\n\n /**\n * Callback when mention dropdown is closed.\n * @returns\n */\n onClose?: () => boolean\n\n /**\n * A function that gives you control over how matches from source are displayed. You can use this function to highlight the search term or change the design with custom HTML. This function will need to return either a string possibly containing unsanitized user content, or a class implementing the Node interface which will be treated as a sanitized DOM node.\n * @param item\n * @param searchTerm\n * @returns\n */\n renderItem?: (\n item: { id: string; value: string; [key: string]: unknown },\n searchTerm: string\n ) => string | HTMLElement\n\n /**\n * A function that returns the HTML for a loading message during async calls from source. The function will need to return either a string possibly containing unsanitized user content, or a class implementing the Node interface which will be treated as a sanitized DOM node. The default functions returns null to prevent a loading message.\n * @returns\n */\n renderLoading?: () => string | HTMLElement | null\n\n /**\n * Callback for a selected item. When overriding this method, insertItem should be used to insert item to the editor. This makes async requests possible.\n * @param item\n * @param insertItem\n */\n onSelect?: (\n item: DOMStringMap,\n insertItem: (\n data: Record<string, unknown>,\n programmaticInsert?: boolean,\n overriddenOptions?: object\n ) => void\n ) => void\n}\n\nexport interface TheSeamQuillModules extends QuillModules {\n mention?: Partial<TheSeamQuillMentionOptions>\n}\n\nexport const THESEAM_QUILL_FORMATS = [\n 'align',\n 'background',\n 'blockquote',\n 'bold',\n 'code-block',\n 'code',\n 'color',\n 'direction',\n 'font',\n 'header',\n 'image',\n 'indent',\n 'italic',\n 'link',\n 'list',\n 'script',\n 'size',\n 'strike',\n 'underline',\n 'video',\n 'mention'\n] as const\n\nexport type TheSeamQuillStyleFormat = (typeof THESEAM_QUILL_FORMATS)[number]\n\nexport type TheSeamQuillInputFormat = 'object' | 'html' | 'text' | 'json'\n\nexport interface TheSeamQuillEditorConfig {\n /**\n * The format of the text inside the editor.\n *\n * @default 'html'\n */\n format: TheSeamQuillInputFormat\n\n /** @default 'snow' */\n theme?: string\n\n /**\n * Used to set custom config for built-in and add-on modules.\n *\n * See `SEAM_QUILL_MODULES_DEFAULT` for default value.\n */\n modules?: TheSeamQuillModules\n\n /**\n * Console level for debug messages.\n *\n * @default `warn`\n */\n debug?: 'warn' | 'log' | 'error' | false\n\n /**\n * List of formats allowed in editor.\n *\n * See `SEAM_QUILL_FORMATS_DEFAULT` for default value.\n *\n * NOTE: Adding or removing a value will enable/disable that format\n * in the editor, but has no effect on the toolbar buttons.\n * To modify the toolbar display, update `modules.toolbar`.\n */\n formats?: TheSeamQuillStyleFormat[] | null\n\n /** @default 'top' */\n customToolbarPosition: 'top' | 'bottom'\n\n /**\n * When `true`, runs the control value through Angular's DOM sanitizer\n * before setting the value.\n *\n * @default false\n */\n sanitize: boolean\n\n /** Custom css styles to add to the `.ql-container` element. */\n styles?: { [key: string]: string } | null\n\n /**\n * When `false`, user interactions in the toolbar will emit even\n * if the editor is marked as `readOnly`. This allows the user to\n * make some formatting changes (e.g. creating a list) to a value\n * that should be disabled.\n *\n * @default true.\n */\n strict: boolean\n\n /**\n * An element or selector that specifies the scrolling element of the editor.\n *\n * Default scrollingContainer is the `.ql-editor` element.\n */\n scrollingContainer?: HTMLElement | string | null\n\n /**\n * An element or selector that specifies the confining element of the editor.\n *\n * Default boundary container is the document's `body` element.\n */\n bounds?: HTMLElement | string\n\n /**\n * Defines custom formats for the editor. Can be used to overwrite existing options.\n *\n * TODO: Research this more.\n */\n customOptions: CustomOption[]\n\n /**\n * Defines custom modules for the editor. Can be used to overwrite existing modules.\n *\n * TODO: Research this more.\n */\n customModules: CustomModule[]\n\n /**\n * When `user`, only change events from the user will trigger a model change.\n * This is the default behavior, and is preferred.\n *\n * Changing to `all` is not recommended.\n */\n trackChanges?: 'user' | 'all'\n\n /**\n * When `true`, preserves duplicated whitespaces.\n *\n * @default false\n */\n preserveWhitespace: boolean\n\n /** Custom classes to add to the `.ql-container` element. */\n classes?: string\n\n /**\n * When `true`, trims leading/trailing newlines when validation is run.\n *\n * @default false\n */\n trimOnValidation: boolean\n\n /**\n * Sets a placeholder for the link input in the hyperlink form.\n *\n * @default 'https://quilljs.com'\n */\n linkPlaceholder?: string\n\n /**\n * When `true`, does a basic compare (using JSON.stringify) between the old\n * and new value on `writeValue()`. If the values are the same, it skips the update.\n *\n * @default false\n */\n compareValues: boolean\n\n /**\n * When `true`, skips the update for null values on `writeValue()`.\n *\n * @default false\n */\n filterNull: boolean\n\n /**\n * Debounces `onContentChanged()`, `onEditorChanged()`, `ngModel` and form control `valueChange()`.\n *\n * Defaults to `undefined`, so changes always emit immediately.\n *\n * @default undefined\n */\n debounceTime?: number\n\n /**\n * @deprecated The `ngx-quill` library doesn't accurately handle undefined\n * inputs, and the default `valueGetter` function is impossible to reference here,\n * so this config option is not used.\n *\n * Defines custom logic for reading the html value of the editor.\n */\n valueGetter?: (\n quillEditor: QuillType,\n editorElement: HTMLElement\n ) => string | any\n\n /**\n * @deprecated The `ngx-quill` library doesn't accurately handle undefined\n * inputs, and the default `valueSetter` function is impossible to reference here,\n * so this config option is not used.\n *\n * Defines custom logic for setting the html value of the editor.\n */\n valueSetter?: (quillEditor: QuillType, value: any) => any\n}\n\nexport type TheSeamCharacterCounterFn = (\n value: string,\n format: TheSeamQuillInputFormat | undefined\n) => number\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { QuillModule } from 'ngx-quill';\nimport { RichTextComponent } from './rich-text/rich-text.component';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@NgModule({\n declarations: [\n RichTextComponent,\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n QuillModule\n ],\n exports: [\n RichTextComponent,\n ]\n})\nexport class TheSeamRichTextModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}