@koobiq/components 20.4.1 → 20.4.3

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.
@@ -2,7 +2,7 @@ import { Platform, PlatformModule } from '@angular/cdk/platform';
2
2
  import * as i0 from '@angular/core';
3
3
  import { input, inject, ElementRef, ChangeDetectorRef, Input, ViewEncapsulation, Component, NgModule } from '@angular/core';
4
4
  import { Subject, Subscription } from 'rxjs';
5
- import { startWith, debounceTime } from 'rxjs/operators';
5
+ import { debounceTime } from 'rxjs/operators';
6
6
  import { A11yModule } from '@angular/cdk/a11y';
7
7
 
8
8
  class KbqDlComponent {
@@ -24,8 +24,9 @@ class KbqDlComponent {
24
24
  this.platform = inject(Platform);
25
25
  this.updateState = () => {
26
26
  const domRect = this.elementRef.nativeElement.getClientRects()[0];
27
- const width = domRect?.width || 0;
28
- this.vertical = width <= this.minWidth();
27
+ if (!domRect)
28
+ return;
29
+ this.vertical = domRect.width <= this.minWidth();
29
30
  this.changeDetectorRef.markForCheck();
30
31
  };
31
32
  }
@@ -33,8 +34,9 @@ class KbqDlComponent {
33
34
  if (this.vertical !== null || !this.platform.isBrowser) {
34
35
  return;
35
36
  }
37
+ this.updateState();
36
38
  this.resizeSubscription = this.resizeStream
37
- .pipe(startWith(null), debounceTime(this.resizeDebounceInterval))
39
+ .pipe(debounceTime(this.resizeDebounceInterval))
38
40
  .subscribe(this.updateState);
39
41
  }
40
42
  ngOnDestroy() {
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-dl.mjs","sources":["../../../packages/components/dl/dl.component.ts","../../../packages/components/dl/dl.module.ts","../../../packages/components/dl/koobiq-components-dl.ts"],"sourcesContent":["import { Platform } from '@angular/cdk/platform';\nimport {\n AfterContentInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n Input,\n input,\n OnDestroy,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, startWith } from 'rxjs/operators';\n\n/** Supported alignment values for description list items. */\nexport type KbqDlAlign = 'start' | 'center' | 'end';\n\n@Component({\n selector: 'kbq-dl',\n template: '<ng-content />',\n styleUrls: ['dl.scss', 'dl-tokens.scss'],\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-dl',\n '[class.kbq-dl_vertical]': 'vertical',\n '[class.kbq-dl_wide]': 'wide()',\n '[class.kbq-dl_vertical-align-center]': \"verticalAlign() === 'center'\",\n '[class.kbq-dl_vertical-align-end]': \"verticalAlign() === 'end'\",\n '[class.kbq-dl_horizontal-align-center]': \"horizontalAlign() === 'center'\",\n '[class.kbq-dl_horizontal-align-end]': \"horizontalAlign() === 'end'\",\n '(window:resize)': 'resizeStream.next($event)'\n }\n})\nexport class KbqDlComponent implements AfterContentInit, OnDestroy {\n readonly minWidth = input<number>(400);\n readonly wide = input(false);\n /** Vertical alignment of `kbq-dt` and `kbq-dd` items. */\n readonly verticalAlign = input<KbqDlAlign>('start');\n /** Horizontal alignment of `kbq-dt` and `kbq-dd` items. */\n readonly horizontalAlign = input<KbqDlAlign>('start');\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input() vertical: boolean | null = null;\n\n readonly resizeStream = new Subject<Event>();\n private readonly resizeDebounceInterval: number = 100;\n\n private resizeSubscription = Subscription.EMPTY;\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly platform = inject(Platform);\n\n ngAfterContentInit(): void {\n if (this.vertical !== null || !this.platform.isBrowser) {\n return;\n }\n\n this.resizeSubscription = this.resizeStream\n .pipe(startWith(null), debounceTime(this.resizeDebounceInterval))\n .subscribe(this.updateState);\n }\n\n ngOnDestroy() {\n this.resizeSubscription.unsubscribe();\n }\n\n private readonly updateState = (): void => {\n const domRect = this.elementRef.nativeElement.getClientRects()[0];\n const width = domRect?.width || 0;\n\n this.vertical = width <= this.minWidth();\n\n this.changeDetectorRef.markForCheck();\n };\n}\n\n@Component({\n selector: 'kbq-dt',\n template: '<ng-content />',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-dt'\n }\n})\nexport class KbqDtComponent {}\n\n@Component({\n selector: 'kbq-dd',\n template: '<ng-content />',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-dd'\n }\n})\nexport class KbqDdComponent {}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { NgModule } from '@angular/core';\nimport { KbqDdComponent, KbqDlComponent, KbqDtComponent } from './dl.component';\n\n@NgModule({\n imports: [\n A11yModule,\n PlatformModule,\n KbqDlComponent,\n KbqDtComponent,\n KbqDdComponent\n ],\n exports: [\n KbqDlComponent,\n KbqDtComponent,\n KbqDdComponent\n ]\n})\nexport class KbqDlModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-dl.mjs","sources":["../../../packages/components/dl/dl.component.ts","../../../packages/components/dl/dl.module.ts","../../../packages/components/dl/koobiq-components-dl.ts"],"sourcesContent":["import { Platform } from '@angular/cdk/platform';\nimport {\n AfterContentInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n Input,\n input,\n OnDestroy,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n/** Supported alignment values for description list items. */\nexport type KbqDlAlign = 'start' | 'center' | 'end';\n\n@Component({\n selector: 'kbq-dl',\n template: '<ng-content />',\n styleUrls: ['dl.scss', 'dl-tokens.scss'],\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-dl',\n '[class.kbq-dl_vertical]': 'vertical',\n '[class.kbq-dl_wide]': 'wide()',\n '[class.kbq-dl_vertical-align-center]': \"verticalAlign() === 'center'\",\n '[class.kbq-dl_vertical-align-end]': \"verticalAlign() === 'end'\",\n '[class.kbq-dl_horizontal-align-center]': \"horizontalAlign() === 'center'\",\n '[class.kbq-dl_horizontal-align-end]': \"horizontalAlign() === 'end'\",\n '(window:resize)': 'resizeStream.next($event)'\n }\n})\nexport class KbqDlComponent implements AfterContentInit, OnDestroy {\n readonly minWidth = input<number>(400);\n readonly wide = input(false);\n /** Vertical alignment of `kbq-dt` and `kbq-dd` items. */\n readonly verticalAlign = input<KbqDlAlign>('start');\n /** Horizontal alignment of `kbq-dt` and `kbq-dd` items. */\n readonly horizontalAlign = input<KbqDlAlign>('start');\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input() vertical: boolean | null = null;\n\n readonly resizeStream = new Subject<Event>();\n private readonly resizeDebounceInterval: number = 100;\n\n private resizeSubscription = Subscription.EMPTY;\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly platform = inject(Platform);\n\n ngAfterContentInit(): void {\n if (this.vertical !== null || !this.platform.isBrowser) {\n return;\n }\n\n this.updateState();\n\n this.resizeSubscription = this.resizeStream\n .pipe(debounceTime(this.resizeDebounceInterval))\n .subscribe(this.updateState);\n }\n\n ngOnDestroy() {\n this.resizeSubscription.unsubscribe();\n }\n\n private readonly updateState = (): void => {\n const domRect = this.elementRef.nativeElement.getClientRects()[0];\n\n if (!domRect) return;\n\n this.vertical = domRect.width <= this.minWidth();\n\n this.changeDetectorRef.markForCheck();\n };\n}\n\n@Component({\n selector: 'kbq-dt',\n template: '<ng-content />',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-dt'\n }\n})\nexport class KbqDtComponent {}\n\n@Component({\n selector: 'kbq-dd',\n template: '<ng-content />',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-dd'\n }\n})\nexport class KbqDdComponent {}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { NgModule } from '@angular/core';\nimport { KbqDdComponent, KbqDlComponent, KbqDtComponent } from './dl.component';\n\n@NgModule({\n imports: [\n A11yModule,\n PlatformModule,\n KbqDlComponent,\n KbqDtComponent,\n KbqDdComponent\n ],\n exports: [\n KbqDlComponent,\n KbqDtComponent,\n KbqDdComponent\n ]\n})\nexport class KbqDlModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -5,8 +5,16 @@ import { Platform } from '@angular/cdk/platform';
5
5
  import { DOCUMENT } from '@angular/common';
6
6
  import { toSignal, outputToObservable, toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
7
  import { kbqInjectNativeElement, KBQ_WINDOW } from '@koobiq/components/core';
8
- import { merge, switchMap, skip, debounceTime } from 'rxjs';
8
+ import { merge, switchMap, fromEvent, EMPTY, debounceTime } from 'rxjs';
9
9
 
10
+ /**
11
+ * Overflow, in device pixels, from which an item is hidden. At a fractional `devicePixelRatio` (browser zoom, display
12
+ * scaling) the summed sizes drift from the layout by a fraction of a device pixel: computed margins, paddings and gaps
13
+ * are not snapped to the layout grid of 1/64 device pixel, and `DOMRect` is single-precision. A container sized by its
14
+ * content would read as overflown after every hidden item and lose them all. Half a device pixel absorbs the drift of 32
15
+ * such lengths, while a larger overflow can already cost the item a device pixel when it is painted.
16
+ */
17
+ const MIN_OVERFLOW_IN_DEVICE_PIXELS = 0.5;
10
18
  /**
11
19
  * Manages the visibility of the element.
12
20
  *
@@ -160,7 +168,8 @@ class KbqOverflowItems {
160
168
  */
161
169
  this.additionalResizeObserverTargets = input(this.document.body, ...(ngDevMode ? [{ debugName: "additionalResizeObserverTargets" }] : []));
162
170
  /**
163
- * Emits when the set of hidden items changes.
171
+ * Emits the set of hidden items after every recalculation, also when it has not changed: a recalculation shows every
172
+ * item before it hides the overflown ones again, so a consumer that hides items itself re-applies that here.
164
173
  */
165
174
  this.changes = output();
166
175
  /**
@@ -181,30 +190,29 @@ class KbqOverflowItems {
181
190
  * @default 'nowrap'
182
191
  */
183
192
  this.wrap = input('nowrap', ...(ngDevMode ? [{ debugName: "wrap" }] : []));
193
+ /** The main axis of each orientation, as the `DOMRect` and `CSSStyleDeclaration` members to read. */
184
194
  this.orientationConfig = {
185
195
  horizontal: {
186
- containerSize: (element) => element.getBoundingClientRect().width,
187
- paddingStart: ({ paddingLeft }) => parseFloat(paddingLeft) || 0,
188
- paddingEnd: ({ paddingRight }) => parseFloat(paddingRight) || 0,
189
- itemSize: (element) => {
190
- const { marginRight, marginLeft } = this.window.getComputedStyle(element);
191
- return (element.getBoundingClientRect().width +
192
- (parseFloat(marginLeft) || 0) +
193
- (parseFloat(marginRight) || 0));
194
- },
196
+ size: 'width',
197
+ marginStart: 'marginLeft',
198
+ marginEnd: 'marginRight',
199
+ paddingStart: 'paddingLeft',
200
+ paddingEnd: 'paddingRight',
201
+ borderStart: 'borderLeftWidth',
202
+ borderEnd: 'borderRightWidth',
203
+ gap: 'columnGap',
195
204
  isCrossAxisExceeded: ({ clientHeight, scrollHeight }) => scrollHeight > clientHeight,
196
205
  flexDirection: 'row'
197
206
  },
198
207
  vertical: {
199
- containerSize: (element) => element.getBoundingClientRect().height,
200
- paddingStart: ({ paddingTop }) => parseFloat(paddingTop) || 0,
201
- paddingEnd: ({ paddingBottom }) => parseFloat(paddingBottom) || 0,
202
- itemSize: (element) => {
203
- const { marginTop, marginBottom } = this.window.getComputedStyle(element);
204
- return (element.getBoundingClientRect().height +
205
- (parseFloat(marginTop) || 0) +
206
- (parseFloat(marginBottom) || 0));
207
- },
208
+ size: 'height',
209
+ marginStart: 'marginTop',
210
+ marginEnd: 'marginBottom',
211
+ paddingStart: 'paddingTop',
212
+ paddingEnd: 'paddingBottom',
213
+ borderStart: 'borderTopWidth',
214
+ borderEnd: 'borderBottomWidth',
215
+ gap: 'rowGap',
208
216
  isCrossAxisExceeded: ({ clientWidth, scrollWidth }) => scrollWidth > clientWidth,
209
217
  flexDirection: 'column'
210
218
  }
@@ -220,7 +228,17 @@ class KbqOverflowItems {
220
228
  ? merge(...targets.map((target) => this.resizeObserver.observe(target)))
221
229
  : this.resizeObserver.observe(targets);
222
230
  })));
223
- merge(toObservable(this.items), toObservable(this.reverseOverflowOrder).pipe(skip(1)), toObservable(this.orientation).pipe(skip(1)), resizeObservers)
231
+ // What the hidden set depends on besides the geometry.
232
+ const inputs = computed(() => [
233
+ this.items().map((item) => [item.order(), item.alwaysVisible()]),
234
+ this.result(),
235
+ this.reverseOverflowOrder(),
236
+ this.orientation(),
237
+ this.wrap()
238
+ ], ...(ngDevMode ? [{ debugName: "inputs" }] : []));
239
+ // A web font that loads lays the items out again without resizing a container of fixed size.
240
+ const fontsLoaded = this.document.fonts ? fromEvent(this.document.fonts, 'loadingdone') : EMPTY;
241
+ merge(toObservable(inputs), resizeObservers, fontsLoaded)
224
242
  .pipe(debounceTime(this.debounceTime()), takeUntilDestroyed())
225
243
  .subscribe(() => {
226
244
  const hiddenItems = this.getHiddenItems(this.sortItemsByOrder(this.items()), this.reverseOverflowOrder(), this.result(), this.element, this.orientation());
@@ -243,13 +261,24 @@ class KbqOverflowItems {
243
261
  getHiddenItems(items, reverseOverflowOrder, result, container, orientation) {
244
262
  result?.hide();
245
263
  items.forEach((item) => item.show());
246
- while (this.hasOverflown(container, items, result, orientation)) {
247
- const itemToHide = reverseOverflowOrder
248
- ? items.find(({ hidden, alwaysVisible }) => !hidden() && !alwaysVisible())
249
- : this.findLast(items, ({ hidden, alwaysVisible }) => !hidden() && !alwaysVisible());
250
- if (!itemToHide)
251
- break;
252
- itemToHide.hide();
264
+ const hideable = (reverseOverflowOrder ? items : [...items].reverse()).filter(({ alwaysVisible }) => !alwaysVisible());
265
+ const threshold = MIN_OVERFLOW_IN_DEVICE_PIXELS / (this.window.devicePixelRatio || 1);
266
+ let hiddenCount = 0;
267
+ if (this.wrap() !== 'wrap') {
268
+ // Hides in one go what the first measurement already shows to be too much, sparing the loop below a layout
269
+ // per item. With every item visible the items are at their smallest and the container at its largest, and
270
+ // the result is not counted yet, so this never hides more than the loop would.
271
+ const { overflow, sizes } = this.measure(container, orientation);
272
+ let excess = overflow;
273
+ while (hiddenCount < hideable.length && excess >= threshold) {
274
+ excess -= sizes.get(hideable[hiddenCount].element) ?? 0;
275
+ hideable[hiddenCount++].hide();
276
+ }
277
+ if (hiddenCount)
278
+ result?.show();
279
+ }
280
+ while (hiddenCount < hideable.length && this.hasOverflown(container, orientation, threshold)) {
281
+ hideable[hiddenCount++].hide();
253
282
  result?.show();
254
283
  }
255
284
  return items.filter(({ hidden }) => hidden());
@@ -272,26 +301,54 @@ class KbqOverflowItems {
272
301
  .pipe(takeUntilDestroyed())
273
302
  .subscribe((wrap) => this.renderer.setStyle(this.element, 'flex-wrap', wrap));
274
303
  }
275
- hasOverflown(container, items, result, orientation) {
304
+ hasOverflown(container, orientation, threshold) {
276
305
  if (this.wrap() === 'wrap')
277
306
  return this.orientationConfig[orientation].isCrossAxisExceeded(container);
278
- const { containerSize, paddingStart, paddingEnd, itemSize } = this.orientationConfig[orientation];
279
- const computedStyle = this.window.getComputedStyle(container);
280
- const containerSizeWithoutPaddings = containerSize(container) - paddingStart(computedStyle) - paddingEnd(computedStyle);
281
- const itemsSize = items.reduce((size, item) => size + (item.hidden() ? 0 : itemSize(item.element)), 0);
282
- const resultSize = !result || result.hidden() ? 0 : itemSize(result.element);
283
- return itemsSize + resultSize > containerSizeWithoutPaddings;
307
+ return this.measure(container, orientation).overflow >= threshold;
284
308
  }
285
309
  /**
286
- * @TODO Should be removed when `Array.prototype.findLast` is supported.
310
+ * Measures how far the children of the container that take part in its layout exceed its content box along the
311
+ * main axis, and the space each of them takes, its margins and one gap included.
287
312
  */
288
- findLast(array, predicate) {
289
- for (let i = array.length - 1; i >= 0; i--) {
290
- if (predicate(array[i])) {
291
- return array[i];
292
- }
313
+ measure(container, orientation) {
314
+ const axis = this.orientationConfig[orientation];
315
+ const style = this.window.getComputedStyle(container);
316
+ const size = container.getBoundingClientRect()[axis.size];
317
+ const edges = this.px(style[axis.borderStart]) +
318
+ this.px(style[axis.paddingStart]) +
319
+ this.px(style[axis.paddingEnd]) +
320
+ this.px(style[axis.borderEnd]);
321
+ // Rects are measured after transforms and CSS `zoom`, computed lengths before them.
322
+ const layoutSize = parseFloat(style[axis.size]);
323
+ const scale = layoutSize > 0 ? size / (layoutSize + (style.boxSizing === 'border-box' ? 0 : edges)) : 1;
324
+ const gap = this.px(style[axis.gap]) * scale;
325
+ const sizes = new Map();
326
+ // Gaps lie between the children, one fewer than there are.
327
+ let used = -gap;
328
+ for (const { element, style: childStyle } of this.getLaidOutChildren(container)) {
329
+ const margins = this.px(childStyle[axis.marginStart]) + this.px(childStyle[axis.marginEnd]);
330
+ const childSize = element.getBoundingClientRect()[axis.size] + margins * scale + gap;
331
+ sizes.set(element, childSize);
332
+ used += childSize;
293
333
  }
294
- return undefined;
334
+ return { overflow: used - (size - edges * scale), sizes };
335
+ }
336
+ /**
337
+ * Children of the element that take part in its flex layout: neither `display: none` nor taken out of flow, as
338
+ * hidden items are, with the children of a `display: contents` child in its place.
339
+ */
340
+ getLaidOutChildren(element) {
341
+ return Array.from(element.children).flatMap((child) => {
342
+ const style = this.window.getComputedStyle(child);
343
+ if (style.display === 'contents')
344
+ return this.getLaidOutChildren(child);
345
+ if (style.display === 'none' || style.position === 'absolute' || style.position === 'fixed')
346
+ return [];
347
+ return [{ element: child, style }];
348
+ });
349
+ }
350
+ px(value) {
351
+ return parseFloat(value) || 0;
295
352
  }
296
353
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqOverflowItems, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
297
354
  /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.30", type: KbqOverflowItems, isStandalone: true, selector: "[kbqOverflowItems]", inputs: { reverseOverflowOrder: { classPropertyName: "reverseOverflowOrder", publicName: "reverseOverflowOrder", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null }, additionalResizeObserverTargets: { classPropertyName: "additionalResizeObserverTargets", publicName: "additionalResizeObserverTargets", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changes: "changes" }, host: { classAttribute: "kbq-overflow-items" }, queries: [{ propertyName: "items", predicate: KbqOverflowItem, isSignal: true }, { propertyName: "result", first: true, predicate: KbqOverflowItemsResult, descendants: true, isSignal: true }], exportAs: ["kbqOverflowItems"], ngImport: i0 }); }
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-overflow-items.mjs","sources":["../../../packages/components/overflow-items/overflow-items.ts","../../../packages/components/overflow-items/module.ts","../../../packages/components/overflow-items/koobiq-components-overflow-items.ts"],"sourcesContent":["import { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n computed,\n contentChild,\n contentChildren,\n Directive,\n inject,\n input,\n numberAttribute,\n output,\n Renderer2,\n signal\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport {\n KBQ_WINDOW,\n KbqFlexDirection,\n KbqFlexWrap,\n kbqInjectNativeElement,\n KbqOrientation\n} from '@koobiq/components/core';\nimport { debounceTime, merge, skip, switchMap } from 'rxjs';\n\n/**\n * Manages the visibility of the element.\n *\n * @docs-private\n */\n@Directive({\n host: {\n '[attr.aria-hidden]': 'hidden()',\n '[class.kbq-overflow-item-hidden]': 'hidden()'\n }\n})\nexport class ElementVisibilityManager {\n private readonly renderer = inject(Renderer2);\n private readonly hiddenState = signal(false);\n\n /**\n * @docs-private\n */\n readonly element = kbqInjectNativeElement();\n\n /**\n * Whether the element is hidden.\n *\n * @docs-private\n */\n readonly hidden = computed(() => this.hiddenState());\n\n /**\n * Hides the element.\n *\n * @docs-private\n */\n hide(): void {\n this.renderer.setStyle(this.element, 'visibility', 'hidden');\n this.renderer.setStyle(this.element, 'position', 'absolute');\n this.hiddenState.set(true);\n }\n\n /**\n * Shows the element.\n *\n * @docs-private\n */\n show(): void {\n this.renderer.removeStyle(this.element, 'visibility');\n this.renderer.removeStyle(this.element, 'position');\n this.hiddenState.set(false);\n }\n}\n\n/**\n * Directive for displaying the result of hidden items by the `KbqOverflowItems` directive.\n */\n@Directive({\n selector: '[kbqOverflowItemsResult]',\n host: { class: 'kbq-overflow-items-result' },\n exportAs: 'kbqOverflowItemsResult'\n})\nexport class KbqOverflowItemsResult extends ElementVisibilityManager {}\n\n/**\n * Directive for the item that can be hidden by the `KbqOverflowItems` directive.\n */\n@Directive({\n selector: '[kbqOverflowItem]',\n host: {\n class: 'kbq-overflow-item',\n '[class.kbq-overflow-item_always-visible]': 'alwaysVisible()'\n },\n exportAs: 'kbqOverflowItem'\n})\nexport class KbqOverflowItem extends ElementVisibilityManager {\n /**\n * Unique identifier for the item.\n */\n readonly id = input.required({ alias: 'kbqOverflowItem' });\n /**\n * Defines the order in which the item is processed in the overflow container,\n * without changing its original position in the `QueryList`.\n */\n readonly order = input(null, { transform: numberAttribute });\n /**\n * Element with this attribute will be ignored when hiding and will always remain visible.\n * @default false\n */\n readonly alwaysVisible = input(false, { transform: booleanAttribute });\n\n /**\n * @docs-private\n */\n override hide(): void {\n if (this.alwaysVisible()) return;\n\n super.hide();\n }\n}\n\n/**\n * Directive for managing the visibility of items that overflow the container.\n */\n@Directive({\n selector: '[kbqOverflowItems]',\n host: { class: 'kbq-overflow-items' },\n exportAs: 'kbqOverflowItems'\n})\nexport class KbqOverflowItems {\n private readonly element = kbqInjectNativeElement();\n private readonly resizeObserver = inject(SharedResizeObserver);\n private readonly renderer = inject(Renderer2);\n private readonly document = inject(DOCUMENT);\n private readonly window = inject(KBQ_WINDOW);\n private readonly platform = inject(Platform);\n\n /**\n * `KbqOverflowItem` directive references.\n */\n private readonly items = contentChildren(KbqOverflowItem);\n\n /**\n * `KbqOverflowItemsResult` directive reference.\n */\n private readonly result = contentChild(KbqOverflowItemsResult);\n\n /**\n * Whether the overflow order should be reversed.\n *\n * @example\n * ```\n * [0, 1, hidden, hidden] ---> [hidden, hidden, 2, 3]\n * ```\n *\n * @default false\n */\n readonly reverseOverflowOrder = input(false, { transform: booleanAttribute });\n\n /**\n * Debounce time for recalculating items visibility.\n *\n * @default 0\n */\n readonly debounceTime = input(0, { transform: numberAttribute });\n\n /**\n * List of additional elements to observe for resize changes.\n *\n * @default document.body\n */\n readonly additionalResizeObserverTargets = input<Element | Element[]>(this.document.body);\n\n /**\n * Emits when the set of hidden items changes.\n */\n readonly changes = output<ReadonlySet<unknown>>();\n\n /**\n * Set of hidden item IDs.\n */\n readonly hiddenItemIDs = toSignal(outputToObservable(this.changes), {\n initialValue: new Set<unknown>([]) as ReadonlySet<unknown>\n });\n\n /**\n * Defines the orientation of the overflow items.\n *\n * @default 'horizontal'\n */\n readonly orientation = input<KbqOrientation>('horizontal');\n\n /**\n * Defines the wrap of the overflow items.\n *\n * @default 'nowrap'\n */\n readonly wrap = input<KbqFlexWrap>('nowrap');\n\n private readonly orientationConfig: Record<\n KbqOrientation,\n {\n containerSize: (element: HTMLElement) => number;\n paddingStart: (computedStyle: CSSStyleDeclaration) => number;\n paddingEnd: (computedStyle: CSSStyleDeclaration) => number;\n itemSize: (element: HTMLElement) => number;\n isCrossAxisExceeded: (element: HTMLElement) => boolean;\n flexDirection: KbqFlexDirection;\n }\n > = {\n horizontal: {\n containerSize: (element) => element.getBoundingClientRect().width,\n paddingStart: ({ paddingLeft }) => parseFloat(paddingLeft) || 0,\n paddingEnd: ({ paddingRight }) => parseFloat(paddingRight) || 0,\n itemSize: (element) => {\n const { marginRight, marginLeft } = this.window.getComputedStyle(element);\n\n return (\n element.getBoundingClientRect().width +\n (parseFloat(marginLeft) || 0) +\n (parseFloat(marginRight) || 0)\n );\n },\n isCrossAxisExceeded: ({ clientHeight, scrollHeight }) => scrollHeight > clientHeight,\n flexDirection: 'row'\n },\n vertical: {\n containerSize: (element) => element.getBoundingClientRect().height,\n paddingStart: ({ paddingTop }) => parseFloat(paddingTop) || 0,\n paddingEnd: ({ paddingBottom }) => parseFloat(paddingBottom) || 0,\n itemSize: (element) => {\n const { marginTop, marginBottom } = this.window.getComputedStyle(element);\n\n return (\n element.getBoundingClientRect().height +\n (parseFloat(marginTop) || 0) +\n (parseFloat(marginBottom) || 0)\n );\n },\n isCrossAxisExceeded: ({ clientWidth, scrollWidth }) => scrollWidth > clientWidth,\n flexDirection: 'column'\n }\n } as const;\n\n constructor() {\n this.setStyles();\n this.setupObservers();\n }\n\n private setupObservers(): void {\n if (!this.platform.isBrowser) return;\n\n const resizeObservers = merge(\n this.resizeObserver.observe(this.element),\n toObservable(this.additionalResizeObserverTargets).pipe(\n switchMap((targets) => {\n return Array.isArray(targets)\n ? merge(...targets.map((target) => this.resizeObserver.observe(target)))\n : this.resizeObserver.observe(targets);\n })\n )\n );\n\n merge(\n toObservable(this.items),\n toObservable(this.reverseOverflowOrder).pipe(skip(1)),\n toObservable(this.orientation).pipe(skip(1)),\n resizeObservers\n )\n .pipe(debounceTime(this.debounceTime()), takeUntilDestroyed())\n .subscribe(() => {\n const hiddenItems = this.getHiddenItems(\n this.sortItemsByOrder(this.items()),\n this.reverseOverflowOrder(),\n this.result(),\n this.element,\n this.orientation()\n );\n const hiddenItemIDs = new Set(hiddenItems.map(({ id }) => id()));\n\n this.changes.emit(hiddenItemIDs);\n });\n }\n\n /**\n * Sort items by their `order` attribute.\n * If an item does not have an `order` defined, its index is used as a fallback.\n */\n private sortItemsByOrder(items: ReadonlyArray<KbqOverflowItem>): ReadonlyArray<KbqOverflowItem> {\n const itemsWithOrder = Array.from(items, (item, index) => ({ item, order: item.order() ?? index }));\n\n return itemsWithOrder.sort((a, b) => a.order - b.order).map(({ item }) => item);\n }\n\n /**\n * Manages the visibility of items based on the available space in the container and returns the hidden items.\n * Direction of hiding is determined by the `reverseOverflowOrder` attribute.\n */\n private getHiddenItems(\n items: ReadonlyArray<KbqOverflowItem>,\n reverseOverflowOrder: boolean,\n result: KbqOverflowItemsResult | undefined,\n container: HTMLElement,\n orientation: KbqOrientation\n ): ReadonlyArray<KbqOverflowItem> {\n result?.hide();\n items.forEach((item) => item.show());\n\n while (this.hasOverflown(container, items, result, orientation)) {\n const itemToHide = reverseOverflowOrder\n ? items.find(({ hidden, alwaysVisible }) => !hidden() && !alwaysVisible())\n : this.findLast(items, ({ hidden, alwaysVisible }) => !hidden() && !alwaysVisible());\n\n if (!itemToHide) break;\n\n itemToHide.hide();\n result?.show();\n }\n\n return items.filter(({ hidden }) => hidden());\n }\n\n /**\n * This method sets the necessary styles for the directive.\n */\n private setStyles(): void {\n this.renderer.setStyle(this.element, 'position', 'relative');\n this.renderer.setStyle(this.element, 'overflow', 'hidden');\n this.renderer.setStyle(this.element, 'display', 'flex');\n this.renderer.setStyle(this.element, 'flex-grow', '1');\n\n toObservable(this.orientation)\n .pipe(takeUntilDestroyed())\n .subscribe((orientation) => {\n const { flexDirection } = this.orientationConfig[orientation];\n\n this.renderer.setStyle(this.element, 'flex-direction', flexDirection);\n });\n\n toObservable(this.wrap)\n .pipe(takeUntilDestroyed())\n .subscribe((wrap) => this.renderer.setStyle(this.element, 'flex-wrap', wrap));\n }\n\n private hasOverflown(\n container: HTMLElement,\n items: ReadonlyArray<KbqOverflowItem>,\n result: KbqOverflowItemsResult | undefined,\n orientation: KbqOrientation\n ): boolean {\n if (this.wrap() === 'wrap') return this.orientationConfig[orientation].isCrossAxisExceeded(container);\n\n const { containerSize, paddingStart, paddingEnd, itemSize } = this.orientationConfig[orientation];\n const computedStyle = this.window.getComputedStyle(container);\n const containerSizeWithoutPaddings =\n containerSize(container) - paddingStart(computedStyle) - paddingEnd(computedStyle);\n const itemsSize = items.reduce((size, item) => size + (item.hidden() ? 0 : itemSize(item.element)), 0);\n const resultSize = !result || result.hidden() ? 0 : itemSize(result.element);\n\n return itemsSize + resultSize > containerSizeWithoutPaddings;\n }\n\n /**\n * @TODO Should be removed when `Array.prototype.findLast` is supported.\n */\n private findLast<T>(array: ReadonlyArray<T>, predicate: (item: T) => boolean): T | undefined {\n for (let i = array.length - 1; i >= 0; i--) {\n if (predicate(array[i])) {\n return array[i];\n }\n }\n\n return undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqOverflowItem, KbqOverflowItems, KbqOverflowItemsResult } from './overflow-items';\n\nconst COMPONENTS = [\n KbqOverflowItems,\n KbqOverflowItem,\n KbqOverflowItemsResult\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqOverflowItemsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-overflow-items.mjs","sources":["../../../packages/components/overflow-items/overflow-items.ts","../../../packages/components/overflow-items/module.ts","../../../packages/components/overflow-items/koobiq-components-overflow-items.ts"],"sourcesContent":["import { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n computed,\n contentChild,\n contentChildren,\n Directive,\n inject,\n input,\n numberAttribute,\n output,\n Renderer2,\n signal\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport {\n KBQ_WINDOW,\n KbqFlexDirection,\n KbqFlexWrap,\n kbqInjectNativeElement,\n KbqOrientation\n} from '@koobiq/components/core';\nimport { debounceTime, EMPTY, fromEvent, merge, switchMap } from 'rxjs';\n\n/**\n * Overflow, in device pixels, from which an item is hidden. At a fractional `devicePixelRatio` (browser zoom, display\n * scaling) the summed sizes drift from the layout by a fraction of a device pixel: computed margins, paddings and gaps\n * are not snapped to the layout grid of 1/64 device pixel, and `DOMRect` is single-precision. A container sized by its\n * content would read as overflown after every hidden item and lose them all. Half a device pixel absorbs the drift of 32\n * such lengths, while a larger overflow can already cost the item a device pixel when it is painted.\n */\nconst MIN_OVERFLOW_IN_DEVICE_PIXELS = 0.5;\n\n/**\n * Manages the visibility of the element.\n *\n * @docs-private\n */\n@Directive({\n host: {\n '[attr.aria-hidden]': 'hidden()',\n '[class.kbq-overflow-item-hidden]': 'hidden()'\n }\n})\nexport class ElementVisibilityManager {\n private readonly renderer = inject(Renderer2);\n private readonly hiddenState = signal(false);\n\n /**\n * @docs-private\n */\n readonly element = kbqInjectNativeElement();\n\n /**\n * Whether the element is hidden.\n *\n * @docs-private\n */\n readonly hidden = computed(() => this.hiddenState());\n\n /**\n * Hides the element.\n *\n * @docs-private\n */\n hide(): void {\n this.renderer.setStyle(this.element, 'visibility', 'hidden');\n this.renderer.setStyle(this.element, 'position', 'absolute');\n this.hiddenState.set(true);\n }\n\n /**\n * Shows the element.\n *\n * @docs-private\n */\n show(): void {\n this.renderer.removeStyle(this.element, 'visibility');\n this.renderer.removeStyle(this.element, 'position');\n this.hiddenState.set(false);\n }\n}\n\n/**\n * Directive for displaying the result of hidden items by the `KbqOverflowItems` directive.\n */\n@Directive({\n selector: '[kbqOverflowItemsResult]',\n host: { class: 'kbq-overflow-items-result' },\n exportAs: 'kbqOverflowItemsResult'\n})\nexport class KbqOverflowItemsResult extends ElementVisibilityManager {}\n\n/**\n * Directive for the item that can be hidden by the `KbqOverflowItems` directive.\n */\n@Directive({\n selector: '[kbqOverflowItem]',\n host: {\n class: 'kbq-overflow-item',\n '[class.kbq-overflow-item_always-visible]': 'alwaysVisible()'\n },\n exportAs: 'kbqOverflowItem'\n})\nexport class KbqOverflowItem extends ElementVisibilityManager {\n /**\n * Unique identifier for the item.\n */\n readonly id = input.required({ alias: 'kbqOverflowItem' });\n /**\n * Defines the order in which the item is processed in the overflow container,\n * without changing its original position in the `QueryList`.\n */\n readonly order = input(null, { transform: numberAttribute });\n /**\n * Element with this attribute will be ignored when hiding and will always remain visible.\n * @default false\n */\n readonly alwaysVisible = input(false, { transform: booleanAttribute });\n\n /**\n * @docs-private\n */\n override hide(): void {\n if (this.alwaysVisible()) return;\n\n super.hide();\n }\n}\n\n/**\n * Directive for managing the visibility of items that overflow the container.\n */\n@Directive({\n selector: '[kbqOverflowItems]',\n host: { class: 'kbq-overflow-items' },\n exportAs: 'kbqOverflowItems'\n})\nexport class KbqOverflowItems {\n private readonly element = kbqInjectNativeElement();\n private readonly resizeObserver = inject(SharedResizeObserver);\n private readonly renderer = inject(Renderer2);\n private readonly document = inject(DOCUMENT);\n private readonly window = inject(KBQ_WINDOW);\n private readonly platform = inject(Platform);\n\n /**\n * `KbqOverflowItem` directive references.\n */\n private readonly items = contentChildren(KbqOverflowItem);\n\n /**\n * `KbqOverflowItemsResult` directive reference.\n */\n private readonly result = contentChild(KbqOverflowItemsResult);\n\n /**\n * Whether the overflow order should be reversed.\n *\n * @example\n * ```\n * [0, 1, hidden, hidden] ---> [hidden, hidden, 2, 3]\n * ```\n *\n * @default false\n */\n readonly reverseOverflowOrder = input(false, { transform: booleanAttribute });\n\n /**\n * Debounce time for recalculating items visibility.\n *\n * @default 0\n */\n readonly debounceTime = input(0, { transform: numberAttribute });\n\n /**\n * List of additional elements to observe for resize changes.\n *\n * @default document.body\n */\n readonly additionalResizeObserverTargets = input<Element | Element[]>(this.document.body);\n\n /**\n * Emits the set of hidden items after every recalculation, also when it has not changed: a recalculation shows every\n * item before it hides the overflown ones again, so a consumer that hides items itself re-applies that here.\n */\n readonly changes = output<ReadonlySet<unknown>>();\n\n /**\n * Set of hidden item IDs.\n */\n readonly hiddenItemIDs = toSignal(outputToObservable(this.changes), {\n initialValue: new Set<unknown>([]) as ReadonlySet<unknown>\n });\n\n /**\n * Defines the orientation of the overflow items.\n *\n * @default 'horizontal'\n */\n readonly orientation = input<KbqOrientation>('horizontal');\n\n /**\n * Defines the wrap of the overflow items.\n *\n * @default 'nowrap'\n */\n readonly wrap = input<KbqFlexWrap>('nowrap');\n\n /** The main axis of each orientation, as the `DOMRect` and `CSSStyleDeclaration` members to read. */\n private readonly orientationConfig: Record<\n KbqOrientation,\n {\n size: 'width' | 'height';\n marginStart: 'marginLeft' | 'marginTop';\n marginEnd: 'marginRight' | 'marginBottom';\n paddingStart: 'paddingLeft' | 'paddingTop';\n paddingEnd: 'paddingRight' | 'paddingBottom';\n borderStart: 'borderLeftWidth' | 'borderTopWidth';\n borderEnd: 'borderRightWidth' | 'borderBottomWidth';\n gap: 'columnGap' | 'rowGap';\n isCrossAxisExceeded: (element: HTMLElement) => boolean;\n flexDirection: KbqFlexDirection;\n }\n > = {\n horizontal: {\n size: 'width',\n marginStart: 'marginLeft',\n marginEnd: 'marginRight',\n paddingStart: 'paddingLeft',\n paddingEnd: 'paddingRight',\n borderStart: 'borderLeftWidth',\n borderEnd: 'borderRightWidth',\n gap: 'columnGap',\n isCrossAxisExceeded: ({ clientHeight, scrollHeight }) => scrollHeight > clientHeight,\n flexDirection: 'row'\n },\n vertical: {\n size: 'height',\n marginStart: 'marginTop',\n marginEnd: 'marginBottom',\n paddingStart: 'paddingTop',\n paddingEnd: 'paddingBottom',\n borderStart: 'borderTopWidth',\n borderEnd: 'borderBottomWidth',\n gap: 'rowGap',\n isCrossAxisExceeded: ({ clientWidth, scrollWidth }) => scrollWidth > clientWidth,\n flexDirection: 'column'\n }\n } as const;\n\n constructor() {\n this.setStyles();\n this.setupObservers();\n }\n\n private setupObservers(): void {\n if (!this.platform.isBrowser) return;\n\n const resizeObservers = merge(\n this.resizeObserver.observe(this.element),\n toObservable(this.additionalResizeObserverTargets).pipe(\n switchMap((targets) => {\n return Array.isArray(targets)\n ? merge(...targets.map((target) => this.resizeObserver.observe(target)))\n : this.resizeObserver.observe(targets);\n })\n )\n );\n\n // What the hidden set depends on besides the geometry.\n const inputs = computed(() => [\n this.items().map((item) => [item.order(), item.alwaysVisible()]),\n this.result(),\n this.reverseOverflowOrder(),\n this.orientation(),\n this.wrap()\n ]);\n\n // A web font that loads lays the items out again without resizing a container of fixed size.\n const fontsLoaded = this.document.fonts ? fromEvent(this.document.fonts, 'loadingdone') : EMPTY;\n\n merge(toObservable(inputs), resizeObservers, fontsLoaded)\n .pipe(debounceTime(this.debounceTime()), takeUntilDestroyed())\n .subscribe(() => {\n const hiddenItems = this.getHiddenItems(\n this.sortItemsByOrder(this.items()),\n this.reverseOverflowOrder(),\n this.result(),\n this.element,\n this.orientation()\n );\n const hiddenItemIDs = new Set(hiddenItems.map(({ id }) => id()));\n\n this.changes.emit(hiddenItemIDs);\n });\n }\n\n /**\n * Sort items by their `order` attribute.\n * If an item does not have an `order` defined, its index is used as a fallback.\n */\n private sortItemsByOrder(items: ReadonlyArray<KbqOverflowItem>): ReadonlyArray<KbqOverflowItem> {\n const itemsWithOrder = Array.from(items, (item, index) => ({ item, order: item.order() ?? index }));\n\n return itemsWithOrder.sort((a, b) => a.order - b.order).map(({ item }) => item);\n }\n\n /**\n * Manages the visibility of items based on the available space in the container and returns the hidden items.\n * Direction of hiding is determined by the `reverseOverflowOrder` attribute.\n */\n private getHiddenItems(\n items: ReadonlyArray<KbqOverflowItem>,\n reverseOverflowOrder: boolean,\n result: KbqOverflowItemsResult | undefined,\n container: HTMLElement,\n orientation: KbqOrientation\n ): ReadonlyArray<KbqOverflowItem> {\n result?.hide();\n items.forEach((item) => item.show());\n\n const hideable = (reverseOverflowOrder ? items : [...items].reverse()).filter(\n ({ alwaysVisible }) => !alwaysVisible()\n );\n const threshold = MIN_OVERFLOW_IN_DEVICE_PIXELS / (this.window.devicePixelRatio || 1);\n let hiddenCount = 0;\n\n if (this.wrap() !== 'wrap') {\n // Hides in one go what the first measurement already shows to be too much, sparing the loop below a layout\n // per item. With every item visible the items are at their smallest and the container at its largest, and\n // the result is not counted yet, so this never hides more than the loop would.\n const { overflow, sizes } = this.measure(container, orientation);\n let excess = overflow;\n\n while (hiddenCount < hideable.length && excess >= threshold) {\n excess -= sizes.get(hideable[hiddenCount].element) ?? 0;\n hideable[hiddenCount++].hide();\n }\n\n if (hiddenCount) result?.show();\n }\n\n while (hiddenCount < hideable.length && this.hasOverflown(container, orientation, threshold)) {\n hideable[hiddenCount++].hide();\n result?.show();\n }\n\n return items.filter(({ hidden }) => hidden());\n }\n\n /**\n * This method sets the necessary styles for the directive.\n */\n private setStyles(): void {\n this.renderer.setStyle(this.element, 'position', 'relative');\n this.renderer.setStyle(this.element, 'overflow', 'hidden');\n this.renderer.setStyle(this.element, 'display', 'flex');\n this.renderer.setStyle(this.element, 'flex-grow', '1');\n\n toObservable(this.orientation)\n .pipe(takeUntilDestroyed())\n .subscribe((orientation) => {\n const { flexDirection } = this.orientationConfig[orientation];\n\n this.renderer.setStyle(this.element, 'flex-direction', flexDirection);\n });\n\n toObservable(this.wrap)\n .pipe(takeUntilDestroyed())\n .subscribe((wrap) => this.renderer.setStyle(this.element, 'flex-wrap', wrap));\n }\n\n private hasOverflown(container: HTMLElement, orientation: KbqOrientation, threshold: number): boolean {\n if (this.wrap() === 'wrap') return this.orientationConfig[orientation].isCrossAxisExceeded(container);\n\n return this.measure(container, orientation).overflow >= threshold;\n }\n\n /**\n * Measures how far the children of the container that take part in its layout exceed its content box along the\n * main axis, and the space each of them takes, its margins and one gap included.\n */\n private measure(\n container: HTMLElement,\n orientation: KbqOrientation\n ): { overflow: number; sizes: ReadonlyMap<Element, number> } {\n const axis = this.orientationConfig[orientation];\n const style = this.window.getComputedStyle(container);\n const size = container.getBoundingClientRect()[axis.size];\n const edges =\n this.px(style[axis.borderStart]) +\n this.px(style[axis.paddingStart]) +\n this.px(style[axis.paddingEnd]) +\n this.px(style[axis.borderEnd]);\n // Rects are measured after transforms and CSS `zoom`, computed lengths before them.\n const layoutSize = parseFloat(style[axis.size]);\n const scale = layoutSize > 0 ? size / (layoutSize + (style.boxSizing === 'border-box' ? 0 : edges)) : 1;\n const gap = this.px(style[axis.gap]) * scale;\n const sizes = new Map<Element, number>();\n // Gaps lie between the children, one fewer than there are.\n let used = -gap;\n\n for (const { element, style: childStyle } of this.getLaidOutChildren(container)) {\n const margins = this.px(childStyle[axis.marginStart]) + this.px(childStyle[axis.marginEnd]);\n const childSize = element.getBoundingClientRect()[axis.size] + margins * scale + gap;\n\n sizes.set(element, childSize);\n used += childSize;\n }\n\n return { overflow: used - (size - edges * scale), sizes };\n }\n\n /**\n * Children of the element that take part in its flex layout: neither `display: none` nor taken out of flow, as\n * hidden items are, with the children of a `display: contents` child in its place.\n */\n private getLaidOutChildren(element: Element): Array<{ element: Element; style: CSSStyleDeclaration }> {\n return Array.from(element.children).flatMap((child) => {\n const style = this.window.getComputedStyle(child);\n\n if (style.display === 'contents') return this.getLaidOutChildren(child);\n\n if (style.display === 'none' || style.position === 'absolute' || style.position === 'fixed') return [];\n\n return [{ element: child, style }];\n });\n }\n\n private px(value: string): number {\n return parseFloat(value) || 0;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqOverflowItem, KbqOverflowItems, KbqOverflowItemsResult } from './overflow-items';\n\nconst COMPONENTS = [\n KbqOverflowItems,\n KbqOverflowItem,\n KbqOverflowItemsResult\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqOverflowItemsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -55,6 +55,8 @@ class KbqSearchExpandable {
55
55
  else {
56
56
  this.runFocusMonitor();
57
57
  }
58
+ // Only an input binding marks this OnPush view; `setDisabledState` and writes from code do not.
59
+ this.changeDetectorRef.markForCheck();
58
60
  }
59
61
  // TODO: Skipped for migration because:
60
62
  // Accessor inputs cannot be migrated as they are too complex.
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-search-expandable.mjs","sources":["../../../packages/components/search-expandable/search-expandable.ts","../../../packages/components/search-expandable/search-expandable.html","../../../packages/components/search-expandable/search-expandable.module.ts","../../../packages/components/search-expandable/koobiq-components-search-expandable.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n inject,\n InjectionToken,\n Input,\n input,\n numberAttribute,\n OnDestroy,\n output,\n QueryList,\n viewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormsModule, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButton, KbqButtonModule } from '@koobiq/components/button';\nimport { KBQ_LOCALE_SERVICE, ruRULocaleData } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInput, KbqInputModule } from '@koobiq/components/input';\nimport { KbqToolTipModule, KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { BehaviorSubject, debounceTime, distinctUntilChanged, filter } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/** default configuration of search-expandable */\nexport const KBQ_SEARCH_EXPANDABLE_DEFAULT_CONFIGURATION = ruRULocaleData.searchExpandable;\n\n/** Injection Token for providing configuration of search-expandable */\nexport const KBQ_SEARCH_EXPANDABLE_CONFIGURATION = new InjectionToken('KbqSearchExpandableConfiguration');\n\nexport const defaultValue = '';\nexport const defaultEmitValueTimeout = 200;\n\n@Component({\n selector: 'kbq-search-expandable',\n imports: [\n KbqButtonModule,\n KbqIconModule,\n KbqInputModule,\n FormsModule,\n KbqToolTipModule,\n ReactiveFormsModule\n ],\n templateUrl: './search-expandable.html',\n styleUrls: ['./search-expandable.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-search-expandable',\n '[class.kbq-search-expandable_opened]': 'isOpened'\n }\n})\nexport class KbqSearchExpandable implements ControlValueAccessor, AfterViewInit, OnDestroy {\n /** @docs-private */\n protected readonly ngControl = inject(NgControl, { optional: true, self: true });\n /** @docs-private */\n protected readonly focusMonitor = inject(FocusMonitor);\n /** @docs-private */\n protected readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n /** @docs-private */\n protected readonly destroyRef = inject(DestroyRef);\n /** @docs-private */\n protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n /** @docs-private */\n protected readonly nativeElement: HTMLElement = inject(ElementRef).nativeElement;\n\n readonly externalConfiguration = inject(KBQ_SEARCH_EXPANDABLE_CONFIGURATION, { optional: true });\n\n @ViewChildren(KbqInput) private input: QueryList<KbqInput>;\n @ViewChildren(KbqButton) private button: QueryList<KbqButton>;\n private readonly tooltip = viewChild(KbqTooltipTrigger);\n\n configuration;\n\n /** Current value in input. */\n value = new BehaviorSubject(defaultValue);\n\n protected lastFocusOrigin: 'touch' | 'mouse' | 'keyboard' | 'program' | null = null;\n\n /** Suppress the automatic input focus once — set when the component auto-opens from a model value. */\n private suppressInputFocus = false;\n\n /** state of component. */\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input({ transform: booleanAttribute }) isOpened = false;\n /** Emit event by enter or not. Default is false */\n readonly isEmitValueByEnterEnabled = input(false);\n /** Timeout in milliseconds for emit event. The default value is taken from defaultEmitValueTimeout */\n readonly emitValueTimeout = input(defaultEmitValueTimeout, { transform: numberAttribute });\n\n /** Tooltip text for the search button. When set, overrides localeData.tooltip */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get tooltipText(): string {\n return this._tooltipText ?? this.localeData?.tooltip;\n }\n\n set tooltipText(value: string | null) {\n this._tooltipText = value;\n }\n\n private _tooltipText: string | null;\n\n /** Placeholder for input when expanded */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get placeholder(): string {\n return this._placeholder ?? this.localeData?.placeholder;\n }\n\n set placeholder(value: string | null) {\n this._placeholder = value;\n }\n\n private _placeholder: string | null = this.localeData?.placeholder;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = value;\n\n if (this._disabled) {\n this.stopFocusMonitor();\n } else {\n this.runFocusMonitor();\n }\n }\n\n private _disabled: boolean = false;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: numberAttribute })\n get tabIndex(): number {\n return this.disabled ? -1 : this._tabIndex;\n }\n\n set tabIndex(value: number) {\n this._tabIndex = value;\n }\n\n private _tabIndex = 0;\n\n /** Event emitted when the search has been toggled. */\n readonly isOpenedChange = output<boolean>();\n\n /** localized data\n * @docs-private */\n get localeData() {\n return this.configuration;\n }\n\n private lastEmittedValue = defaultValue;\n\n constructor() {\n if (!this.ngControl) {\n throw Error(`kbq-search-expandable must be used with the [formControl], [formControlName] or [(ngModel)].`);\n }\n\n this.ngControl.valueAccessor = this;\n\n this.ngControl.valueChanges?.pipe(takeUntilDestroyed()).subscribe((value) => this.value.next(value));\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n\n if (!this.localeService) {\n this.initDefaultParams();\n }\n\n this.value\n .pipe(\n distinctUntilChanged(),\n filter(() => !this.isEmitValueByEnterEnabled()),\n debounceTime(this.emitValueTimeout()),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(this.emitValue);\n }\n\n ngAfterViewInit(): void {\n this.runFocusMonitor();\n\n this.button.changes\n .pipe(\n filter((queryList) => queryList.length),\n map((queryList) => queryList.first),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((button: KbqButton) => {\n const tooltip = this.tooltip();\n\n if (tooltip) {\n tooltip.disabled = true;\n }\n\n this.focusMonitor.focusVia(button.elementRef.nativeElement, this.lastFocusOrigin);\n\n if (tooltip) {\n // Back to what the template binds, not `false`.\n tooltip.disabled = this.disabled;\n }\n });\n\n this.input.changes\n .pipe(\n filter((queryList) => queryList.length),\n map((queryList) => queryList.first),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((input: KbqInput) => {\n if (this.suppressInputFocus) {\n this.suppressInputFocus = false;\n } else {\n input.focus();\n }\n });\n\n // When the component starts opened (e.g. a seeded formControl value), the input is present on\n // first render and `input.changes` never fires to consume the flag — clear it so later\n // user-initiated opens focus the input as usual.\n if (this.input.length) {\n this.suppressInputFocus = false;\n }\n }\n\n ngOnDestroy() {\n this.stopFocusMonitor();\n }\n\n /** @docs-private */\n onChange: (value: string) => void;\n\n /** @docs-private */\n onTouch: () => void = () => {};\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n writeValue(value: string): void {\n this.value.next(value || defaultValue);\n\n // Expand automatically when the model already holds a value, without stealing focus —\n // unless focus is already inside the component (e.g. on the collapsed toggle button\n // that's about to be removed from the DOM), in which case let it move to the input.\n if (value && !this.isOpened && !this.disabled) {\n this.suppressInputFocus = this.lastFocusOrigin === null;\n this.setOpened(true);\n }\n }\n\n /** Implemented as part of ControlValueAccessor. */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n toggle(): void {\n if (this.disabled) return;\n\n this.tooltip()?.hide();\n\n this.setOpened(!this.isOpened);\n }\n\n private setOpened(open: boolean): void {\n if (this.disabled || this.isOpened === open) return;\n\n this.isOpened = open;\n\n if (!open) {\n // Never let a stale suppress-flag survive a close.\n this.suppressInputFocus = false;\n this.value.next(defaultValue);\n // Force the emit — closing must always synchronize the bound control to the reset\n // value, rather than relying on the debounce to eventually settle (it can be raced\n // by a value pushed just before close, silently leaving the control at a stale value).\n this.emitValue(defaultValue, true);\n }\n\n this.isOpenedChange.emit(this.isOpened);\n\n // Ensure the OnPush view re-renders for callers that mutate isOpened from outside this\n // component's own template (e.g. a parent-owned button), whose click marks the parent —\n // not this component — dirty.\n this.changeDetectorRef.markForCheck();\n }\n\n private updateLocaleParams = () => {\n this.configuration = this.externalConfiguration || this.localeService?.getParams('searchExpandable');\n\n this.changeDetectorRef.markForCheck();\n };\n\n private initDefaultParams() {\n this.configuration = KBQ_SEARCH_EXPANDABLE_DEFAULT_CONFIGURATION;\n }\n\n private emitValue = (value: string, forced = false): void => {\n if (value !== this.lastEmittedValue || forced) {\n this.onChange(value);\n this.lastEmittedValue = value;\n }\n };\n\n private runFocusMonitor() {\n this.focusMonitor.monitor(this.nativeElement, true).subscribe((origin) => (this.lastFocusOrigin = origin));\n }\n\n private stopFocusMonitor() {\n this.focusMonitor.stopMonitoring(this.nativeElement);\n }\n}\n","@if (!isOpened) {\n <button\n type=\"button\"\n kbq-button\n class=\"kbq-search-expandable__button\"\n [kbqTooltip]=\"tooltipText\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltipDisabled]=\"disabled\"\n [tabIndex]=\"tabIndex\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n >\n <i kbq-icon=\"kbq-magnifying-glass_16\"></i>\n </button>\n} @else {\n <kbq-form-field class=\"kbq-search-expandable__search\">\n <i kbqPrefix kbq-icon=\"kbq-magnifying-glass_16\"></i>\n\n <input\n kbqInput\n name=\"value\"\n type=\"text\"\n autocomplete=\"off\"\n [tabIndex]=\"tabIndex\"\n [placeholder]=\"placeholder\"\n [formControl]=\"$any(ngControl?.control)\"\n (blur)=\"onTouch()\"\n (keyup.escape)=\"toggle()\"\n />\n\n <i\n kbqSuffix\n kbq-icon-button=\"kbq-circle-xmark_16\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n (keyup.enter)=\"toggle()\"\n ></i>\n </kbq-form-field>\n}\n","import { NgModule } from '@angular/core';\nimport { KbqSearchExpandable } from './search-expandable';\n\n@NgModule({\n imports: [\n KbqSearchExpandable\n ],\n exports: [KbqSearchExpandable]\n})\nexport class KbqSearchExpandableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AA+BA;AACO,MAAM,2CAA2C,GAAG,cAAc,CAAC;AAE1E;MACa,mCAAmC,GAAG,IAAI,cAAc,CAAC,kCAAkC;AAEjG,MAAM,YAAY,GAAG;AACrB,MAAM,uBAAuB,GAAG;MAqB1B,mBAAmB,CAAA;;;;AA0C5B,IAAA,IACI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO;IACxD;IAEA,IAAI,WAAW,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC7B;;;;AAOA,IAAA,IACI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE,WAAW;IAC5D;IAEA,IAAI,WAAW,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC7B;;;AAMA,IAAA,IACI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAEtB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,gBAAgB,EAAE;QAC3B;aAAO;YACH,IAAI,CAAC,eAAe,EAAE;QAC1B;IACJ;;;AAMA,IAAA,IACI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS;IAC9C;IAEA,IAAI,QAAQ,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IAC1B;AAOA;AACmB;AACnB,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,aAAa;IAC7B;AAIA,IAAA,WAAA,GAAA;;AA5GmB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;AAE7D,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;;QAEnC,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAE9D,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAE/B,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAE7C,QAAA,IAAA,CAAA,aAAa,GAAgB,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa;QAEvE,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,mCAAmC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAI/E,QAAA,IAAA,CAAA,OAAO,GAAG,SAAS,CAAC,iBAAiB,mDAAC;;AAKvD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,eAAe,CAAC,YAAY,CAAC;QAE/B,IAAA,CAAA,eAAe,GAAsD,IAAI;;QAG3E,IAAA,CAAA,kBAAkB,GAAG,KAAK;;;;QAKM,IAAA,CAAA,QAAQ,GAAG,KAAK;;AAE/C,QAAA,IAAA,CAAA,yBAAyB,GAAG,KAAK,CAAC,KAAK,qEAAC;;AAExC,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,uBAAuB,oDAAI,SAAS,EAAE,eAAe,EAAA,CAAA,GAAA,CAA5B,EAAE,SAAS,EAAE,eAAe,EAAE,GAAC;AA4BlF,QAAA,IAAA,CAAA,YAAY,GAAkB,IAAI,CAAC,UAAU,EAAE,WAAW;QAmB1D,IAAA,CAAA,SAAS,GAAY,KAAK;QAa1B,IAAA,CAAA,SAAS,GAAG,CAAC;;QAGZ,IAAA,CAAA,cAAc,GAAG,MAAM,EAAW;QAQnC,IAAA,CAAA,gBAAgB,GAAG,YAAY;;AAiFvC,QAAA,IAAA,CAAA,OAAO,GAAe,MAAK,EAAE,CAAC;QA6DtB,IAAA,CAAA,kBAAkB,GAAG,MAAK;AAC9B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,kBAAkB,CAAC;AAEpG,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AACzC,QAAA,CAAC;QAMO,IAAA,CAAA,SAAS,GAAG,CAAC,KAAa,EAAE,MAAM,GAAG,KAAK,KAAU;YACxD,IAAI,KAAK,KAAK,IAAI,CAAC,gBAAgB,IAAI,MAAM,EAAE;AAC3C,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;YACjC;AACJ,QAAA,CAAC;AA1JG,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,MAAM,KAAK,CAAC,CAAA,4FAAA,CAA8F,CAAC;QAC/G;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;QAEnC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAEpG,QAAA,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAEzF,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,IAAI,CAAC,iBAAiB,EAAE;QAC5B;AAEA,QAAA,IAAI,CAAC;AACA,aAAA,IAAI,CACD,oBAAoB,EAAE,EACtB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,EAC/C,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EACrC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEtC,aAAA,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;IAClC;IAEA,eAAe,GAAA;QACX,IAAI,CAAC,eAAe,EAAE;QAEtB,IAAI,CAAC,MAAM,CAAC;AACP,aAAA,IAAI,CACD,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,MAAM,CAAC,EACvC,GAAG,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,KAAK,CAAC,EACnC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEtC,aAAA,SAAS,CAAC,CAAC,MAAiB,KAAI;AAC7B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;YAE9B,IAAI,OAAO,EAAE;AACT,gBAAA,OAAO,CAAC,QAAQ,GAAG,IAAI;YAC3B;AAEA,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC;YAEjF,IAAI,OAAO,EAAE;;AAET,gBAAA,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YACpC;AACJ,QAAA,CAAC,CAAC;QAEN,IAAI,CAAC,KAAK,CAAC;AACN,aAAA,IAAI,CACD,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,MAAM,CAAC,EACvC,GAAG,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,KAAK,CAAC,EACnC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEtC,aAAA,SAAS,CAAC,CAAC,KAAe,KAAI;AAC3B,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YACnC;iBAAO;gBACH,KAAK,CAAC,KAAK,EAAE;YACjB;AACJ,QAAA,CAAC,CAAC;;;;AAKN,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACnB,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;QACnC;IACJ;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,gBAAgB,EAAE;IAC3B;;AASA,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AACxC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;;AAGA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;IACrB;;AAGA,IAAA,UAAU,CAAC,KAAa,EAAA;QACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC;;;;AAKtC,QAAA,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC3C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe,KAAK,IAAI;AACvD,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACxB;IACJ;;AAGA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC9B;IAEA,MAAM,GAAA;QACF,IAAI,IAAI,CAAC,QAAQ;YAAE;AAEnB,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE;QAEtB,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IAClC;AAEQ,IAAA,SAAS,CAAC,IAAa,EAAA;QAC3B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;YAAE;AAE7C,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QAEpB,IAAI,CAAC,IAAI,EAAE;;AAEP,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;;;;AAI7B,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC;QACtC;QAEA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;AAKvC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;IACzC;IAQQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,aAAa,GAAG,2CAA2C;IACpE;IASQ,eAAe,GAAA;QACnB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,MAAM,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,CAAC;IAC9G;IAEQ,gBAAgB,GAAA;QACpB,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC;IACxD;kIAjRS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAiCR,gBAAgB,EAAA,EAAA,yBAAA,EAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAoChB,gBAAgB,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAmBhB,eAAe,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oCAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAtEE,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAFxC,QAAQ,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EACR,SAAS,gDC5E3B,8pCAwCA,EAAA,MAAA,EAAA,CAAA,mTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDGQ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,EAAA,sBAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAWd,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAnB/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EACxB;wBACL,eAAe;wBACf,aAAa;wBACb,cAAc;wBACd,WAAW;wBACX,gBAAgB;wBAChB;AACH,qBAAA,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACF,wBAAA,KAAK,EAAE,uBAAuB;AAC9B,wBAAA,sCAAsC,EAAE;AAC3C,qBAAA,EAAA,QAAA,EAAA,8pCAAA,EAAA,MAAA,EAAA,CAAA,mTAAA,CAAA,EAAA;;sBAkBA,YAAY;uBAAC,QAAQ;;sBACrB,YAAY;uBAAC,SAAS;2EACc,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA;sBAerD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBASrC;;sBAcA;;sBAaA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAmBrC,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;;;ME1I5B,yBAAyB,CAAA;kIAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;mIAAzB,yBAAyB,EAAA,OAAA,EAAA,CAJ9B,mBAAmB,CAAA,EAAA,OAAA,EAAA,CAEb,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAEpB,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,yBAAyB,YAJ9B,mBAAmB,CAAA,EAAA,CAAA,CAAA;;4FAId,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL;AACH,qBAAA;oBACD,OAAO,EAAE,CAAC,mBAAmB;AAChC,iBAAA;;;ACRD;;AAEG;;;;"}
1
+ {"version":3,"file":"koobiq-components-search-expandable.mjs","sources":["../../../packages/components/search-expandable/search-expandable.ts","../../../packages/components/search-expandable/search-expandable.html","../../../packages/components/search-expandable/search-expandable.module.ts","../../../packages/components/search-expandable/koobiq-components-search-expandable.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n inject,\n InjectionToken,\n Input,\n input,\n numberAttribute,\n OnDestroy,\n output,\n QueryList,\n viewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormsModule, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButton, KbqButtonModule } from '@koobiq/components/button';\nimport { KBQ_LOCALE_SERVICE, ruRULocaleData } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInput, KbqInputModule } from '@koobiq/components/input';\nimport { KbqToolTipModule, KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { BehaviorSubject, debounceTime, distinctUntilChanged, filter } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/** default configuration of search-expandable */\nexport const KBQ_SEARCH_EXPANDABLE_DEFAULT_CONFIGURATION = ruRULocaleData.searchExpandable;\n\n/** Injection Token for providing configuration of search-expandable */\nexport const KBQ_SEARCH_EXPANDABLE_CONFIGURATION = new InjectionToken('KbqSearchExpandableConfiguration');\n\nexport const defaultValue = '';\nexport const defaultEmitValueTimeout = 200;\n\n@Component({\n selector: 'kbq-search-expandable',\n imports: [\n KbqButtonModule,\n KbqIconModule,\n KbqInputModule,\n FormsModule,\n KbqToolTipModule,\n ReactiveFormsModule\n ],\n templateUrl: './search-expandable.html',\n styleUrls: ['./search-expandable.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-search-expandable',\n '[class.kbq-search-expandable_opened]': 'isOpened'\n }\n})\nexport class KbqSearchExpandable implements ControlValueAccessor, AfterViewInit, OnDestroy {\n /** @docs-private */\n protected readonly ngControl = inject(NgControl, { optional: true, self: true });\n /** @docs-private */\n protected readonly focusMonitor = inject(FocusMonitor);\n /** @docs-private */\n protected readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n /** @docs-private */\n protected readonly destroyRef = inject(DestroyRef);\n /** @docs-private */\n protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n /** @docs-private */\n protected readonly nativeElement: HTMLElement = inject(ElementRef).nativeElement;\n\n readonly externalConfiguration = inject(KBQ_SEARCH_EXPANDABLE_CONFIGURATION, { optional: true });\n\n @ViewChildren(KbqInput) private input: QueryList<KbqInput>;\n @ViewChildren(KbqButton) private button: QueryList<KbqButton>;\n private readonly tooltip = viewChild(KbqTooltipTrigger);\n\n configuration;\n\n /** Current value in input. */\n value = new BehaviorSubject(defaultValue);\n\n protected lastFocusOrigin: 'touch' | 'mouse' | 'keyboard' | 'program' | null = null;\n\n /** Suppress the automatic input focus once — set when the component auto-opens from a model value. */\n private suppressInputFocus = false;\n\n /** state of component. */\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input({ transform: booleanAttribute }) isOpened = false;\n /** Emit event by enter or not. Default is false */\n readonly isEmitValueByEnterEnabled = input(false);\n /** Timeout in milliseconds for emit event. The default value is taken from defaultEmitValueTimeout */\n readonly emitValueTimeout = input(defaultEmitValueTimeout, { transform: numberAttribute });\n\n /** Tooltip text for the search button. When set, overrides localeData.tooltip */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get tooltipText(): string {\n return this._tooltipText ?? this.localeData?.tooltip;\n }\n\n set tooltipText(value: string | null) {\n this._tooltipText = value;\n }\n\n private _tooltipText: string | null;\n\n /** Placeholder for input when expanded */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get placeholder(): string {\n return this._placeholder ?? this.localeData?.placeholder;\n }\n\n set placeholder(value: string | null) {\n this._placeholder = value;\n }\n\n private _placeholder: string | null = this.localeData?.placeholder;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = value;\n\n if (this._disabled) {\n this.stopFocusMonitor();\n } else {\n this.runFocusMonitor();\n }\n\n // Only an input binding marks this OnPush view; `setDisabledState` and writes from code do not.\n this.changeDetectorRef.markForCheck();\n }\n\n private _disabled: boolean = false;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: numberAttribute })\n get tabIndex(): number {\n return this.disabled ? -1 : this._tabIndex;\n }\n\n set tabIndex(value: number) {\n this._tabIndex = value;\n }\n\n private _tabIndex = 0;\n\n /** Event emitted when the search has been toggled. */\n readonly isOpenedChange = output<boolean>();\n\n /** localized data\n * @docs-private */\n get localeData() {\n return this.configuration;\n }\n\n private lastEmittedValue = defaultValue;\n\n constructor() {\n if (!this.ngControl) {\n throw Error(`kbq-search-expandable must be used with the [formControl], [formControlName] or [(ngModel)].`);\n }\n\n this.ngControl.valueAccessor = this;\n\n this.ngControl.valueChanges?.pipe(takeUntilDestroyed()).subscribe((value) => this.value.next(value));\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n\n if (!this.localeService) {\n this.initDefaultParams();\n }\n\n this.value\n .pipe(\n distinctUntilChanged(),\n filter(() => !this.isEmitValueByEnterEnabled()),\n debounceTime(this.emitValueTimeout()),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(this.emitValue);\n }\n\n ngAfterViewInit(): void {\n this.runFocusMonitor();\n\n this.button.changes\n .pipe(\n filter((queryList) => queryList.length),\n map((queryList) => queryList.first),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((button: KbqButton) => {\n const tooltip = this.tooltip();\n\n if (tooltip) {\n tooltip.disabled = true;\n }\n\n this.focusMonitor.focusVia(button.elementRef.nativeElement, this.lastFocusOrigin);\n\n if (tooltip) {\n // Back to what the template binds, not `false`.\n tooltip.disabled = this.disabled;\n }\n });\n\n this.input.changes\n .pipe(\n filter((queryList) => queryList.length),\n map((queryList) => queryList.first),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((input: KbqInput) => {\n if (this.suppressInputFocus) {\n this.suppressInputFocus = false;\n } else {\n input.focus();\n }\n });\n\n // When the component starts opened (e.g. a seeded formControl value), the input is present on\n // first render and `input.changes` never fires to consume the flag — clear it so later\n // user-initiated opens focus the input as usual.\n if (this.input.length) {\n this.suppressInputFocus = false;\n }\n }\n\n ngOnDestroy() {\n this.stopFocusMonitor();\n }\n\n /** @docs-private */\n onChange: (value: string) => void;\n\n /** @docs-private */\n onTouch: () => void = () => {};\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n writeValue(value: string): void {\n this.value.next(value || defaultValue);\n\n // Expand automatically when the model already holds a value, without stealing focus —\n // unless focus is already inside the component (e.g. on the collapsed toggle button\n // that's about to be removed from the DOM), in which case let it move to the input.\n if (value && !this.isOpened && !this.disabled) {\n this.suppressInputFocus = this.lastFocusOrigin === null;\n this.setOpened(true);\n }\n }\n\n /** Implemented as part of ControlValueAccessor. */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n toggle(): void {\n if (this.disabled) return;\n\n this.tooltip()?.hide();\n\n this.setOpened(!this.isOpened);\n }\n\n private setOpened(open: boolean): void {\n if (this.disabled || this.isOpened === open) return;\n\n this.isOpened = open;\n\n if (!open) {\n // Never let a stale suppress-flag survive a close.\n this.suppressInputFocus = false;\n this.value.next(defaultValue);\n // Force the emit — closing must always synchronize the bound control to the reset\n // value, rather than relying on the debounce to eventually settle (it can be raced\n // by a value pushed just before close, silently leaving the control at a stale value).\n this.emitValue(defaultValue, true);\n }\n\n this.isOpenedChange.emit(this.isOpened);\n\n // Ensure the OnPush view re-renders for callers that mutate isOpened from outside this\n // component's own template (e.g. a parent-owned button), whose click marks the parent —\n // not this component — dirty.\n this.changeDetectorRef.markForCheck();\n }\n\n private updateLocaleParams = () => {\n this.configuration = this.externalConfiguration || this.localeService?.getParams('searchExpandable');\n\n this.changeDetectorRef.markForCheck();\n };\n\n private initDefaultParams() {\n this.configuration = KBQ_SEARCH_EXPANDABLE_DEFAULT_CONFIGURATION;\n }\n\n private emitValue = (value: string, forced = false): void => {\n if (value !== this.lastEmittedValue || forced) {\n this.onChange(value);\n this.lastEmittedValue = value;\n }\n };\n\n private runFocusMonitor() {\n this.focusMonitor.monitor(this.nativeElement, true).subscribe((origin) => (this.lastFocusOrigin = origin));\n }\n\n private stopFocusMonitor() {\n this.focusMonitor.stopMonitoring(this.nativeElement);\n }\n}\n","@if (!isOpened) {\n <button\n type=\"button\"\n kbq-button\n class=\"kbq-search-expandable__button\"\n [kbqTooltip]=\"tooltipText\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [kbqTooltipDisabled]=\"disabled\"\n [tabIndex]=\"tabIndex\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n >\n <i kbq-icon=\"kbq-magnifying-glass_16\"></i>\n </button>\n} @else {\n <kbq-form-field class=\"kbq-search-expandable__search\">\n <i kbqPrefix kbq-icon=\"kbq-magnifying-glass_16\"></i>\n\n <input\n kbqInput\n name=\"value\"\n type=\"text\"\n autocomplete=\"off\"\n [tabIndex]=\"tabIndex\"\n [placeholder]=\"placeholder\"\n [formControl]=\"$any(ngControl?.control)\"\n (blur)=\"onTouch()\"\n (keyup.escape)=\"toggle()\"\n />\n\n <i\n kbqSuffix\n kbq-icon-button=\"kbq-circle-xmark_16\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n (keyup.enter)=\"toggle()\"\n ></i>\n </kbq-form-field>\n}\n","import { NgModule } from '@angular/core';\nimport { KbqSearchExpandable } from './search-expandable';\n\n@NgModule({\n imports: [\n KbqSearchExpandable\n ],\n exports: [KbqSearchExpandable]\n})\nexport class KbqSearchExpandableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}