@koobiq/components 20.0.0 → 20.1.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 (192) hide show
  1. package/accordion/accordion-trigger.component.scss +0 -18
  2. package/accordion/accordion.component.scss +9 -2
  3. package/actions-panel/index.d.ts +1 -0
  4. package/alert/_alert-theme.scss +0 -4
  5. package/alert/alert-tokens.scss +4 -4
  6. package/app-switcher/app-switcher-dropdown-app.scss +2 -0
  7. package/breadcrumbs/breadcrumbs.scss +4 -0
  8. package/breadcrumbs/index.d.ts +2 -1
  9. package/button/button-group.scss +42 -2
  10. package/button-toggle/button-toggle.scss +23 -0
  11. package/button-toggle/index.d.ts +3 -1
  12. package/checkbox/checkbox.scss +5 -4
  13. package/clamped-text/index.d.ts +1 -0
  14. package/core/index.d.ts +402 -13
  15. package/core/styles/common/_animation.scss +4 -0
  16. package/core/styles/theming/_components-theming.scss +1 -1
  17. package/core/styles/theming/_scrollbar-theme.scss +4 -0
  18. package/datepicker/_datepicker-theme.scss +1 -1
  19. package/datepicker/datepicker-toggle.scss +3 -3
  20. package/dl/index.d.ts +1 -0
  21. package/dropdown/dropdown.scss +2 -2
  22. package/fesm2022/koobiq-components-accordion.mjs +4 -4
  23. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  24. package/fesm2022/koobiq-components-actions-panel.mjs +14 -5
  25. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  26. package/fesm2022/koobiq-components-alert.mjs +2 -2
  27. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  28. package/fesm2022/koobiq-components-app-switcher.mjs +6 -6
  29. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  30. package/fesm2022/koobiq-components-breadcrumbs.mjs +6 -4
  31. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  32. package/fesm2022/koobiq-components-button-toggle.mjs +9 -6
  33. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  34. package/fesm2022/koobiq-components-button.mjs +4 -4
  35. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  36. package/fesm2022/koobiq-components-checkbox.mjs +2 -2
  37. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  38. package/fesm2022/koobiq-components-clamped-text.mjs +4 -0
  39. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  40. package/fesm2022/koobiq-components-code-block.mjs +4 -0
  41. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  42. package/fesm2022/koobiq-components-core.mjs +449 -112
  43. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  44. package/fesm2022/koobiq-components-datepicker.mjs +5 -5
  45. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  46. package/fesm2022/koobiq-components-dl.mjs +3 -2
  47. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  48. package/fesm2022/koobiq-components-dropdown.mjs +8 -13
  49. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  50. package/fesm2022/koobiq-components-file-upload.mjs +33 -22
  51. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  52. package/fesm2022/koobiq-components-filter-bar.mjs +974 -758
  53. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  54. package/fesm2022/koobiq-components-flag.mjs +66 -0
  55. package/fesm2022/koobiq-components-flag.mjs.map +1 -0
  56. package/fesm2022/koobiq-components-form-field.mjs +2 -2
  57. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  58. package/fesm2022/koobiq-components-icon.mjs +2 -2
  59. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  60. package/fesm2022/koobiq-components-inline-edit.mjs +27 -6
  61. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  62. package/fesm2022/koobiq-components-list.mjs +39 -20
  63. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  64. package/fesm2022/koobiq-components-loader-overlay.mjs +2 -2
  65. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  66. package/fesm2022/koobiq-components-modal.mjs +9 -5
  67. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  68. package/fesm2022/koobiq-components-navbar.mjs +10 -9
  69. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  70. package/fesm2022/koobiq-components-notification-center.mjs +178 -19
  71. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  72. package/fesm2022/koobiq-components-overflow-items.mjs +12 -4
  73. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  74. package/fesm2022/koobiq-components-popover.mjs +4 -4
  75. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  76. package/fesm2022/koobiq-components-progress-bar.mjs +2 -2
  77. package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
  78. package/fesm2022/koobiq-components-progress-spinner.mjs +2 -2
  79. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  80. package/fesm2022/koobiq-components-radio.mjs +3 -7
  81. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  82. package/fesm2022/koobiq-components-select.mjs +38 -16
  83. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  84. package/fesm2022/koobiq-components-sidebar.mjs +4 -0
  85. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  86. package/fesm2022/koobiq-components-sidepanel.mjs +3 -3
  87. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-skeleton.mjs +2 -2
  89. package/fesm2022/koobiq-components-skeleton.mjs.map +1 -1
  90. package/fesm2022/koobiq-components-split-button.mjs +2 -2
  91. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  92. package/fesm2022/koobiq-components-splitter.mjs +6 -2
  93. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  94. package/fesm2022/koobiq-components-table.mjs +8 -6
  95. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-tabs.mjs +19 -7
  97. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-tags.mjs +7 -0
  99. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-textarea.mjs +7 -14
  101. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-time-range.mjs +4 -4
  103. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  104. package/fesm2022/koobiq-components-timezone.mjs +6 -0
  105. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  106. package/fesm2022/koobiq-components-title.mjs +132 -14
  107. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  108. package/fesm2022/koobiq-components-toast.mjs +1 -1
  109. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  110. package/fesm2022/koobiq-components-toggle.mjs +2 -2
  111. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  112. package/fesm2022/koobiq-components-tooltip.mjs +50 -2
  113. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  114. package/fesm2022/koobiq-components-tree-select.mjs +44 -11
  115. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  116. package/fesm2022/koobiq-components-tree.mjs +67 -41
  117. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-username.mjs +16 -3
  119. package/fesm2022/koobiq-components-username.mjs.map +1 -1
  120. package/file-upload/file-upload-tokens.scss +1 -0
  121. package/file-upload/index.d.ts +10 -7
  122. package/filter-bar/_filter-bar-theme.scss +86 -0
  123. package/filter-bar/filter-bar-tokens.scss +6 -0
  124. package/filter-bar/filter-bar.scss +10 -4
  125. package/filter-bar/filter-refresher.scss +1 -1
  126. package/filter-bar/filters.scss +23 -19
  127. package/filter-bar/index.d.ts +707 -338
  128. package/filter-bar/pipes/base-pipe.scss +14 -35
  129. package/filter-bar/pipes/pipe-date.scss +20 -14
  130. package/filter-bar/pipes/pipe-multi-tree-select.scss +5 -3
  131. package/filter-bar/pipes/pipe-multiselect.scss +5 -3
  132. package/filter-bar/pipes/pipe-readonly.scss +4 -13
  133. package/filter-bar/pipes/pipe-select.scss +3 -1
  134. package/filter-bar/pipes/pipe-tree-select.scss +3 -1
  135. package/flag/flag.scss +53 -0
  136. package/flag/index.d.ts +44 -0
  137. package/icon/icon-item-tokens.scss +1 -1
  138. package/inline-edit/index.d.ts +5 -0
  139. package/inline-edit/inline-edit.scss +7 -7
  140. package/link/link-tokens.scss +2 -2
  141. package/list/index.d.ts +11 -2
  142. package/loader-overlay/loader-overlay-tokens.scss +1 -1
  143. package/modal/_modal-animation.scss +6 -6
  144. package/modal/_modal-theme.scss +5 -0
  145. package/modal/index.d.ts +3 -1
  146. package/modal/modal.scss +15 -0
  147. package/navbar/index.d.ts +1 -0
  148. package/navbar/navbar-item.scss +9 -0
  149. package/notification-center/_notification-center-theme.scss +2 -1
  150. package/notification-center/index.d.ts +88 -3
  151. package/notification-center/notification-center.scss +42 -4
  152. package/notification-center/notification-item.scss +3 -2
  153. package/overflow-items/index.d.ts +1 -0
  154. package/package.json +7 -3
  155. package/prebuilt-themes/dark-theme.css +1 -1
  156. package/prebuilt-themes/light-theme.css +1 -1
  157. package/prebuilt-themes/theme.css +1 -1
  158. package/progress-bar/progress-bar.scss +4 -0
  159. package/progress-spinner/progress-spinner.scss +5 -1
  160. package/radio/index.d.ts +1 -5
  161. package/radio/radio.scss +18 -4
  162. package/schematics/collection.json +5 -0
  163. package/schematics/migrations/filter-bar-signals/README.md +66 -0
  164. package/schematics/migrations/filter-bar-signals/data.js +72 -0
  165. package/schematics/migrations/filter-bar-signals/index.js +316 -0
  166. package/schematics/migrations/filter-bar-signals/schema.json +20 -0
  167. package/schematics/migrations.json +5 -0
  168. package/schematics/ng-add/index.js +1 -1
  169. package/select/index.d.ts +10 -2
  170. package/sidebar/index.d.ts +1 -0
  171. package/skeleton/skeleton.scss +4 -0
  172. package/split-button/_split-button-theme.scss +2 -2
  173. package/splitter/_splitter-theme.scss +2 -2
  174. package/splitter/index.d.ts +1 -0
  175. package/table/_table-theme.scss +4 -0
  176. package/table/index.d.ts +3 -2
  177. package/tabs/index.d.ts +2 -0
  178. package/tabs/tab-header.scss +1 -0
  179. package/tabs/tabs-tokens.scss +1 -1
  180. package/textarea/index.d.ts +0 -1
  181. package/time-range/time-range.scss +0 -8
  182. package/timepicker/timepicker.scss +2 -2
  183. package/timezone/index.d.ts +1 -0
  184. package/title/index.d.ts +92 -2
  185. package/tooltip/index.d.ts +51 -3
  186. package/tree/_tree-theme.scss +2 -7
  187. package/tree/index.d.ts +19 -4
  188. package/tree/toggle.scss +5 -0
  189. package/tree/tree-option.scss +0 -4
  190. package/tree-select/_tree-select-theme.scss +1 -1
  191. package/tree-select/index.d.ts +9 -2
  192. package/username/index.d.ts +20 -2
@@ -1,31 +1,76 @@
1
1
  import { ContentObserver } from '@angular/cdk/observers';
2
2
  import * as i0 from '@angular/core';
3
- import { inject, ContentChild, Directive, NgModule } from '@angular/core';
4
- import { KBQ_TITLE_TEXT_REF, kbqInjectNativeElement, PopUpTriggers } from '@koobiq/components/core';
3
+ import { inject, input, ContentChild, ContentChildren, Directive, NgModule } from '@angular/core';
4
+ import { KBQ_TITLE_TEXT_REF, kbqInjectNativeElement, KBQ_WINDOW, PopUpTriggers, PopUpPlacements } from '@koobiq/components/core';
5
5
  import { KbqTooltipTrigger, KbqToolTipModule } from '@koobiq/components/tooltip';
6
6
  import { Subject, Subscription, throttleTime } from 'rxjs';
7
7
  import { debounceTime } from 'rxjs/operators';
8
8
 
9
+ /**
10
+ * Shows a tooltip with the full text of the host element, but only when that text is truncated —
11
+ * i.e. it overflows horizontally, or vertically when clamped to several lines. The tooltip opens on
12
+ * hover and on keyboard focus, and hides on blur, mouse leave, or window resize.
13
+ *
14
+ * By default, the tooltip content is the trimmed `textContent` of the host. Provide explicit content
15
+ * with `[kbq-title]="stringOrTemplateRef"`. For nested markup, mark the measured container with the
16
+ * `#kbqTitleContainer` template reference and the text element(s) with `#kbqTitleText`; several
17
+ * `#kbqTitleText` elements are supported and the tooltip is shown when any of them overflows.
18
+ *
19
+ * Host components that provide `KBQ_TITLE_TEXT_REF` (e.g. `KbqOption`) supply the text and parent
20
+ * elements automatically, so the directive works without explicit template references.
21
+ */
9
22
  class KbqTitleDirective extends KbqTooltipTrigger {
10
23
  constructor() {
11
24
  super(...arguments);
25
+ /** Optional host component that exposes the measured text/parent elements via `KBQ_TITLE_TEXT_REF`. */
12
26
  this.componentInstance = inject(KBQ_TITLE_TEXT_REF, { host: true, optional: true });
27
+ /** Host native element the directive is attached to. */
13
28
  this.nativeElement = kbqInjectNativeElement();
29
+ /** SSR-safe window reference used for `getComputedStyle` reads. */
30
+ this.window = inject(KBQ_WINDOW);
31
+ /** Observes host content mutations to re-evaluate overflow and refresh the resolved tooltip content. */
14
32
  this.contentObserver = inject(ContentObserver);
33
+ /**
34
+ * Optional explicit tooltip content. Accepts a `TemplateRef` (rendered as rich tooltip content) or a string.
35
+ * When omitted (a bare `kbq-title` attribute resolves to an empty string), the directive falls back to the
36
+ * trimmed `textContent` of the host (`viewValue`), preserving the default behavior.
37
+ */
38
+ this.titleContent = input('', ...(ngDevMode ? [{ debugName: "titleContent", alias: 'kbq-title' }] : [{ alias: 'kbq-title' }]));
39
+ /** Emits `window:resize` events; subscribed to re-evaluate overflow after the viewport changes.
40
+ * @docs-private */
15
41
  this.resizeStream = new Subject();
42
+ /** Debounce/throttle interval (ms) applied to the resize and content-observer streams. */
16
43
  this.debounceInterval = 100;
44
+ /** Subscription to `resizeStream`, torn down in `ngOnDestroy`. */
17
45
  this.resizeSubscription = Subscription.EMPTY;
46
+ /** Subscription to the content observer, torn down in `ngOnDestroy`. */
18
47
  this.contentObserverSubscription = Subscription.EMPTY;
48
+ /** Subscription to the focus monitor, torn down in `ngOnDestroy`. */
19
49
  this.focusMonitorSubscription = Subscription.EMPTY;
20
50
  }
21
51
  // todo need rename kbqTrigger in popover, tooltip and title. Here workaround for kbq-title and popover on one button
22
52
  set trigger(value) {
23
53
  super.trigger = value;
24
54
  }
55
+ /**
56
+ * The pop-up trigger. Always reports `PopUpTriggers.Hover`, so the title tooltip reacts to hover and
57
+ * keyboard focus regardless of the assigned value. The setter is kept only as a no-op workaround so a
58
+ * host that also uses a popover can assign a trigger without breaking `kbq-title`.
59
+ */
25
60
  get trigger() {
26
61
  return PopUpTriggers.Hover;
27
62
  }
63
+ /**
64
+ * Whether the host content is clipped and therefore needs a tooltip. Returns `true` if any measured
65
+ * text element overflows the parent — covering multiple `#kbqTitleText` elements, the sub-pixel
66
+ * special case, and both horizontal and vertical overflow.
67
+ */
28
68
  get isOverflown() {
69
+ const children = this.childElements;
70
+ /** Multiple text elements (e.g. filter-bar pipe with a name and a value): overflown if any of them overflows. */
71
+ if (children.length > 1) {
72
+ return children.some((element) => this.parent?.offsetWidth < element.scrollWidth || this.parent?.offsetHeight < element.scrollHeight);
73
+ }
29
74
  /** For special cases where the difference is a fraction of a pixel */
30
75
  if (!this.isVerticalOverflown &&
31
76
  (this.child.scrollWidth === 0 || this.parent?.offsetWidth === this.child.scrollWidth)) {
@@ -33,36 +78,103 @@ class KbqTitleDirective extends KbqTooltipTrigger {
33
78
  const wrapper = this.renderer.createElement('span');
34
79
  wrapper.innerText = this.child.innerText;
35
80
  this.parent.appendChild(wrapper);
36
- const result = this.parent.getBoundingClientRect().width < wrapper.getBoundingClientRect().width;
81
+ const result = this.isWidthOverflown(this.parent.getBoundingClientRect().width, wrapper.getBoundingClientRect().width);
37
82
  wrapper.remove();
38
83
  return result;
39
84
  }
40
- return this.parent.getBoundingClientRect().width < this.child.getBoundingClientRect().width;
85
+ return this.isWidthOverflown(this.parent.getBoundingClientRect().width, this.child.getBoundingClientRect().width);
41
86
  }
42
87
  return this.isHorizontalOverflown || this.isVerticalOverflown;
43
88
  }
89
+ /** Whether the text is clipped horizontally: the parent `offsetWidth` is smaller than the child `scrollWidth`. */
44
90
  get isHorizontalOverflown() {
45
91
  return this.parent?.offsetWidth < this.child.scrollWidth;
46
92
  }
93
+ /** Whether the text is clipped vertically: the parent `offsetHeight` is smaller than the child `scrollHeight`. */
47
94
  get isVerticalOverflown() {
48
95
  return this.parent?.offsetHeight < this.child.scrollHeight;
49
96
  }
97
+ /**
98
+ * Compares measured widths, treating only *visible* clipping as overflow. With `text-overflow: ellipsis`
99
+ * any positive difference counts (even a sub-pixel overflow shows `…`). With `text-overflow: clip` the
100
+ * widths are rounded to whole CSS pixels first — mirroring the integer `offsetWidth`/`scrollWidth` path —
101
+ * so an imperceptible sub-pixel clip is not treated as truncation.
102
+ * @docs-private */
103
+ isWidthOverflown(parentWidth, childWidth) {
104
+ return this.hasEllipsis ? parentWidth < childWidth : Math.round(parentWidth) < Math.round(childWidth);
105
+ }
106
+ /** Trimmed `textContent` of the measured parent, used as the default tooltip content. */
50
107
  get viewValue() {
51
108
  return (this.parent?.textContent || '').trim();
52
109
  }
110
+ /**
111
+ * Measured container element. Resolved as the projected `#kbqTitleContainer`, otherwise the
112
+ * `KBQ_TITLE_TEXT_REF` host's `parentTextElement`, otherwise the host element itself.
113
+ * @docs-private */
53
114
  get parent() {
54
- return this.parentContainer?.nativeElement || this.parentContainer;
115
+ return (this.parentContainer?.nativeElement ||
116
+ this.componentInstance?.parentTextElement?.nativeElement ||
117
+ this.elementRef.nativeElement);
55
118
  }
119
+ /** First effective text element used for overflow detection (the first entry of `childElements`).
120
+ * @docs-private */
56
121
  get child() {
57
- return this.childContainer.nativeElement || this.childContainer;
122
+ return this.childElements[0];
58
123
  }
124
+ /** Whether the host element contains exactly one child node and that node is a text node. */
59
125
  get hasOnlyText() {
60
126
  return (this.nativeElement.childNodes.length === 1 && this.nativeElement.childNodes[0].nodeType === Node.TEXT_NODE);
61
127
  }
128
+ /**
129
+ * Whether the measured text truncates with an ellipsis on either the child text element or its
130
+ * wrapping container. Only then is a sub-pixel overflow actually visible (the trailing glyph is
131
+ * replaced by `…`); with the default `text-overflow: clip` a sub-pixel clip is imperceptible, so
132
+ * it must not be reported as truncation. Both elements are checked because `text-overflow` is not
133
+ * inherited and consumers place it differently: `KbqOption`/`KbqDropdownItem` style the measured
134
+ * `child`, whereas `KbqTreeOption` styles the `parent` container that wraps the child.
135
+ * @docs-private */
136
+ get hasEllipsis() {
137
+ return this.elementHasEllipsis(this.child) || this.elementHasEllipsis(this.parent);
138
+ }
139
+ /** Whether the element's computed `text-overflow` renders an ellipsis.
140
+ * @docs-private */
141
+ elementHasEllipsis(element) {
142
+ return this.window.getComputedStyle(element).textOverflow.includes('ellipsis');
143
+ }
144
+ /**
145
+ * Effective text elements used for overflow detection. Resolves to the projected `#kbqTitleText` elements,
146
+ * otherwise falls back to the `KbqTitleTextRef` host's `textElement`, otherwise to the host element itself.
147
+ * Always contains at least one element.
148
+ * @docs-private */
149
+ get childElements() {
150
+ if (this.childContainer?.length) {
151
+ return this.childContainer.map(({ nativeElement }) => nativeElement);
152
+ }
153
+ return [this.componentInstance?.textElement?.nativeElement ?? this.elementRef.nativeElement];
154
+ }
155
+ /** Resolved tooltip content: the explicit `titleContent` input when provided, otherwise the host text.
156
+ * @docs-private */
157
+ get resolvedContent() {
158
+ return this.titleContent() || this.viewValue;
159
+ }
160
+ /**
161
+ * Sets the initial tooltip content and wires the streams that toggle the tooltip's `disabled` state:
162
+ * window resize and content mutations re-evaluate overflow, and keyboard focus opens the tooltip
163
+ * while other focus origins hide it.
164
+ */
62
165
  ngAfterViewInit() {
63
- this.parentContainer = this.parentContainer || this.componentInstance?.parentTextElement || this.elementRef;
64
- this.childContainer = this.childContainer || this.componentInstance?.textElement || this.elementRef;
65
- this.content = this.viewValue;
166
+ this.content = this.resolvedContent;
167
+ // Keep the title tooltip centered on the trigger: fall back only to center-aligned placements
168
+ // (top/bottom center horizontally; left/right center vertically), never to edge-anchored corner
169
+ // positions. Guarded so an explicit consumer `kbqPlacementPriority` or `kbqPlacement` is respected.
170
+ if (!this.placementPriority && this.placement === PopUpPlacements.Top) {
171
+ this.placementPriority = [
172
+ PopUpPlacements.Top,
173
+ PopUpPlacements.Bottom,
174
+ PopUpPlacements.Right,
175
+ PopUpPlacements.Left
176
+ ];
177
+ }
66
178
  this.resizeSubscription = this.resizeStream
67
179
  .pipe(debounceTime(this.debounceInterval))
68
180
  .subscribe(() => (this.disabled = !this.isOverflown));
@@ -71,12 +183,13 @@ class KbqTitleDirective extends KbqTooltipTrigger {
71
183
  .pipe(throttleTime(this.debounceInterval))
72
184
  .subscribe(() => {
73
185
  this.disabled = !this.isOverflown;
74
- this.content = this.viewValue;
186
+ this.content = this.resolvedContent;
75
187
  });
76
188
  this.focusMonitorSubscription = this.focusMonitor
77
189
  .monitor(this.elementRef)
78
190
  .subscribe((origin) => (origin === 'keyboard' ? this.handleElementEnter() : this.hideTooltip()));
79
191
  }
192
+ /** Unsubscribes from the resize, content-observer and focus-monitor streams and stops focus monitoring. */
80
193
  ngOnDestroy() {
81
194
  super.ngOnDestroy();
82
195
  this.resizeSubscription.unsubscribe();
@@ -84,14 +197,19 @@ class KbqTitleDirective extends KbqTooltipTrigger {
84
197
  this.focusMonitorSubscription.unsubscribe();
85
198
  this.focusMonitor.stopMonitoring(this.elementRef);
86
199
  }
200
+ /** Enables the tooltip only when the content is overflown. Bound to `mouseenter` and keyboard focus.
201
+ * @docs-private */
87
202
  handleElementEnter() {
203
+ this.content = this.resolvedContent;
88
204
  this.disabled = !this.isOverflown;
89
205
  }
206
+ /** Always disables (hides) the tooltip. Bound to `mouseleave` and non-keyboard focus changes.
207
+ * @docs-private */
90
208
  hideTooltip() {
91
209
  this.disabled = true;
92
210
  }
93
211
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqTitleDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
94
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.25", type: KbqTitleDirective, isStandalone: true, selector: "[kbq-title]", host: { listeners: { "mouseenter": "handleElementEnter()", "mouseleave": "hideTooltip()", "window:resize": "resizeStream.next($event)" } }, queries: [{ propertyName: "childContainer", first: true, predicate: ["kbqTitleText"], descendants: true, static: true }, { propertyName: "parentContainer", first: true, predicate: ["kbqTitleContainer"], descendants: true }], exportAs: ["kbqTitle"], usesInheritance: true, ngImport: i0 }); }
212
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.25", type: KbqTitleDirective, isStandalone: true, selector: "[kbq-title]", inputs: { titleContent: { classPropertyName: "titleContent", publicName: "kbq-title", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "handleElementEnter()", "mouseleave": "hideTooltip()", "window:resize": "resizeStream.next($event)" } }, queries: [{ propertyName: "parentContainer", first: true, predicate: ["kbqTitleContainer"], descendants: true }, { propertyName: "childContainer", predicate: ["kbqTitleText"], descendants: true }], exportAs: ["kbqTitle"], usesInheritance: true, ngImport: i0 }); }
95
213
  }
96
214
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqTitleDirective, decorators: [{
97
215
  type: Directive,
@@ -104,9 +222,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
104
222
  },
105
223
  exportAs: 'kbqTitle'
106
224
  }]
107
- }], propDecorators: { childContainer: [{
108
- type: ContentChild,
109
- args: ['kbqTitleText', { descendants: true, static: true }]
225
+ }], propDecorators: { titleContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbq-title", required: false }] }], childContainer: [{
226
+ type: ContentChildren,
227
+ args: ['kbqTitleText', { descendants: true }]
110
228
  }], parentContainer: [{
111
229
  type: ContentChild,
112
230
  args: ['kbqTitleContainer']
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-title.mjs","sources":["../../../packages/components/title/title.directive.ts","../../../packages/components/title/title.module.ts","../../../packages/components/title/koobiq-components-title.ts"],"sourcesContent":["import { ContentObserver } from '@angular/cdk/observers';\nimport { AfterViewInit, ContentChild, Directive, ElementRef, inject, OnDestroy } from '@angular/core';\nimport { KBQ_TITLE_TEXT_REF, kbqInjectNativeElement, KbqTitleTextRef, PopUpTriggers } from '@koobiq/components/core';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { Subject, Subscription, throttleTime } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n@Directive({\n selector: '[kbq-title]',\n host: {\n '(mouseenter)': 'handleElementEnter()',\n '(mouseleave)': 'hideTooltip()',\n '(window:resize)': 'resizeStream.next($event)'\n },\n exportAs: 'kbqTitle'\n})\nexport class KbqTitleDirective extends KbqTooltipTrigger implements AfterViewInit, OnDestroy {\n private componentInstance = inject<KbqTitleTextRef>(KBQ_TITLE_TEXT_REF, { host: true, optional: true });\n private readonly nativeElement = kbqInjectNativeElement();\n\n private contentObserver = inject(ContentObserver);\n\n // todo need rename kbqTrigger in popover, tooltip and title. Here workaround for kbq-title and popover on one button\n set trigger(value: string) {\n super.trigger = value;\n }\n\n get trigger(): string {\n return PopUpTriggers.Hover;\n }\n\n get isOverflown(): boolean {\n /** For special cases where the difference is a fraction of a pixel */\n if (\n !this.isVerticalOverflown &&\n (this.child.scrollWidth === 0 || this.parent?.offsetWidth === this.child.scrollWidth)\n ) {\n if (this.hasOnlyText) {\n const wrapper = this.renderer.createElement('span');\n\n wrapper.innerText = this.child.innerText;\n this.parent.appendChild(wrapper);\n\n const result = this.parent.getBoundingClientRect().width < wrapper.getBoundingClientRect().width;\n\n wrapper.remove();\n\n return result;\n }\n\n return this.parent.getBoundingClientRect().width < this.child.getBoundingClientRect().width;\n }\n\n return this.isHorizontalOverflown || this.isVerticalOverflown;\n }\n\n get isHorizontalOverflown(): boolean {\n return this.parent?.offsetWidth < this.child.scrollWidth;\n }\n\n get isVerticalOverflown(): boolean {\n return this.parent?.offsetHeight < this.child.scrollHeight;\n }\n\n get viewValue(): string {\n return (this.parent?.textContent || '').trim();\n }\n\n get parent(): HTMLElement {\n return this.parentContainer?.nativeElement || this.parentContainer;\n }\n\n get child(): HTMLElement {\n return this.childContainer.nativeElement || this.childContainer;\n }\n\n get hasOnlyText(): boolean {\n return (\n this.nativeElement.childNodes.length === 1 && this.nativeElement.childNodes[0].nodeType === Node.TEXT_NODE\n );\n }\n\n readonly resizeStream = new Subject<Event>();\n\n private readonly debounceInterval: number = 100;\n\n private resizeSubscription = Subscription.EMPTY;\n private contentObserverSubscription = Subscription.EMPTY;\n private focusMonitorSubscription = Subscription.EMPTY;\n\n @ContentChild('kbqTitleText', { descendants: true, static: true })\n private childContainer: ElementRef;\n\n @ContentChild('kbqTitleContainer')\n private parentContainer: ElementRef;\n\n ngAfterViewInit() {\n this.parentContainer = this.parentContainer || this.componentInstance?.parentTextElement || this.elementRef;\n this.childContainer = this.childContainer || this.componentInstance?.textElement || this.elementRef;\n this.content = this.viewValue;\n\n this.resizeSubscription = this.resizeStream\n .pipe(debounceTime(this.debounceInterval))\n .subscribe(() => (this.disabled = !this.isOverflown));\n\n this.contentObserverSubscription = this.contentObserver\n .observe(this.parent)\n .pipe(throttleTime(this.debounceInterval))\n .subscribe(() => {\n this.disabled = !this.isOverflown;\n this.content = this.viewValue;\n });\n\n this.focusMonitorSubscription = this.focusMonitor\n .monitor(this.elementRef)\n .subscribe((origin) => (origin === 'keyboard' ? this.handleElementEnter() : this.hideTooltip()));\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n\n this.resizeSubscription.unsubscribe();\n this.contentObserverSubscription.unsubscribe();\n this.focusMonitorSubscription.unsubscribe();\n this.focusMonitor.stopMonitoring(this.elementRef);\n }\n\n handleElementEnter() {\n this.disabled = !this.isOverflown;\n }\n\n hideTooltip() {\n this.disabled = true;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqToolTipModule } from '@koobiq/components/tooltip';\nimport { KbqTitleDirective } from './title.directive';\n\n@NgModule({\n imports: [KbqToolTipModule, KbqTitleDirective],\n exports: [KbqTitleDirective]\n})\nexport class KbqTitleModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;AAgBM,MAAO,iBAAkB,SAAQ,iBAAiB,CAAA;AATxD,IAAA,WAAA,GAAA;;AAUY,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAkB,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACtF,IAAA,CAAA,aAAa,GAAG,sBAAsB,EAAE;AAEjD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AA8DxC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAS;QAE3B,IAAA,CAAA,gBAAgB,GAAW,GAAG;AAEvC,QAAA,IAAA,CAAA,kBAAkB,GAAG,YAAY,CAAC,KAAK;AACvC,QAAA,IAAA,CAAA,2BAA2B,GAAG,YAAY,CAAC,KAAK;AAChD,QAAA,IAAA,CAAA,wBAAwB,GAAG,YAAY,CAAC,KAAK;AA8CxD,IAAA;;IA/GG,IAAI,OAAO,CAAC,KAAa,EAAA;AACrB,QAAA,KAAK,CAAC,OAAO,GAAG,KAAK;IACzB;AAEA,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,aAAa,CAAC,KAAK;IAC9B;AAEA,IAAA,IAAI,WAAW,GAAA;;QAEX,IACI,CAAC,IAAI,CAAC,mBAAmB;aACxB,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EACvF;AACE,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;gBAEnD,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS;AACxC,gBAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;AAEhC,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK;gBAEhG,OAAO,CAAC,MAAM,EAAE;AAEhB,gBAAA,OAAO,MAAM;YACjB;AAEA,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,KAAK;QAC/F;AAEA,QAAA,OAAO,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,mBAAmB;IACjE;AAEA,IAAA,IAAI,qBAAqB,GAAA;QACrB,OAAO,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW;IAC5D;AAEA,IAAA,IAAI,mBAAmB,GAAA;QACnB,OAAO,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY;IAC9D;AAEA,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,EAAE,EAAE,IAAI,EAAE;IAClD;AAEA,IAAA,IAAI,MAAM,GAAA;QACN,OAAO,IAAI,CAAC,eAAe,EAAE,aAAa,IAAI,IAAI,CAAC,eAAe;IACtE;AAEA,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,IAAI,IAAI,CAAC,cAAc;IACnE;AAEA,IAAA,IAAI,WAAW,GAAA;QACX,QACI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS;IAElH;IAgBA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,IAAI,IAAI,CAAC,UAAU;AAC3G,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,EAAE,WAAW,IAAI,IAAI,CAAC,UAAU;AACnG,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS;AAE7B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AAC1B,aAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACxC,aAAA,SAAS,CAAC,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAEzD,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;AACnC,aAAA,OAAO,CAAC,IAAI,CAAC,MAAM;AACnB,aAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;aACxC,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW;AACjC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS;AACjC,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;AAChC,aAAA,OAAO,CAAC,IAAI,CAAC,UAAU;aACvB,SAAS,CAAC,CAAC,MAAM,MAAM,MAAM,KAAK,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACxG;IAEA,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE;AAEnB,QAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;AACrC,QAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE;AAC9C,QAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;QAC3C,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;IACrD;IAEA,kBAAkB,GAAA;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW;IACrC;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;kIArHS,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,eAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAT7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,IAAI,EAAE;AACF,wBAAA,cAAc,EAAE,sBAAsB;AACtC,wBAAA,cAAc,EAAE,eAAe;AAC/B,wBAAA,iBAAiB,EAAE;AACtB,qBAAA;AACD,oBAAA,QAAQ,EAAE;AACb,iBAAA;;sBA2EI,YAAY;uBAAC,cAAc,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAGhE,YAAY;uBAAC,mBAAmB;;;MCrFxB,cAAc,CAAA;kIAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAAA,OAAA,EAAA,CAHb,gBAAgB,EAAE,iBAAiB,aACnC,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAElB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAHb,gBAAgB,CAAA,EAAA,CAAA,CAAA;;4FAGjB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;oBAC9C,OAAO,EAAE,CAAC,iBAAiB;AAC9B,iBAAA;;;ACPD;;AAEG;;;;"}
1
+ {"version":3,"file":"koobiq-components-title.mjs","sources":["../../../packages/components/title/title.directive.ts","../../../packages/components/title/title.module.ts","../../../packages/components/title/koobiq-components-title.ts"],"sourcesContent":["import { ContentObserver } from '@angular/cdk/observers';\nimport {\n AfterViewInit,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n QueryList,\n TemplateRef\n} from '@angular/core';\nimport {\n KBQ_TITLE_TEXT_REF,\n KBQ_WINDOW,\n kbqInjectNativeElement,\n KbqTitleTextRef,\n PopUpPlacements,\n PopUpTriggers\n} from '@koobiq/components/core';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { Subject, Subscription, throttleTime } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n/**\n * Shows a tooltip with the full text of the host element, but only when that text is truncated —\n * i.e. it overflows horizontally, or vertically when clamped to several lines. The tooltip opens on\n * hover and on keyboard focus, and hides on blur, mouse leave, or window resize.\n *\n * By default, the tooltip content is the trimmed `textContent` of the host. Provide explicit content\n * with `[kbq-title]=\"stringOrTemplateRef\"`. For nested markup, mark the measured container with the\n * `#kbqTitleContainer` template reference and the text element(s) with `#kbqTitleText`; several\n * `#kbqTitleText` elements are supported and the tooltip is shown when any of them overflows.\n *\n * Host components that provide `KBQ_TITLE_TEXT_REF` (e.g. `KbqOption`) supply the text and parent\n * elements automatically, so the directive works without explicit template references.\n */\n@Directive({\n selector: '[kbq-title]',\n host: {\n '(mouseenter)': 'handleElementEnter()',\n '(mouseleave)': 'hideTooltip()',\n '(window:resize)': 'resizeStream.next($event)'\n },\n exportAs: 'kbqTitle'\n})\nexport class KbqTitleDirective extends KbqTooltipTrigger implements AfterViewInit, OnDestroy {\n /** Optional host component that exposes the measured text/parent elements via `KBQ_TITLE_TEXT_REF`. */\n private componentInstance = inject<KbqTitleTextRef>(KBQ_TITLE_TEXT_REF, { host: true, optional: true });\n\n /** Host native element the directive is attached to. */\n private readonly nativeElement = kbqInjectNativeElement();\n\n /** SSR-safe window reference used for `getComputedStyle` reads. */\n private readonly window = inject(KBQ_WINDOW);\n\n /** Observes host content mutations to re-evaluate overflow and refresh the resolved tooltip content. */\n private contentObserver = inject(ContentObserver);\n\n /**\n * Optional explicit tooltip content. Accepts a `TemplateRef` (rendered as rich tooltip content) or a string.\n * When omitted (a bare `kbq-title` attribute resolves to an empty string), the directive falls back to the\n * trimmed `textContent` of the host (`viewValue`), preserving the default behavior.\n */\n readonly titleContent = input<TemplateRef<any> | string>('', { alias: 'kbq-title' });\n\n // todo need rename kbqTrigger in popover, tooltip and title. Here workaround for kbq-title and popover on one button\n set trigger(value: string) {\n super.trigger = value;\n }\n\n /**\n * The pop-up trigger. Always reports `PopUpTriggers.Hover`, so the title tooltip reacts to hover and\n * keyboard focus regardless of the assigned value. The setter is kept only as a no-op workaround so a\n * host that also uses a popover can assign a trigger without breaking `kbq-title`.\n */\n get trigger(): string {\n return PopUpTriggers.Hover;\n }\n\n /**\n * Whether the host content is clipped and therefore needs a tooltip. Returns `true` if any measured\n * text element overflows the parent — covering multiple `#kbqTitleText` elements, the sub-pixel\n * special case, and both horizontal and vertical overflow.\n */\n get isOverflown(): boolean {\n const children = this.childElements;\n\n /** Multiple text elements (e.g. filter-bar pipe with a name and a value): overflown if any of them overflows. */\n if (children.length > 1) {\n return children.some(\n (element) =>\n this.parent?.offsetWidth < element.scrollWidth || this.parent?.offsetHeight < element.scrollHeight\n );\n }\n\n /** For special cases where the difference is a fraction of a pixel */\n if (\n !this.isVerticalOverflown &&\n (this.child.scrollWidth === 0 || this.parent?.offsetWidth === this.child.scrollWidth)\n ) {\n if (this.hasOnlyText) {\n const wrapper = this.renderer.createElement('span');\n\n wrapper.innerText = this.child.innerText;\n this.parent.appendChild(wrapper);\n\n const result = this.isWidthOverflown(\n this.parent.getBoundingClientRect().width,\n wrapper.getBoundingClientRect().width\n );\n\n wrapper.remove();\n\n return result;\n }\n\n return this.isWidthOverflown(\n this.parent.getBoundingClientRect().width,\n this.child.getBoundingClientRect().width\n );\n }\n\n return this.isHorizontalOverflown || this.isVerticalOverflown;\n }\n\n /** Whether the text is clipped horizontally: the parent `offsetWidth` is smaller than the child `scrollWidth`. */\n get isHorizontalOverflown(): boolean {\n return this.parent?.offsetWidth < this.child.scrollWidth;\n }\n\n /** Whether the text is clipped vertically: the parent `offsetHeight` is smaller than the child `scrollHeight`. */\n get isVerticalOverflown(): boolean {\n return this.parent?.offsetHeight < this.child.scrollHeight;\n }\n\n /**\n * Compares measured widths, treating only *visible* clipping as overflow. With `text-overflow: ellipsis`\n * any positive difference counts (even a sub-pixel overflow shows `…`). With `text-overflow: clip` the\n * widths are rounded to whole CSS pixels first — mirroring the integer `offsetWidth`/`scrollWidth` path —\n * so an imperceptible sub-pixel clip is not treated as truncation.\n * @docs-private */\n private isWidthOverflown(parentWidth: number, childWidth: number): boolean {\n return this.hasEllipsis ? parentWidth < childWidth : Math.round(parentWidth) < Math.round(childWidth);\n }\n\n /** Trimmed `textContent` of the measured parent, used as the default tooltip content. */\n get viewValue(): string {\n return (this.parent?.textContent || '').trim();\n }\n\n /**\n * Measured container element. Resolved as the projected `#kbqTitleContainer`, otherwise the\n * `KBQ_TITLE_TEXT_REF` host's `parentTextElement`, otherwise the host element itself.\n * @docs-private */\n get parent(): HTMLElement {\n return (\n this.parentContainer?.nativeElement ||\n this.componentInstance?.parentTextElement?.nativeElement ||\n this.elementRef.nativeElement\n );\n }\n\n /** First effective text element used for overflow detection (the first entry of `childElements`).\n * @docs-private */\n get child(): HTMLElement {\n return this.childElements[0];\n }\n\n /** Whether the host element contains exactly one child node and that node is a text node. */\n get hasOnlyText(): boolean {\n return (\n this.nativeElement.childNodes.length === 1 && this.nativeElement.childNodes[0].nodeType === Node.TEXT_NODE\n );\n }\n\n /**\n * Whether the measured text truncates with an ellipsis on either the child text element or its\n * wrapping container. Only then is a sub-pixel overflow actually visible (the trailing glyph is\n * replaced by `…`); with the default `text-overflow: clip` a sub-pixel clip is imperceptible, so\n * it must not be reported as truncation. Both elements are checked because `text-overflow` is not\n * inherited and consumers place it differently: `KbqOption`/`KbqDropdownItem` style the measured\n * `child`, whereas `KbqTreeOption` styles the `parent` container that wraps the child.\n * @docs-private */\n private get hasEllipsis(): boolean {\n return this.elementHasEllipsis(this.child) || this.elementHasEllipsis(this.parent);\n }\n\n /** Whether the element's computed `text-overflow` renders an ellipsis.\n * @docs-private */\n private elementHasEllipsis(element: HTMLElement): boolean {\n return this.window.getComputedStyle(element).textOverflow.includes('ellipsis');\n }\n\n /**\n * Effective text elements used for overflow detection. Resolves to the projected `#kbqTitleText` elements,\n * otherwise falls back to the `KbqTitleTextRef` host's `textElement`, otherwise to the host element itself.\n * Always contains at least one element.\n * @docs-private */\n private get childElements(): HTMLElement[] {\n if (this.childContainer?.length) {\n return this.childContainer.map(({ nativeElement }) => nativeElement);\n }\n\n return [this.componentInstance?.textElement?.nativeElement ?? this.elementRef.nativeElement];\n }\n\n /** Resolved tooltip content: the explicit `titleContent` input when provided, otherwise the host text.\n * @docs-private */\n private get resolvedContent(): string | TemplateRef<any> {\n return this.titleContent() || this.viewValue;\n }\n\n /** Emits `window:resize` events; subscribed to re-evaluate overflow after the viewport changes.\n * @docs-private */\n readonly resizeStream = new Subject<Event>();\n\n /** Debounce/throttle interval (ms) applied to the resize and content-observer streams. */\n private readonly debounceInterval: number = 100;\n\n /** Subscription to `resizeStream`, torn down in `ngOnDestroy`. */\n private resizeSubscription = Subscription.EMPTY;\n /** Subscription to the content observer, torn down in `ngOnDestroy`. */\n private contentObserverSubscription = Subscription.EMPTY;\n /** Subscription to the focus monitor, torn down in `ngOnDestroy`. */\n private focusMonitorSubscription = Subscription.EMPTY;\n\n /** Projected text elements marked with the `#kbqTitleText` template reference. */\n @ContentChildren('kbqTitleText', { descendants: true })\n private childContainer: QueryList<ElementRef>;\n\n /** Projected container element marked with the `#kbqTitleContainer` template reference. */\n @ContentChild('kbqTitleContainer')\n private parentContainer: ElementRef;\n\n /**\n * Sets the initial tooltip content and wires the streams that toggle the tooltip's `disabled` state:\n * window resize and content mutations re-evaluate overflow, and keyboard focus opens the tooltip\n * while other focus origins hide it.\n */\n ngAfterViewInit() {\n this.content = this.resolvedContent;\n\n // Keep the title tooltip centered on the trigger: fall back only to center-aligned placements\n // (top/bottom center horizontally; left/right center vertically), never to edge-anchored corner\n // positions. Guarded so an explicit consumer `kbqPlacementPriority` or `kbqPlacement` is respected.\n if (!this.placementPriority && this.placement === PopUpPlacements.Top) {\n this.placementPriority = [\n PopUpPlacements.Top,\n PopUpPlacements.Bottom,\n PopUpPlacements.Right,\n PopUpPlacements.Left\n ];\n }\n\n this.resizeSubscription = this.resizeStream\n .pipe(debounceTime(this.debounceInterval))\n .subscribe(() => (this.disabled = !this.isOverflown));\n\n this.contentObserverSubscription = this.contentObserver\n .observe(this.parent)\n .pipe(throttleTime(this.debounceInterval))\n .subscribe(() => {\n this.disabled = !this.isOverflown;\n this.content = this.resolvedContent;\n });\n\n this.focusMonitorSubscription = this.focusMonitor\n .monitor(this.elementRef)\n .subscribe((origin) => (origin === 'keyboard' ? this.handleElementEnter() : this.hideTooltip()));\n }\n\n /** Unsubscribes from the resize, content-observer and focus-monitor streams and stops focus monitoring. */\n ngOnDestroy() {\n super.ngOnDestroy();\n\n this.resizeSubscription.unsubscribe();\n this.contentObserverSubscription.unsubscribe();\n this.focusMonitorSubscription.unsubscribe();\n this.focusMonitor.stopMonitoring(this.elementRef);\n }\n\n /** Enables the tooltip only when the content is overflown. Bound to `mouseenter` and keyboard focus.\n * @docs-private */\n handleElementEnter() {\n this.content = this.resolvedContent;\n this.disabled = !this.isOverflown;\n }\n\n /** Always disables (hides) the tooltip. Bound to `mouseleave` and non-keyboard focus changes.\n * @docs-private */\n hideTooltip() {\n this.disabled = true;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqToolTipModule } from '@koobiq/components/tooltip';\nimport { KbqTitleDirective } from './title.directive';\n\n@NgModule({\n imports: [KbqToolTipModule, KbqTitleDirective],\n exports: [KbqTitleDirective]\n})\nexport class KbqTitleModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -141,7 +141,7 @@ class KbqToastComponent {
141
141
  this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);
142
142
  }
143
143
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
144
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: KbqToastComponent, isStandalone: true, selector: "kbq-toast", host: { listeners: { "@state.start": "onAnimation($event)", "@state.done": "onAnimation($event)", "mouseenter": "hovered.next(true)", "mouseleave": "hovered.next(false)", "keydown.esc": "close()" }, properties: { "class": "toastStyle", "class.kbq-toast_dismissible": "data.closeButton", "@state": "animationState" }, classAttribute: "kbq-toast" }, hostDirectives: [{ directive: i1.KbqReadStateDirective }], ngImport: i0, template: "@if (data.icon) {\n <div class=\"kbq-toast__icon-container layout-row layout-align-start-start\">\n @if (data.icon === true) {\n @switch (data.style) {\n @case ('contrast') {\n <i\n kbq-icon=\"kbq-circle-info_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('success') {\n <i\n kbq-icon=\"kbq-circle-check_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('warning') {\n <i\n kbq-icon=\"kbq-triangle-exclamation_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('error') {\n <i\n kbq-icon=\"kbq-triangle-exclamation_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n }\n }\n @if (isTemplateRef(data.icon)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.icon)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n </div>\n}\n\n<div class=\"kbq-toast__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-toast__title\"\n [class.kbq-toast__title_only-text]=\"!isTemplateRef(data.title)\"\n [class.kbq-toast__title_with-content]=\"data.caption || data.content\"\n >\n @if (isTemplateRef(data.title)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.title)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <p>{{ data.title }}</p>\n }\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-toast__text]=\"data.title\"\n [class.kbq-toast__text_only-text]=\"!isTemplateRef(data.caption)\"\n [class.kbq-toast__title]=\"!data.title\"\n >\n @if (isTemplateRef(data.caption)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.caption)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.caption }}}\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-toast__content\" [class.kbq-toast__content_only-text]=\"!isTemplateRef(data.content)\">\n @if (isTemplateRef(data.content)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.content)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.content }}}\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-toast__actions\">\n @if (isTemplateRef(data.actions)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.actions)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n@if (data.closeButton) {\n <div>\n @if (data.closeButton === true) {\n <i kbq-icon-button=\"kbq-xmark-s_16\" kbq-toast-close-button (click)=\"close()\"></i>\n }\n @if (isTemplateRef(data.closeButton)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.closeButton)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n </div>\n}\n", styles: [".kbq-toast{display:flex;box-sizing:border-box;width:var(--kbq-toast-size-container-width);height:auto;border-radius:var(--kbq-toast-size-container-border-radius);padding-left:var(--kbq-toast-size-container-padding-left);padding-right:var(--kbq-toast-size-container-padding-right)}.kbq-toast__icon-container{flex-shrink:0;width:var(--kbq-toast-size-icon-width);max-width:var(--kbq-toast-size-icon-width);height:var(--kbq-toast-size-icon-height);max-height:var(--kbq-toast-size-icon-height);border-radius:var(--kbq-toast-size-container-border-radius);margin-right:var(--kbq-toast-size-icon-margin-right);padding-top:calc(var(--kbq-toast-size-content-padding-top) + (var(--kbq-typography-text-normal-line-height) - var(--kbq-toast-size-icon-height)) / 2)}.kbq-toast__container{display:flex;flex-direction:column;flex:1;padding-top:var(--kbq-toast-size-content-padding-top);padding-right:var(--kbq-size-s);padding-bottom:var(--kbq-toast-size-content-padding-bottom);overflow:hidden}.kbq-toast__title{overflow:hidden;text-overflow:ellipsis}.kbq-toast__title>p{margin:0;overflow:hidden;text-overflow:ellipsis}.kbq-toast__title.kbq-toast__title_only-text{white-space:pre-wrap}.kbq-toast__title_with-content{padding-bottom:var(--kbq-toast-size-caption-padding-bottom)}.kbq-toast__text{display:flex;flex:1;align-items:center}.kbq-toast__text.kbq-toast__text_only-text{white-space:pre-wrap}.kbq-toast__content{display:flex;flex-direction:column}.kbq-toast__content.kbq-toast__content_only-text{white-space:pre-wrap}.kbq-toast__actions{display:flex;padding-top:var(--kbq-toast-size-button-stack-padding-top);gap:var(--kbq-toast-size-button-stack-content-gap-horizontal)}.kbq-toast__close-button{margin-top:calc(var(--kbq-toast-size-content-padding-top) - (var(--kbq-icon-button-size-small-vertical-padding) * 2 + 16px - var(--kbq-typography-text-normal-line-height)) / 2);margin-right:var(--kbq-toast-size-close-button-margin-right)}.kbq-toast__close-button.kbq-icon-button{--kbq-icon-button-size-normal-horizontal-padding: 4px;--kbq-icon-button-size-normal-vertical-padding: 4px}.kbq-toast.kbq-toast_contrast{box-shadow:var(--kbq-toast-contrast-container-shadow);background:var(--kbq-toast-contrast-container-background)}.kbq-toast.kbq-toast_contrast .kbq-toast__title{color:var(--kbq-toast-contrast-container-title)}.kbq-toast.kbq-toast_contrast .kbq-toast__text{color:var(--kbq-toast-contrast-container-text)}.kbq-toast.kbq-toast_success{box-shadow:var(--kbq-toast-success-container-shadow);background:var(--kbq-toast-success-container-background)}.kbq-toast.kbq-toast_success .kbq-toast__title{color:var(--kbq-toast-success-container-title)}.kbq-toast.kbq-toast_success .kbq-toast__text{color:var(--kbq-toast-success-container-text)}.kbq-toast.kbq-toast_warning{box-shadow:var(--kbq-toast-warning-container-shadow);background:var(--kbq-toast-warning-container-background)}.kbq-toast.kbq-toast_warning .kbq-toast__title{color:var(--kbq-toast-warning-container-title)}.kbq-toast.kbq-toast_warning .kbq-toast__text{color:var(--kbq-toast-warning-container-text)}.kbq-toast.kbq-toast_error{box-shadow:var(--kbq-toast-error-container-shadow);background:var(--kbq-toast-error-container-background)}.kbq-toast.kbq-toast_error .kbq-toast__title{color:var(--kbq-toast-error-container-title)}.kbq-toast.kbq-toast_error .kbq-toast__text{color:var(--kbq-toast-error-container-text)}.kbq-toast,.kbq-toast__title{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ":where(.kbq-toast-container){--kbq-toast-stack-size-margin-top: var(--kbq-size-m);--kbq-toast-stack-size-margin-right: var(--kbq-size-m);--kbq-toast-stack-size-margin-vertical: var(--kbq-size-m);--kbq-toast-stack-size-margin-horizontal: var(--kbq-size-m);--kbq-toast-stack-size-gap: var(--kbq-size-s);--kbq-toast-size-container-width: 360px;--kbq-toast-size-container-border-radius: var(--kbq-size-s);--kbq-toast-size-container-padding-left: var(--kbq-size-m);--kbq-toast-size-container-padding-right: var(--kbq-size-s);--kbq-toast-size-content-padding-top: var(--kbq-size-l);--kbq-toast-size-content-padding-bottom: var(--kbq-size-l);--kbq-toast-size-caption-padding-bottom: var(--kbq-size-xxs);--kbq-toast-size-icon-width: var(--kbq-size-l);--kbq-toast-size-icon-height: var(--kbq-size-l);--kbq-toast-size-icon-margin-right: var(--kbq-size-s);--kbq-toast-size-icon-border-radius: 50%;--kbq-toast-size-close-button-margin-top: var(--kbq-size-m);--kbq-toast-size-close-button-margin-right: var(--kbq-size-xxs);--kbq-toast-size-button-stack-padding-top: var(--kbq-size-s);--kbq-toast-size-button-stack-content-gap-horizontal: var(--kbq-size-m);--kbq-toast-contrast-container-background: var(--kbq-background-card);--kbq-toast-contrast-container-title: var(--kbq-foreground-contrast);--kbq-toast-contrast-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-contrast-container-shadow: var(--kbq-shadow-popup);--kbq-toast-error-container-background: var(--kbq-background-card);--kbq-toast-error-container-title: var(--kbq-foreground-contrast);--kbq-toast-error-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-error-container-shadow: var(--kbq-shadow-popup);--kbq-toast-warning-container-background: var(--kbq-background-card);--kbq-toast-warning-container-title: var(--kbq-foreground-contrast);--kbq-toast-warning-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-warning-container-shadow: var(--kbq-shadow-popup);--kbq-toast-success-container-background: var(--kbq-background-card);--kbq-toast-success-container-title: var(--kbq-foreground-contrast);--kbq-toast-success-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-success-container-shadow: var(--kbq-shadow-popup)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i2.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "component", type: i2.KbqIconButton, selector: "[kbq-icon-button]", inputs: ["small", "kbq-icon-button", "tabindex", "disabled"] }, { kind: "ngmodule", type: KbqTitleModule }, { kind: "directive", type: i3.KbqTitleDirective, selector: "[kbq-title]", exportAs: ["kbqTitle"] }, { kind: "directive", type: KbqToastCloseButton, selector: "[kbq-toast-close-button]" }], animations: [kbqToastAnimations.toastState], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
144
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: KbqToastComponent, isStandalone: true, selector: "kbq-toast", host: { listeners: { "@state.start": "onAnimation($event)", "@state.done": "onAnimation($event)", "mouseenter": "hovered.next(true)", "mouseleave": "hovered.next(false)", "keydown.esc": "close()" }, properties: { "class": "toastStyle", "class.kbq-toast_dismissible": "data.closeButton", "@state": "animationState" }, classAttribute: "kbq-toast" }, hostDirectives: [{ directive: i1.KbqReadStateDirective }], ngImport: i0, template: "@if (data.icon) {\n <div class=\"kbq-toast__icon-container layout-row layout-align-start-start\">\n @if (data.icon === true) {\n @switch (data.style) {\n @case ('contrast') {\n <i\n kbq-icon=\"kbq-circle-info_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('success') {\n <i\n kbq-icon=\"kbq-circle-check_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('warning') {\n <i\n kbq-icon=\"kbq-triangle-exclamation_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('error') {\n <i\n kbq-icon=\"kbq-triangle-exclamation_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n }\n }\n @if (isTemplateRef(data.icon)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.icon)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n </div>\n}\n\n<div class=\"kbq-toast__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-toast__title\"\n [class.kbq-toast__title_only-text]=\"!isTemplateRef(data.title)\"\n [class.kbq-toast__title_with-content]=\"data.caption || data.content\"\n >\n @if (isTemplateRef(data.title)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.title)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <p>{{ data.title }}</p>\n }\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-toast__text]=\"data.title\"\n [class.kbq-toast__text_only-text]=\"!isTemplateRef(data.caption)\"\n [class.kbq-toast__title]=\"!data.title\"\n >\n @if (isTemplateRef(data.caption)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.caption)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.caption }}}\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-toast__content\" [class.kbq-toast__content_only-text]=\"!isTemplateRef(data.content)\">\n @if (isTemplateRef(data.content)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.content)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.content }}}\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-toast__actions\">\n @if (isTemplateRef(data.actions)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.actions)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n@if (data.closeButton) {\n <div>\n @if (data.closeButton === true) {\n <i kbq-icon-button=\"kbq-xmark-s_16\" kbq-toast-close-button (click)=\"close()\"></i>\n }\n @if (isTemplateRef(data.closeButton)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.closeButton)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n </div>\n}\n", styles: [".kbq-toast{display:flex;box-sizing:border-box;width:var(--kbq-toast-size-container-width);height:auto;border-radius:var(--kbq-toast-size-container-border-radius);padding-left:var(--kbq-toast-size-container-padding-left);padding-right:var(--kbq-toast-size-container-padding-right)}.kbq-toast__icon-container{flex-shrink:0;width:var(--kbq-toast-size-icon-width);max-width:var(--kbq-toast-size-icon-width);height:var(--kbq-toast-size-icon-height);max-height:var(--kbq-toast-size-icon-height);border-radius:var(--kbq-toast-size-container-border-radius);margin-right:var(--kbq-toast-size-icon-margin-right);padding-top:calc(var(--kbq-toast-size-content-padding-top) + (var(--kbq-typography-text-normal-line-height) - var(--kbq-toast-size-icon-height)) / 2)}.kbq-toast__container{display:flex;flex-direction:column;flex:1;padding-top:var(--kbq-toast-size-content-padding-top);padding-right:var(--kbq-size-s);padding-bottom:var(--kbq-toast-size-content-padding-bottom);overflow:hidden}.kbq-toast__title{overflow:hidden;text-overflow:ellipsis}.kbq-toast__title>p{margin:0;overflow:hidden;text-overflow:ellipsis}.kbq-toast__title.kbq-toast__title_only-text{white-space:pre-wrap}.kbq-toast__title_with-content{padding-bottom:var(--kbq-toast-size-caption-padding-bottom)}.kbq-toast__text{display:flex;flex:1;align-items:center}.kbq-toast__text.kbq-toast__text_only-text{white-space:pre-wrap}.kbq-toast__content{display:flex;flex-direction:column}.kbq-toast__content.kbq-toast__content_only-text{white-space:pre-wrap}.kbq-toast__actions{display:flex;padding-top:var(--kbq-toast-size-button-stack-padding-top);gap:var(--kbq-toast-size-button-stack-content-gap-horizontal)}.kbq-toast__close-button{margin-top:calc(var(--kbq-toast-size-content-padding-top) - (var(--kbq-icon-button-size-small-vertical-padding) * 2 + 16px - var(--kbq-typography-text-normal-line-height)) / 2);margin-right:var(--kbq-toast-size-close-button-margin-right)}.kbq-toast__close-button.kbq-icon-button{--kbq-icon-button-size-normal-horizontal-padding: 4px;--kbq-icon-button-size-normal-vertical-padding: 4px}.kbq-toast.kbq-toast_contrast{box-shadow:var(--kbq-toast-contrast-container-shadow);background:var(--kbq-toast-contrast-container-background)}.kbq-toast.kbq-toast_contrast .kbq-toast__title{color:var(--kbq-toast-contrast-container-title)}.kbq-toast.kbq-toast_contrast .kbq-toast__text{color:var(--kbq-toast-contrast-container-text)}.kbq-toast.kbq-toast_success{box-shadow:var(--kbq-toast-success-container-shadow);background:var(--kbq-toast-success-container-background)}.kbq-toast.kbq-toast_success .kbq-toast__title{color:var(--kbq-toast-success-container-title)}.kbq-toast.kbq-toast_success .kbq-toast__text{color:var(--kbq-toast-success-container-text)}.kbq-toast.kbq-toast_warning{box-shadow:var(--kbq-toast-warning-container-shadow);background:var(--kbq-toast-warning-container-background)}.kbq-toast.kbq-toast_warning .kbq-toast__title{color:var(--kbq-toast-warning-container-title)}.kbq-toast.kbq-toast_warning .kbq-toast__text{color:var(--kbq-toast-warning-container-text)}.kbq-toast.kbq-toast_error{box-shadow:var(--kbq-toast-error-container-shadow);background:var(--kbq-toast-error-container-background)}.kbq-toast.kbq-toast_error .kbq-toast__title{color:var(--kbq-toast-error-container-title)}.kbq-toast.kbq-toast_error .kbq-toast__text{color:var(--kbq-toast-error-container-text)}.kbq-toast,.kbq-toast__title{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ":where(.kbq-toast-container){--kbq-toast-stack-size-margin-top: var(--kbq-size-m);--kbq-toast-stack-size-margin-right: var(--kbq-size-m);--kbq-toast-stack-size-margin-vertical: var(--kbq-size-m);--kbq-toast-stack-size-margin-horizontal: var(--kbq-size-m);--kbq-toast-stack-size-gap: var(--kbq-size-s);--kbq-toast-size-container-width: 360px;--kbq-toast-size-container-border-radius: var(--kbq-size-s);--kbq-toast-size-container-padding-left: var(--kbq-size-m);--kbq-toast-size-container-padding-right: var(--kbq-size-s);--kbq-toast-size-content-padding-top: var(--kbq-size-l);--kbq-toast-size-content-padding-bottom: var(--kbq-size-l);--kbq-toast-size-caption-padding-bottom: var(--kbq-size-xxs);--kbq-toast-size-icon-width: var(--kbq-size-l);--kbq-toast-size-icon-height: var(--kbq-size-l);--kbq-toast-size-icon-margin-right: var(--kbq-size-s);--kbq-toast-size-icon-border-radius: 50%;--kbq-toast-size-close-button-margin-top: var(--kbq-size-m);--kbq-toast-size-close-button-margin-right: var(--kbq-size-xxs);--kbq-toast-size-button-stack-padding-top: var(--kbq-size-s);--kbq-toast-size-button-stack-content-gap-horizontal: var(--kbq-size-m);--kbq-toast-contrast-container-background: var(--kbq-background-card);--kbq-toast-contrast-container-title: var(--kbq-foreground-contrast);--kbq-toast-contrast-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-contrast-container-shadow: var(--kbq-shadow-popup);--kbq-toast-error-container-background: var(--kbq-background-card);--kbq-toast-error-container-title: var(--kbq-foreground-contrast);--kbq-toast-error-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-error-container-shadow: var(--kbq-shadow-popup);--kbq-toast-warning-container-background: var(--kbq-background-card);--kbq-toast-warning-container-title: var(--kbq-foreground-contrast);--kbq-toast-warning-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-warning-container-shadow: var(--kbq-shadow-popup);--kbq-toast-success-container-background: var(--kbq-background-card);--kbq-toast-success-container-title: var(--kbq-foreground-contrast);--kbq-toast-success-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-success-container-shadow: var(--kbq-shadow-popup)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i2.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "component", type: i2.KbqIconButton, selector: "[kbq-icon-button]", inputs: ["small", "kbq-icon-button", "tabindex", "disabled"] }, { kind: "ngmodule", type: KbqTitleModule }, { kind: "directive", type: i3.KbqTitleDirective, selector: "[kbq-title]", inputs: ["kbq-title"], exportAs: ["kbqTitle"] }, { kind: "directive", type: KbqToastCloseButton, selector: "[kbq-toast-close-button]" }], animations: [kbqToastAnimations.toastState], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
145
145
  }
146
146
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqToastComponent, decorators: [{
147
147
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-toast.mjs","sources":["../../../packages/components/toast/toast-animations.ts","../../../packages/components/toast/toast.type.ts","../../../packages/components/toast/toast.component.ts","../../../packages/components/toast/toast.component.html","../../../packages/components/toast/toast.service.ts","../../../packages/components/toast/toast-container.component.ts","../../../packages/components/toast/toast.module.ts","../../../packages/components/toast/koobiq-components-toast.ts"],"sourcesContent":["import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations';\n\nexport const kbqToastAnimations: {\n readonly toastState: AnimationTriggerMetadata;\n} = {\n toastState: trigger('state', [\n state('void', style({ transform: 'translateX(100%)', opacity: 0 })),\n transition('* => visible', animate('150ms ease-out', style({ transform: 'translateX(0%)', opacity: 1 }))),\n transition(\n '* => void',\n animate('300ms ease-in', style({ transform: 'translateX(50%)', opacity: 0, height: 0 }))\n )\n ])\n};\n\nexport const toastState = kbqToastAnimations.toastState;\n","import { InjectionToken, Provider, TemplateRef } from '@angular/core';\n\nexport enum KbqToastStyle {\n Contrast = 'contrast',\n Success = 'success',\n Warning = 'warning',\n Error = 'error'\n}\n\nexport enum KbqToastPosition {\n TOP_RIGHT = 'top-right',\n TOP_LEFT = 'top-left',\n TOP_CENTER = 'top-center',\n BOTTOM_RIGHT = 'bottom-right',\n BOTTOM_LEFT = 'bottom-left',\n BOTTOM_CENTER = 'bottom-center',\n CENTER = 'center'\n}\n\nexport class KbqToastData {\n id?: string;\n title?: string | TemplateRef<any>;\n style?: KbqToastStyle | string;\n\n icon?: TemplateRef<any> | boolean;\n iconClass?: string;\n caption?: string | TemplateRef<any>;\n\n content?: string | TemplateRef<any>;\n actions?: TemplateRef<any>;\n\n closeButton?: TemplateRef<any> | boolean;\n}\n\nexport interface KbqToastConfig {\n position: KbqToastPosition;\n duration: number;\n delay: number;\n onTop: boolean;\n /** Custom indentation for positioning the toast stack overlay when using `GlobalPositionStrategy` */\n indent: {\n /** Vertical spacing from the top or bottom of the screen. */\n vertical: number;\n\n /** Horizontal spacing from the left or right of the screen. */\n horizontal: number;\n };\n}\n\nexport const defaultToastConfig: KbqToastConfig = {\n position: KbqToastPosition.TOP_RIGHT,\n duration: 5000,\n delay: 2000,\n onTop: false,\n indent: {\n vertical: 0,\n horizontal: 0\n }\n};\n\nexport const KBQ_TOAST_CONFIG = new InjectionToken<KbqToastConfig>('kbq-toast-config', {\n factory: () => defaultToastConfig\n});\n\n/** Utility provider for `KBQ_TOAST_CONFIG`. */\nexport const kbqToastConfigurationProvider = (configuration: Partial<KbqToastConfig>): Provider => ({\n provide: KBQ_TOAST_CONFIG,\n useValue: { ...defaultToastConfig, ...configuration }\n});\n","import { AnimationEvent } from '@angular/animations';\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n OnDestroy,\n TemplateRef,\n ViewEncapsulation,\n inject\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KbqReadStateDirective, ThemePalette } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { BehaviorSubject, merge } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { kbqToastAnimations } from './toast-animations';\nimport { KbqToastService } from './toast.service';\nimport { KbqToastData, KbqToastStyle } from './toast.type';\n\n@Directive({\n selector: '[kbq-toast-close-button]',\n host: {\n class: 'kbq-toast__close-button'\n }\n})\nexport class KbqToastCloseButton {}\n\nlet id = 0;\n\n@Component({\n selector: 'kbq-toast',\n imports: [\n NgTemplateOutlet,\n KbqIconModule,\n KbqTitleModule,\n KbqToastCloseButton\n ],\n templateUrl: './toast.component.html',\n styleUrls: ['./toast.component.scss', './toast-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-toast',\n '[class]': 'toastStyle',\n '[class.kbq-toast_dismissible]': 'data.closeButton',\n '[@state]': 'animationState',\n '(@state.start)': 'onAnimation($event)',\n '(@state.done)': 'onAnimation($event)',\n '(mouseenter)': 'hovered.next(true)',\n '(mouseleave)': 'hovered.next(false)',\n '(keydown.esc)': 'close()'\n },\n hostDirectives: [KbqReadStateDirective],\n animations: [kbqToastAnimations.toastState]\n})\nexport class KbqToastComponent implements OnDestroy {\n readonly data = inject(KbqToastData);\n readonly service = inject(KbqToastService);\n elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private focusMonitor = inject(FocusMonitor);\n\n protected readonly readStateDirective = inject(KbqReadStateDirective, { host: true });\n\n themePalette = ThemePalette;\n\n animationState = 'void';\n\n readonly hovered = new BehaviorSubject<boolean>(false);\n readonly focused = new BehaviorSubject<boolean>(false);\n\n id = id++;\n ttl;\n delay;\n\n $implicit;\n\n get toastStyle() {\n return {\n [`kbq-toast_${this.data.style}`]: true\n };\n }\n\n get isFocusedOrHovered(): boolean {\n return this.hovered.getValue() || this.focused.getValue();\n }\n\n constructor() {\n this.$implicit = this;\n\n this.data.style = this.data.style || KbqToastStyle.Contrast;\n this.data.icon = this.data.icon !== undefined ? this.data.icon : true;\n this.data.iconClass = this.data.iconClass || undefined;\n this.data.closeButton = this.data.closeButton !== undefined ? this.data.closeButton : true;\n\n this.animationState = 'visible';\n\n this.runFocusMonitor();\n\n this.hovered.subscribe(this.service.hovered);\n this.focused.subscribe(this.service.focused);\n\n merge(this.hovered, this.focused)\n .pipe(\n filter((value) => value),\n takeUntilDestroyed()\n )\n .subscribe(() => {\n if (this.ttl === 0) {\n return;\n }\n\n this.ttl = this.ttl < this.delay ? this.delay : this.ttl;\n });\n\n this.readStateDirective.read\n .pipe(\n filter((value) => value),\n takeUntilDestroyed()\n )\n .subscribe(() => this.service.read.next(this.data));\n }\n\n ngOnDestroy() {\n this.stopFocusMonitor();\n\n this.hovered.next(false);\n this.focused.next(false);\n }\n\n close(): void {\n this.service.read.next(this.data);\n this.service.hide(this.id);\n }\n\n isTemplateRef(value): boolean {\n return value instanceof TemplateRef;\n }\n\n onAnimation($event: AnimationEvent) {\n this.service.animation.next($event);\n }\n\n private runFocusMonitor() {\n this.focusMonitor\n .monitor(this.elementRef.nativeElement, true)\n .subscribe((origin: FocusOrigin) => this.focused.next(!!origin));\n }\n\n private stopFocusMonitor() {\n this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);\n }\n}\n","@if (data.icon) {\n <div class=\"kbq-toast__icon-container layout-row layout-align-start-start\">\n @if (data.icon === true) {\n @switch (data.style) {\n @case ('contrast') {\n <i\n kbq-icon=\"kbq-circle-info_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('success') {\n <i\n kbq-icon=\"kbq-circle-check_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('warning') {\n <i\n kbq-icon=\"kbq-triangle-exclamation_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('error') {\n <i\n kbq-icon=\"kbq-triangle-exclamation_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n }\n }\n @if (isTemplateRef(data.icon)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.icon)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n </div>\n}\n\n<div class=\"kbq-toast__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-toast__title\"\n [class.kbq-toast__title_only-text]=\"!isTemplateRef(data.title)\"\n [class.kbq-toast__title_with-content]=\"data.caption || data.content\"\n >\n @if (isTemplateRef(data.title)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.title)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <p>{{ data.title }}</p>\n }\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-toast__text]=\"data.title\"\n [class.kbq-toast__text_only-text]=\"!isTemplateRef(data.caption)\"\n [class.kbq-toast__title]=\"!data.title\"\n >\n @if (isTemplateRef(data.caption)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.caption)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.caption }}}\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-toast__content\" [class.kbq-toast__content_only-text]=\"!isTemplateRef(data.content)\">\n @if (isTemplateRef(data.content)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.content)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.content }}}\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-toast__actions\">\n @if (isTemplateRef(data.actions)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.actions)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n@if (data.closeButton) {\n <div>\n @if (data.closeButton === true) {\n <i kbq-icon-button=\"kbq-xmark-s_16\" kbq-toast-close-button (click)=\"close()\"></i>\n }\n @if (isTemplateRef(data.closeButton)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.closeButton)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n </div>\n}\n","import { AnimationEvent } from '@angular/animations';\nimport { GlobalPositionStrategy, Overlay, OverlayContainer, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n ComponentRef,\n EmbeddedViewRef,\n Injectable,\n InjectionToken,\n Injector,\n NgZone,\n OnDestroy,\n TemplateRef,\n inject\n} from '@angular/core';\nimport { BehaviorSubject, Subscription, filter, shareReplay, timer } from 'rxjs';\nimport { KbqToastContainerComponent } from './toast-container.component';\nimport { KbqToastComponent } from './toast.component';\nimport { KBQ_TOAST_CONFIG, KbqToastConfig, KbqToastData, KbqToastPosition } from './toast.type';\n\nexport const KBQ_TOAST_FACTORY = new InjectionToken('KBQ_TOAST_FACTORY', {\n factory: () => KbqToastComponent\n});\n\nconst CHECK_INTERVAL = 500;\n\nlet templateId = 0;\n\n/** Generic `T` is a type hint only; the runtime component comes from `KBQ_TOAST_FACTORY`. */\n@Injectable({ providedIn: 'root' })\nexport class KbqToastService<T extends KbqToastComponent = KbqToastComponent> implements OnDestroy {\n private overlay = inject(Overlay);\n private injector = inject(Injector);\n private overlayContainer = inject(OverlayContainer);\n private ngZone = inject(NgZone);\n private toastFactory = inject(KBQ_TOAST_FACTORY);\n private toastConfig = inject<KbqToastConfig>(KBQ_TOAST_CONFIG, { optional: true })!;\n\n get toasts(): ComponentRef<T>[] {\n return Object.values(this.toastsDict).filter((item) => !item.hostView.destroyed);\n }\n\n get templates(): EmbeddedViewRef<T>[] {\n return Object.values(this.templatesDict);\n }\n\n readonly read = new BehaviorSubject<KbqToastData | null>(null);\n readonly hovered = new BehaviorSubject<boolean>(false);\n readonly focused = new BehaviorSubject<boolean>(false);\n readonly animation = new BehaviorSubject<AnimationEvent | null>(null);\n\n timer = timer(CHECK_INTERVAL, CHECK_INTERVAL).pipe(\n filter(() => this.toasts.length > 0 && !this.hovered.getValue() && !this.focused.getValue()),\n // eslint-disable-next-line rxjs-x/no-ignored-replay-buffer\n shareReplay()\n );\n\n private containerInstance?: KbqToastContainerComponent;\n private overlayRef?: OverlayRef;\n private portal?: ComponentPortal<KbqToastContainerComponent>;\n private timerSubscription: Subscription;\n private currentPosition?: KbqToastPosition;\n\n private toastsDict: { [id: number]: ComponentRef<T> } = {};\n private templatesDict: { [id: number]: EmbeddedViewRef<T> } = {};\n\n constructor() {\n this.ngZone.runOutsideAngular(() => {\n this.timerSubscription = this.timer.subscribe(this.processToasts);\n });\n }\n\n ngOnDestroy(): void {\n this.timerSubscription.unsubscribe();\n this.overlayRef?.dispose();\n this.overlayRef = undefined;\n this.containerInstance = undefined;\n this.portal = undefined;\n this.currentPosition = undefined;\n this.toastsDict = {};\n this.templatesDict = {};\n }\n\n show(\n data: KbqToastData,\n duration: number = this.toastConfig.duration,\n onTop: boolean = this.toastConfig.onTop\n ): { ref: ComponentRef<T>; id: number } {\n const container = this.prepareContainer();\n const componentRef = container.createToast<T>(data, this.toastFactory, onTop);\n\n this.toastsDict[componentRef.instance.id] = componentRef;\n\n componentRef.instance.ttl = duration;\n componentRef.instance.delay = this.toastConfig.delay;\n\n return { ref: componentRef, id: componentRef.instance.id };\n }\n\n showTemplate(\n data: KbqToastData,\n template: TemplateRef<any>,\n duration: number = this.toastConfig.duration,\n onTop: boolean = this.toastConfig.onTop\n ): { ref: EmbeddedViewRef<T>; id: number } {\n const container = this.prepareContainer();\n const viewRef = container.createTemplate<T>(data, template, onTop);\n const id = templateId++;\n\n this.templatesDict[id] = viewRef;\n this.addRemoveTimer(id, duration);\n\n return { ref: viewRef, id };\n }\n\n hide(id: number) {\n const componentRef = this.toastsDict[id];\n\n if (!componentRef) {\n return;\n }\n\n this.containerInstance?.remove(componentRef.hostView);\n\n delete this.toastsDict[id];\n\n this.detachOverlay();\n }\n\n hideTemplate(id: number) {\n const viewRef = this.templatesDict[id];\n\n if (!viewRef) {\n return;\n }\n\n this.containerInstance?.remove(viewRef);\n\n delete this.templatesDict[id];\n\n this.detachOverlay();\n }\n\n private detachOverlay() {\n if (this.toasts.length !== 0 || this.templates.length !== 0) {\n return;\n }\n\n this.overlayRef?.detach();\n }\n\n private processToasts = () => {\n for (const toast of this.toasts.filter((item) => item.instance.ttl > 0)) {\n toast.instance.ttl -= CHECK_INTERVAL;\n\n if (toast.instance.ttl <= 0) {\n this.ngZone.run(() => {\n this.hide(toast.instance.id);\n\n this.updateTTLAfterDelete();\n });\n\n break;\n }\n }\n };\n\n private updateTTLAfterDelete() {\n this.toasts\n .filter((item) => item.instance.ttl > 0)\n .forEach((item) => (item.instance.ttl = this.toastConfig.delay));\n }\n\n private addRemoveTimer(id: number, duration: number) {\n setTimeout(() => this.hideTemplate(id), duration);\n }\n\n private prepareContainer(): KbqToastContainerComponent {\n const overlayRef = this.createOverlay();\n const portal = this.portal || new ComponentPortal(KbqToastContainerComponent, null, this.injector);\n\n this.portal = portal;\n\n if (!overlayRef.hasAttached()) {\n this.containerInstance = overlayRef.attach(portal).instance;\n this.containerInstance\n .getElementRef()\n .nativeElement.classList.add(`kbq-toast-container-${this.toastConfig.position}`);\n }\n\n this.toTop(overlayRef);\n\n return this.containerInstance!;\n }\n\n private toTop(overlayRef: OverlayRef) {\n const overlays = this.overlayContainer.getContainerElement().childNodes;\n\n if (overlays.length > 1) {\n overlays[overlays.length - 1].after(overlayRef.hostElement);\n }\n }\n\n private createOverlay(): OverlayRef {\n const expectedPosition = this.toastConfig.position;\n\n if (this.overlayRef && this.currentPosition === expectedPosition) {\n return this.overlayRef;\n }\n\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.containerInstance = undefined;\n this.portal = undefined;\n }\n\n const positionStrategy = this.getPositionStrategy(expectedPosition);\n const overlayRef = this.overlay.create({ positionStrategy });\n\n overlayRef.hostElement.classList.add('kbq-toast-overlay');\n\n this.overlayRef = overlayRef;\n this.currentPosition = expectedPosition;\n\n return overlayRef;\n }\n\n private getPositionStrategy(position?: KbqToastPosition): GlobalPositionStrategy {\n switch (position) {\n case KbqToastPosition.CENTER:\n return this.getCenter();\n case KbqToastPosition.BOTTOM_CENTER:\n return this.getBottomCenter();\n case KbqToastPosition.BOTTOM_LEFT:\n return this.getBottomLeft();\n case KbqToastPosition.BOTTOM_RIGHT:\n return this.getBottomRight();\n case KbqToastPosition.TOP_CENTER:\n return this.getTopCenter();\n case KbqToastPosition.TOP_LEFT:\n return this.getTopLeft();\n case KbqToastPosition.TOP_RIGHT:\n return this.getTopRight();\n default:\n return this.getTopCenter();\n }\n }\n\n private getTopCenter(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition().top(`${this.toastConfig.indent.vertical}px`).centerHorizontally();\n }\n\n private getTopLeft(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .top(`${this.toastConfig.indent.vertical}px`)\n .left(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getTopRight(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .top(`${this.toastConfig.indent.vertical}px`)\n .right(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getBottomCenter(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition().bottom(`${this.toastConfig.indent.vertical}px`).centerHorizontally();\n }\n\n private getBottomLeft(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .bottom(`${this.toastConfig.indent.vertical}px`)\n .left(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getBottomRight(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .bottom(`${this.toastConfig.indent.vertical}px`)\n .right(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getCenter(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition().centerVertically().centerHorizontally();\n }\n\n private getGlobalOverlayPosition(): GlobalPositionStrategy {\n return this.overlay.position().global();\n }\n}\n","import { CdkScrollable, ScrollDispatcher } from '@angular/cdk/overlay';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n Injector,\n NgZone,\n TemplateRef,\n ViewContainerRef,\n ViewEncapsulation,\n ViewRef,\n inject,\n viewChild\n} from '@angular/core';\nimport { KbqToastService } from './toast.service';\nimport { KbqToastData } from './toast.type';\n\n@Component({\n selector: 'kbq-toast-container',\n template: '<ng-container #container />',\n styleUrls: ['./toast-container.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-toast-container'\n }\n})\nexport class KbqToastContainerComponent extends CdkScrollable {\n private injector = inject(Injector);\n private changeDetectorRef = inject(ChangeDetectorRef);\n readonly service = inject(KbqToastService);\n\n readonly viewContainer = viewChild.required('container', { read: ViewContainerRef });\n\n constructor() {\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n const scrollDispatcher = inject(ScrollDispatcher);\n const ngZone = inject(NgZone);\n\n super(elementRef, scrollDispatcher, ngZone);\n\n this.service.animation.subscribe(this.dispatchScrollEvent);\n }\n\n createToast<C>(data: KbqToastData, componentType, onTop: boolean): ComponentRef<C> {\n const injector = this.getInjector(data);\n const index = onTop ? 0 : undefined;\n\n this.changeDetectorRef.markForCheck();\n\n return this.viewContainer().createComponent(componentType, { injector, index });\n }\n\n createTemplate<C>(data: KbqToastData, template: TemplateRef<any>, onTop: boolean): EmbeddedViewRef<C> {\n const index = onTop ? 0 : undefined;\n\n return this.viewContainer().createEmbeddedView(template, { $implicit: data }, index);\n }\n\n remove(viewRef: ViewRef) {\n const index = this.viewContainer().indexOf(viewRef);\n\n if (index < 0) {\n return;\n }\n\n this.viewContainer().remove(index);\n }\n\n getInjector(data: KbqToastData): Injector {\n return Injector.create({\n providers: [{ provide: KbqToastData, useValue: data }],\n parent: this.injector\n });\n }\n\n dispatchScrollEvent = () => {\n this.elementRef.nativeElement.dispatchEvent(new CustomEvent('scroll'));\n };\n}\n","import { NgModule } from '@angular/core';\nimport { KbqToastContainerComponent } from './toast-container.component';\nimport { KbqToastCloseButton, KbqToastComponent } from './toast.component';\n\nconst COMPONENTS = [\n KbqToastComponent,\n KbqToastCloseButton,\n KbqToastContainerComponent\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqToastModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["filter"],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-toast.mjs","sources":["../../../packages/components/toast/toast-animations.ts","../../../packages/components/toast/toast.type.ts","../../../packages/components/toast/toast.component.ts","../../../packages/components/toast/toast.component.html","../../../packages/components/toast/toast.service.ts","../../../packages/components/toast/toast-container.component.ts","../../../packages/components/toast/toast.module.ts","../../../packages/components/toast/koobiq-components-toast.ts"],"sourcesContent":["import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations';\n\nexport const kbqToastAnimations: {\n readonly toastState: AnimationTriggerMetadata;\n} = {\n toastState: trigger('state', [\n state('void', style({ transform: 'translateX(100%)', opacity: 0 })),\n transition('* => visible', animate('150ms ease-out', style({ transform: 'translateX(0%)', opacity: 1 }))),\n transition(\n '* => void',\n animate('300ms ease-in', style({ transform: 'translateX(50%)', opacity: 0, height: 0 }))\n )\n ])\n};\n\nexport const toastState = kbqToastAnimations.toastState;\n","import { InjectionToken, Provider, TemplateRef } from '@angular/core';\n\nexport enum KbqToastStyle {\n Contrast = 'contrast',\n Success = 'success',\n Warning = 'warning',\n Error = 'error'\n}\n\nexport enum KbqToastPosition {\n TOP_RIGHT = 'top-right',\n TOP_LEFT = 'top-left',\n TOP_CENTER = 'top-center',\n BOTTOM_RIGHT = 'bottom-right',\n BOTTOM_LEFT = 'bottom-left',\n BOTTOM_CENTER = 'bottom-center',\n CENTER = 'center'\n}\n\nexport class KbqToastData {\n id?: string;\n title?: string | TemplateRef<any>;\n style?: KbqToastStyle | string;\n\n icon?: TemplateRef<any> | boolean;\n iconClass?: string;\n caption?: string | TemplateRef<any>;\n\n content?: string | TemplateRef<any>;\n actions?: TemplateRef<any>;\n\n closeButton?: TemplateRef<any> | boolean;\n}\n\nexport interface KbqToastConfig {\n position: KbqToastPosition;\n duration: number;\n delay: number;\n onTop: boolean;\n /** Custom indentation for positioning the toast stack overlay when using `GlobalPositionStrategy` */\n indent: {\n /** Vertical spacing from the top or bottom of the screen. */\n vertical: number;\n\n /** Horizontal spacing from the left or right of the screen. */\n horizontal: number;\n };\n}\n\nexport const defaultToastConfig: KbqToastConfig = {\n position: KbqToastPosition.TOP_RIGHT,\n duration: 5000,\n delay: 2000,\n onTop: false,\n indent: {\n vertical: 0,\n horizontal: 0\n }\n};\n\nexport const KBQ_TOAST_CONFIG = new InjectionToken<KbqToastConfig>('kbq-toast-config', {\n factory: () => defaultToastConfig\n});\n\n/** Utility provider for `KBQ_TOAST_CONFIG`. */\nexport const kbqToastConfigurationProvider = (configuration: Partial<KbqToastConfig>): Provider => ({\n provide: KBQ_TOAST_CONFIG,\n useValue: { ...defaultToastConfig, ...configuration }\n});\n","import { AnimationEvent } from '@angular/animations';\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n OnDestroy,\n TemplateRef,\n ViewEncapsulation,\n inject\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KbqReadStateDirective, ThemePalette } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { BehaviorSubject, merge } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { kbqToastAnimations } from './toast-animations';\nimport { KbqToastService } from './toast.service';\nimport { KbqToastData, KbqToastStyle } from './toast.type';\n\n@Directive({\n selector: '[kbq-toast-close-button]',\n host: {\n class: 'kbq-toast__close-button'\n }\n})\nexport class KbqToastCloseButton {}\n\nlet id = 0;\n\n@Component({\n selector: 'kbq-toast',\n imports: [\n NgTemplateOutlet,\n KbqIconModule,\n KbqTitleModule,\n KbqToastCloseButton\n ],\n templateUrl: './toast.component.html',\n styleUrls: ['./toast.component.scss', './toast-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-toast',\n '[class]': 'toastStyle',\n '[class.kbq-toast_dismissible]': 'data.closeButton',\n '[@state]': 'animationState',\n '(@state.start)': 'onAnimation($event)',\n '(@state.done)': 'onAnimation($event)',\n '(mouseenter)': 'hovered.next(true)',\n '(mouseleave)': 'hovered.next(false)',\n '(keydown.esc)': 'close()'\n },\n hostDirectives: [KbqReadStateDirective],\n animations: [kbqToastAnimations.toastState]\n})\nexport class KbqToastComponent implements OnDestroy {\n readonly data = inject(KbqToastData);\n readonly service = inject(KbqToastService);\n elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private focusMonitor = inject(FocusMonitor);\n\n protected readonly readStateDirective = inject(KbqReadStateDirective, { host: true });\n\n themePalette = ThemePalette;\n\n animationState = 'void';\n\n readonly hovered = new BehaviorSubject<boolean>(false);\n readonly focused = new BehaviorSubject<boolean>(false);\n\n id = id++;\n ttl;\n delay;\n\n $implicit;\n\n get toastStyle() {\n return {\n [`kbq-toast_${this.data.style}`]: true\n };\n }\n\n get isFocusedOrHovered(): boolean {\n return this.hovered.getValue() || this.focused.getValue();\n }\n\n constructor() {\n this.$implicit = this;\n\n this.data.style = this.data.style || KbqToastStyle.Contrast;\n this.data.icon = this.data.icon !== undefined ? this.data.icon : true;\n this.data.iconClass = this.data.iconClass || undefined;\n this.data.closeButton = this.data.closeButton !== undefined ? this.data.closeButton : true;\n\n this.animationState = 'visible';\n\n this.runFocusMonitor();\n\n this.hovered.subscribe(this.service.hovered);\n this.focused.subscribe(this.service.focused);\n\n merge(this.hovered, this.focused)\n .pipe(\n filter((value) => value),\n takeUntilDestroyed()\n )\n .subscribe(() => {\n if (this.ttl === 0) {\n return;\n }\n\n this.ttl = this.ttl < this.delay ? this.delay : this.ttl;\n });\n\n this.readStateDirective.read\n .pipe(\n filter((value) => value),\n takeUntilDestroyed()\n )\n .subscribe(() => this.service.read.next(this.data));\n }\n\n ngOnDestroy() {\n this.stopFocusMonitor();\n\n this.hovered.next(false);\n this.focused.next(false);\n }\n\n close(): void {\n this.service.read.next(this.data);\n this.service.hide(this.id);\n }\n\n isTemplateRef(value): boolean {\n return value instanceof TemplateRef;\n }\n\n onAnimation($event: AnimationEvent) {\n this.service.animation.next($event);\n }\n\n private runFocusMonitor() {\n this.focusMonitor\n .monitor(this.elementRef.nativeElement, true)\n .subscribe((origin: FocusOrigin) => this.focused.next(!!origin));\n }\n\n private stopFocusMonitor() {\n this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);\n }\n}\n","@if (data.icon) {\n <div class=\"kbq-toast__icon-container layout-row layout-align-start-start\">\n @if (data.icon === true) {\n @switch (data.style) {\n @case ('contrast') {\n <i\n kbq-icon=\"kbq-circle-info_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('success') {\n <i\n kbq-icon=\"kbq-circle-check_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('warning') {\n <i\n kbq-icon=\"kbq-triangle-exclamation_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('error') {\n <i\n kbq-icon=\"kbq-triangle-exclamation_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n }\n }\n @if (isTemplateRef(data.icon)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.icon)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n </div>\n}\n\n<div class=\"kbq-toast__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-toast__title\"\n [class.kbq-toast__title_only-text]=\"!isTemplateRef(data.title)\"\n [class.kbq-toast__title_with-content]=\"data.caption || data.content\"\n >\n @if (isTemplateRef(data.title)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.title)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <p>{{ data.title }}</p>\n }\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-toast__text]=\"data.title\"\n [class.kbq-toast__text_only-text]=\"!isTemplateRef(data.caption)\"\n [class.kbq-toast__title]=\"!data.title\"\n >\n @if (isTemplateRef(data.caption)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.caption)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.caption }}}\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-toast__content\" [class.kbq-toast__content_only-text]=\"!isTemplateRef(data.content)\">\n @if (isTemplateRef(data.content)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.content)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.content }}}\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-toast__actions\">\n @if (isTemplateRef(data.actions)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.actions)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n@if (data.closeButton) {\n <div>\n @if (data.closeButton === true) {\n <i kbq-icon-button=\"kbq-xmark-s_16\" kbq-toast-close-button (click)=\"close()\"></i>\n }\n @if (isTemplateRef(data.closeButton)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.closeButton)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n </div>\n}\n","import { AnimationEvent } from '@angular/animations';\nimport { GlobalPositionStrategy, Overlay, OverlayContainer, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n ComponentRef,\n EmbeddedViewRef,\n Injectable,\n InjectionToken,\n Injector,\n NgZone,\n OnDestroy,\n TemplateRef,\n inject\n} from '@angular/core';\nimport { BehaviorSubject, Subscription, filter, shareReplay, timer } from 'rxjs';\nimport { KbqToastContainerComponent } from './toast-container.component';\nimport { KbqToastComponent } from './toast.component';\nimport { KBQ_TOAST_CONFIG, KbqToastConfig, KbqToastData, KbqToastPosition } from './toast.type';\n\nexport const KBQ_TOAST_FACTORY = new InjectionToken('KBQ_TOAST_FACTORY', {\n factory: () => KbqToastComponent\n});\n\nconst CHECK_INTERVAL = 500;\n\nlet templateId = 0;\n\n/** Generic `T` is a type hint only; the runtime component comes from `KBQ_TOAST_FACTORY`. */\n@Injectable({ providedIn: 'root' })\nexport class KbqToastService<T extends KbqToastComponent = KbqToastComponent> implements OnDestroy {\n private overlay = inject(Overlay);\n private injector = inject(Injector);\n private overlayContainer = inject(OverlayContainer);\n private ngZone = inject(NgZone);\n private toastFactory = inject(KBQ_TOAST_FACTORY);\n private toastConfig = inject<KbqToastConfig>(KBQ_TOAST_CONFIG, { optional: true })!;\n\n get toasts(): ComponentRef<T>[] {\n return Object.values(this.toastsDict).filter((item) => !item.hostView.destroyed);\n }\n\n get templates(): EmbeddedViewRef<T>[] {\n return Object.values(this.templatesDict);\n }\n\n readonly read = new BehaviorSubject<KbqToastData | null>(null);\n readonly hovered = new BehaviorSubject<boolean>(false);\n readonly focused = new BehaviorSubject<boolean>(false);\n readonly animation = new BehaviorSubject<AnimationEvent | null>(null);\n\n timer = timer(CHECK_INTERVAL, CHECK_INTERVAL).pipe(\n filter(() => this.toasts.length > 0 && !this.hovered.getValue() && !this.focused.getValue()),\n // eslint-disable-next-line rxjs-x/no-ignored-replay-buffer\n shareReplay()\n );\n\n private containerInstance?: KbqToastContainerComponent;\n private overlayRef?: OverlayRef;\n private portal?: ComponentPortal<KbqToastContainerComponent>;\n private timerSubscription: Subscription;\n private currentPosition?: KbqToastPosition;\n\n private toastsDict: { [id: number]: ComponentRef<T> } = {};\n private templatesDict: { [id: number]: EmbeddedViewRef<T> } = {};\n\n constructor() {\n this.ngZone.runOutsideAngular(() => {\n this.timerSubscription = this.timer.subscribe(this.processToasts);\n });\n }\n\n ngOnDestroy(): void {\n this.timerSubscription.unsubscribe();\n this.overlayRef?.dispose();\n this.overlayRef = undefined;\n this.containerInstance = undefined;\n this.portal = undefined;\n this.currentPosition = undefined;\n this.toastsDict = {};\n this.templatesDict = {};\n }\n\n show(\n data: KbqToastData,\n duration: number = this.toastConfig.duration,\n onTop: boolean = this.toastConfig.onTop\n ): { ref: ComponentRef<T>; id: number } {\n const container = this.prepareContainer();\n const componentRef = container.createToast<T>(data, this.toastFactory, onTop);\n\n this.toastsDict[componentRef.instance.id] = componentRef;\n\n componentRef.instance.ttl = duration;\n componentRef.instance.delay = this.toastConfig.delay;\n\n return { ref: componentRef, id: componentRef.instance.id };\n }\n\n showTemplate(\n data: KbqToastData,\n template: TemplateRef<any>,\n duration: number = this.toastConfig.duration,\n onTop: boolean = this.toastConfig.onTop\n ): { ref: EmbeddedViewRef<T>; id: number } {\n const container = this.prepareContainer();\n const viewRef = container.createTemplate<T>(data, template, onTop);\n const id = templateId++;\n\n this.templatesDict[id] = viewRef;\n this.addRemoveTimer(id, duration);\n\n return { ref: viewRef, id };\n }\n\n hide(id: number) {\n const componentRef = this.toastsDict[id];\n\n if (!componentRef) {\n return;\n }\n\n this.containerInstance?.remove(componentRef.hostView);\n\n delete this.toastsDict[id];\n\n this.detachOverlay();\n }\n\n hideTemplate(id: number) {\n const viewRef = this.templatesDict[id];\n\n if (!viewRef) {\n return;\n }\n\n this.containerInstance?.remove(viewRef);\n\n delete this.templatesDict[id];\n\n this.detachOverlay();\n }\n\n private detachOverlay() {\n if (this.toasts.length !== 0 || this.templates.length !== 0) {\n return;\n }\n\n this.overlayRef?.detach();\n }\n\n private processToasts = () => {\n for (const toast of this.toasts.filter((item) => item.instance.ttl > 0)) {\n toast.instance.ttl -= CHECK_INTERVAL;\n\n if (toast.instance.ttl <= 0) {\n this.ngZone.run(() => {\n this.hide(toast.instance.id);\n\n this.updateTTLAfterDelete();\n });\n\n break;\n }\n }\n };\n\n private updateTTLAfterDelete() {\n this.toasts\n .filter((item) => item.instance.ttl > 0)\n .forEach((item) => (item.instance.ttl = this.toastConfig.delay));\n }\n\n private addRemoveTimer(id: number, duration: number) {\n setTimeout(() => this.hideTemplate(id), duration);\n }\n\n private prepareContainer(): KbqToastContainerComponent {\n const overlayRef = this.createOverlay();\n const portal = this.portal || new ComponentPortal(KbqToastContainerComponent, null, this.injector);\n\n this.portal = portal;\n\n if (!overlayRef.hasAttached()) {\n this.containerInstance = overlayRef.attach(portal).instance;\n this.containerInstance\n .getElementRef()\n .nativeElement.classList.add(`kbq-toast-container-${this.toastConfig.position}`);\n }\n\n this.toTop(overlayRef);\n\n return this.containerInstance!;\n }\n\n private toTop(overlayRef: OverlayRef) {\n const overlays = this.overlayContainer.getContainerElement().childNodes;\n\n if (overlays.length > 1) {\n overlays[overlays.length - 1].after(overlayRef.hostElement);\n }\n }\n\n private createOverlay(): OverlayRef {\n const expectedPosition = this.toastConfig.position;\n\n if (this.overlayRef && this.currentPosition === expectedPosition) {\n return this.overlayRef;\n }\n\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.containerInstance = undefined;\n this.portal = undefined;\n }\n\n const positionStrategy = this.getPositionStrategy(expectedPosition);\n const overlayRef = this.overlay.create({ positionStrategy });\n\n overlayRef.hostElement.classList.add('kbq-toast-overlay');\n\n this.overlayRef = overlayRef;\n this.currentPosition = expectedPosition;\n\n return overlayRef;\n }\n\n private getPositionStrategy(position?: KbqToastPosition): GlobalPositionStrategy {\n switch (position) {\n case KbqToastPosition.CENTER:\n return this.getCenter();\n case KbqToastPosition.BOTTOM_CENTER:\n return this.getBottomCenter();\n case KbqToastPosition.BOTTOM_LEFT:\n return this.getBottomLeft();\n case KbqToastPosition.BOTTOM_RIGHT:\n return this.getBottomRight();\n case KbqToastPosition.TOP_CENTER:\n return this.getTopCenter();\n case KbqToastPosition.TOP_LEFT:\n return this.getTopLeft();\n case KbqToastPosition.TOP_RIGHT:\n return this.getTopRight();\n default:\n return this.getTopCenter();\n }\n }\n\n private getTopCenter(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition().top(`${this.toastConfig.indent.vertical}px`).centerHorizontally();\n }\n\n private getTopLeft(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .top(`${this.toastConfig.indent.vertical}px`)\n .left(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getTopRight(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .top(`${this.toastConfig.indent.vertical}px`)\n .right(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getBottomCenter(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition().bottom(`${this.toastConfig.indent.vertical}px`).centerHorizontally();\n }\n\n private getBottomLeft(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .bottom(`${this.toastConfig.indent.vertical}px`)\n .left(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getBottomRight(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .bottom(`${this.toastConfig.indent.vertical}px`)\n .right(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getCenter(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition().centerVertically().centerHorizontally();\n }\n\n private getGlobalOverlayPosition(): GlobalPositionStrategy {\n return this.overlay.position().global();\n }\n}\n","import { CdkScrollable, ScrollDispatcher } from '@angular/cdk/overlay';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n Injector,\n NgZone,\n TemplateRef,\n ViewContainerRef,\n ViewEncapsulation,\n ViewRef,\n inject,\n viewChild\n} from '@angular/core';\nimport { KbqToastService } from './toast.service';\nimport { KbqToastData } from './toast.type';\n\n@Component({\n selector: 'kbq-toast-container',\n template: '<ng-container #container />',\n styleUrls: ['./toast-container.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-toast-container'\n }\n})\nexport class KbqToastContainerComponent extends CdkScrollable {\n private injector = inject(Injector);\n private changeDetectorRef = inject(ChangeDetectorRef);\n readonly service = inject(KbqToastService);\n\n readonly viewContainer = viewChild.required('container', { read: ViewContainerRef });\n\n constructor() {\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n const scrollDispatcher = inject(ScrollDispatcher);\n const ngZone = inject(NgZone);\n\n super(elementRef, scrollDispatcher, ngZone);\n\n this.service.animation.subscribe(this.dispatchScrollEvent);\n }\n\n createToast<C>(data: KbqToastData, componentType, onTop: boolean): ComponentRef<C> {\n const injector = this.getInjector(data);\n const index = onTop ? 0 : undefined;\n\n this.changeDetectorRef.markForCheck();\n\n return this.viewContainer().createComponent(componentType, { injector, index });\n }\n\n createTemplate<C>(data: KbqToastData, template: TemplateRef<any>, onTop: boolean): EmbeddedViewRef<C> {\n const index = onTop ? 0 : undefined;\n\n return this.viewContainer().createEmbeddedView(template, { $implicit: data }, index);\n }\n\n remove(viewRef: ViewRef) {\n const index = this.viewContainer().indexOf(viewRef);\n\n if (index < 0) {\n return;\n }\n\n this.viewContainer().remove(index);\n }\n\n getInjector(data: KbqToastData): Injector {\n return Injector.create({\n providers: [{ provide: KbqToastData, useValue: data }],\n parent: this.injector\n });\n }\n\n dispatchScrollEvent = () => {\n this.elementRef.nativeElement.dispatchEvent(new CustomEvent('scroll'));\n };\n}\n","import { NgModule } from '@angular/core';\nimport { KbqToastContainerComponent } from './toast-container.component';\nimport { KbqToastCloseButton, KbqToastComponent } from './toast.component';\n\nconst COMPONENTS = [\n KbqToastComponent,\n KbqToastCloseButton,\n KbqToastContainerComponent\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqToastModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["filter"],"mappings":"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"}