@koobiq/components 20.1.0 → 20.2.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 (120) hide show
  1. package/accordion/_accordion-theme.scss +1 -1
  2. package/accordion/accordion-tokens.scss +1 -0
  3. package/accordion/{accordion-trigger.component.scss → accordion-trigger.scss} +4 -0
  4. package/accordion/{accordion.component.scss → accordion.scss} +3 -3
  5. package/accordion/index.d.ts +215 -119
  6. package/alert/_alert-theme.scss +14 -0
  7. package/alert/alert.component.scss +24 -13
  8. package/alert/index.d.ts +63 -29
  9. package/autocomplete/autocomplete.scss +2 -1
  10. package/autocomplete/index.d.ts +35 -29
  11. package/badge/index.d.ts +2 -3
  12. package/clamped-text/index.d.ts +3 -2
  13. package/core/index.d.ts +116 -11
  14. package/core/styles/_core.scss +2 -0
  15. package/core/styles/common/_animation.scss +31 -24
  16. package/core/styles/common/_connected-overlay.scss +36 -0
  17. package/core/styles/common/_select.scss +7 -2
  18. package/dropdown/dropdown-item.scss +16 -0
  19. package/dropdown/dropdown-tokens.scss +2 -1
  20. package/dropdown/dropdown.scss +9 -0
  21. package/dropdown/index.d.ts +73 -6
  22. package/fesm2022/koobiq-components-accordion.mjs +406 -303
  23. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  24. package/fesm2022/koobiq-components-actions-panel.mjs +1 -1
  25. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  26. package/fesm2022/koobiq-components-alert.mjs +88 -48
  27. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  28. package/fesm2022/koobiq-components-app-switcher.mjs +1 -1
  29. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  30. package/fesm2022/koobiq-components-autocomplete.mjs +37 -23
  31. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  32. package/fesm2022/koobiq-components-badge.mjs +5 -4
  33. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  34. package/fesm2022/koobiq-components-breadcrumbs.mjs +1 -1
  35. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  36. package/fesm2022/koobiq-components-clamped-text.mjs +5 -0
  37. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  38. package/fesm2022/koobiq-components-code-block.mjs +1 -1
  39. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  40. package/fesm2022/koobiq-components-core.mjs +98 -4
  41. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  42. package/fesm2022/koobiq-components-datepicker.mjs +10 -7
  43. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  44. package/fesm2022/koobiq-components-dropdown.mjs +99 -20
  45. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  46. package/fesm2022/koobiq-components-file-upload.mjs +2 -2
  47. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  48. package/fesm2022/koobiq-components-filter-bar.mjs +203 -32
  49. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  50. package/fesm2022/koobiq-components-form-field.mjs +4 -4
  51. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  52. package/fesm2022/koobiq-components-icon.mjs +14 -5
  53. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  54. package/fesm2022/koobiq-components-inline-edit.mjs +4 -2
  55. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  56. package/fesm2022/koobiq-components-navbar.mjs +117 -22
  57. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  58. package/fesm2022/koobiq-components-notification-center.mjs +19 -4
  59. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  60. package/fesm2022/koobiq-components-popover.mjs +5 -0
  61. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  62. package/fesm2022/koobiq-components-search-expandable.mjs +43 -8
  63. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  64. package/fesm2022/koobiq-components-select.mjs +36 -45
  65. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  66. package/fesm2022/koobiq-components-split-button.mjs +3 -10
  67. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  68. package/fesm2022/koobiq-components-tabs.mjs +29 -17
  69. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  70. package/fesm2022/koobiq-components-tags.mjs +1 -1
  71. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  72. package/fesm2022/koobiq-components-timepicker.mjs +3 -4
  73. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  74. package/fesm2022/koobiq-components-timezone.mjs +3 -5
  75. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  76. package/fesm2022/koobiq-components-toast.mjs +1 -1
  77. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  78. package/fesm2022/koobiq-components-tooltip.mjs +118 -6
  79. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  80. package/fesm2022/koobiq-components-tree-select.mjs +39 -31
  81. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  82. package/filter-bar/_filter-bar-theme.scss +0 -4
  83. package/filter-bar/filter-bar-tokens.scss +3 -0
  84. package/filter-bar/filters.scss +3 -2
  85. package/filter-bar/index.d.ts +62 -3
  86. package/filter-bar/pipes/base-pipe.scss +0 -11
  87. package/filter-bar/pipes/pipe-input.scss +10 -0
  88. package/icon/icon-button.scss +3 -1
  89. package/icon/index.d.ts +15 -2
  90. package/navbar/_navbar-item_vertical.scss +7 -5
  91. package/navbar/index.d.ts +38 -4
  92. package/navbar/navbar-brand.scss +17 -7
  93. package/notification-center/index.d.ts +2 -1
  94. package/package.json +3 -3
  95. package/prebuilt-themes/dark-theme.css +1 -1
  96. package/prebuilt-themes/light-theme.css +1 -1
  97. package/prebuilt-themes/theme.css +1 -1
  98. package/schematics/collection.json +10 -0
  99. package/schematics/migrations/alert-signals/README.md +64 -0
  100. package/schematics/migrations/alert-signals/data.js +70 -0
  101. package/schematics/migrations/alert-signals/index.js +350 -0
  102. package/schematics/migrations/alert-signals/schema.json +20 -0
  103. package/schematics/migrations/autocomplete-panel-width-auto/README.md +68 -0
  104. package/schematics/migrations/autocomplete-panel-width-auto/index.js +70 -0
  105. package/schematics/migrations/autocomplete-panel-width-auto/schema.json +15 -0
  106. package/schematics/migrations/filter-bar-signals/README.md +1 -1
  107. package/schematics/migrations.json +11 -1
  108. package/schematics/ng-add/index.js +1 -1
  109. package/schematics/utils/angular-parsing.js +11 -2
  110. package/search-expandable/index.d.ts +3 -0
  111. package/select/index.d.ts +51 -24
  112. package/tabs/_tabs-common.scss +60 -31
  113. package/tabs/_tabs-theme.scss +12 -0
  114. package/tabs/index.d.ts +2 -2
  115. package/tabs/tab-header.scss +14 -0
  116. package/tabs/tab-nav-bar.scss +4 -0
  117. package/tabs/tabs-tokens.scss +1 -0
  118. package/timezone/index.d.ts +1 -3
  119. package/tooltip/index.d.ts +73 -4
  120. package/tree-select/index.d.ts +46 -22
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-filter-bar.mjs","sources":["../../../packages/components/filter-bar/pipes/base-pipe.ts","../../../packages/components/filter-bar/pipes/pipe-state.ts","../../../packages/components/filter-bar/pipes/pipe-button.ts","../../../packages/components/filter-bar/pipes/pipe-date-base.ts","../../../packages/components/filter-bar/pipes/pipe-date.ts","../../../packages/components/filter-bar/pipes/pipe-date.html","../../../packages/components/filter-bar/pipes/pipe-datetime.ts","../../../packages/components/filter-bar/pipes/pipe-datetime.html","../../../packages/components/filter-bar/pipes/multi-select-pipe-state.ts","../../../packages/components/filter-bar/pipes/pipe-multi-select.ts","../../../packages/components/filter-bar/pipes/pipe-multi-select.html","../../../packages/components/filter-bar/pipes/tree-select-pipe-base.ts","../../../packages/components/filter-bar/pipes/pipe-multi-tree-select.ts","../../../packages/components/filter-bar/pipes/pipe-multi-tree-select.html","../../../packages/components/filter-bar/pipes/pipe-readonly.ts","../../../packages/components/filter-bar/pipes/pipe-select.ts","../../../packages/components/filter-bar/pipes/pipe-select.html","../../../packages/components/filter-bar/pipes/pipe-text.ts","../../../packages/components/filter-bar/pipes/pipe-text.html","../../../packages/components/filter-bar/pipes/pipe-tree-select.ts","../../../packages/components/filter-bar/pipes/pipe-tree-select.html","../../../packages/components/filter-bar/filter-bar.types.ts","../../../packages/components/filter-bar/filter-reset.ts","../../../packages/components/filter-bar/filter-bar-button.ts","../../../packages/components/filter-bar/filter-save-popover.ts","../../../packages/components/filter-bar/filters.ts","../../../packages/components/filter-bar/filters.html","../../../packages/components/filter-bar/filter-bar.ts","../../../packages/components/filter-bar/filter-refresher.ts","../../../packages/components/filter-bar/pipe-add.ts","../../../packages/components/filter-bar/pipe.directive.ts","../../../packages/components/filter-bar/filter-bar.module.ts","../../../packages/components/filter-bar/koobiq-components-filter-bar.ts"],"sourcesContent":["import { FocusMonitor, FocusOrigin, InputModalityDetector } from '@angular/cdk/a11y';\nimport { DOCUMENT } from '@angular/common';\nimport {\n afterNextRender,\n AfterViewInit,\n ChangeDetectorRef,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n InjectionToken,\n TemplateRef\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { isMac } from '@koobiq/components/core';\nimport { Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport {\n KBQ_FILTER_BAR_DEFAULT_CONFIGURATION,\n KBQ_FILTER_BAR_HOST,\n KbqFilterBarConfiguration,\n KbqPipeData,\n KbqPipeTemplate,\n KbqPipeType\n} from '../filter-bar.types';\n\n/** Injection Token for providing configuration of filter-bar */\nexport const KBQ_PIPE_DATA = new InjectionToken('KBQ_PIPE_DATA');\n\n/** function to get unique identifier of an element */\nexport function getId(item: KbqPipeTemplate): KbqPipeType | string | number {\n return item?.id ?? item?.name;\n}\n\n@Directive({\n host: {\n class: 'kbq-pipe',\n '[class]': '\"kbq-pipe__\" + data.type',\n '[class.kbq-pipe_empty]': 'isEmpty',\n '[class.kbq-pipe_cleanable]': 'data.cleanable',\n '[class.kbq-pipe_removable]': 'data.removable',\n '[class.kbq-pipe_disabled]': 'data.disabled'\n }\n})\nexport abstract class KbqBasePipe<V> implements AfterViewInit {\n /** changes of state */\n readonly stateChanges = new Subject<void>();\n /** pipe data. Provided from subclass */\n readonly data = inject<KbqPipeData<V>>(KBQ_PIPE_DATA);\n\n /** KbqFilterBar instance\n * @docs-private */\n protected readonly filterBar = inject(KBQ_FILTER_BAR_HOST, { optional: true });\n /** @docs-private */\n protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n /** @docs-private */\n protected readonly destroyRef = inject(DestroyRef);\n /** @docs-private */\n protected readonly focusMonitor = inject(FocusMonitor);\n /** @docs-private */\n protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly inputModalityDetector = inject(InputModalityDetector);\n private readonly document = inject(DOCUMENT);\n\n /** Last known focus origin within the pipe. Used to preserve the keyboard focus ring on restore. */\n private focusOrigin: FocusOrigin = null;\n\n /**\n * Whether this pipe has been destroyed. Guards deferred (`setTimeout`) work that could otherwise\n * read view queries or mutate `data` after the pipe was removed or the filter switched.\n * @docs-private\n */\n protected destroyed = false;\n\n /** values to select from the pipe template */\n protected values;\n /** TemplateRef for selecting an option */\n protected valueTemplate?: TemplateRef<any> | string;\n\n /**\n * Whether the current platform is a Mac.\n *\n * @docs-private\n */\n isMac = false;\n\n /** Data for the pipe.\n * @docs-private */\n $implicit: unknown;\n\n /** Whether the current pipe is empty. Used for apply style modifier */\n get isEmpty(): boolean {\n return this.data.value === null || this.data.value === undefined;\n }\n\n /** Whether the current pipe is removable or cleanable. Used for apply style modifier */\n get showRemoveButton(): boolean {\n return this.data.removable || (this.data.cleanable && !this.isEmpty);\n }\n\n /** localized data\n * @docs-private */\n get localeData(): KbqFilterBarConfiguration {\n return this.filterBar?.configuration ?? KBQ_FILTER_BAR_DEFAULT_CONFIGURATION;\n }\n\n constructor() {\n this.$implicit = this;\n\n this.stateChanges.pipe(takeUntilDestroyed()).subscribe(() => {\n this.changeDetectorRef.markForCheck();\n });\n\n this.filterBar?.internalTemplatesChanges.pipe(takeUntilDestroyed()).subscribe(this.updateTemplates);\n\n // Track the focus origin so the trigger's keyboard focus ring can be restored after\n // a value is chosen. `checkChildren` captures focus on the inner trigger button.\n this.focusMonitor\n .monitor(this.elementRef, true)\n .pipe(\n filter((origin) => !!origin),\n takeUntilDestroyed()\n )\n .subscribe((origin) => (this.focusOrigin = origin));\n\n this.destroyRef.onDestroy(() => {\n this.destroyed = true;\n this.focusMonitor.stopMonitoring(this.elementRef);\n });\n\n afterNextRender(() => {\n this.isMac = isMac();\n });\n }\n\n ngAfterViewInit(): void {\n if (this.data.openOnAdd) {\n delete this.data.openOnAdd;\n\n this.open();\n }\n\n this.filterBar?.openPipe.pipe(filter(Boolean), takeUntilDestroyed(this.destroyRef)).subscribe((id) => {\n if (getId(this.data) === id) {\n this.open();\n }\n });\n\n if (this.data.openOnReset) {\n this.filterBar?.onResetFilter.pipe(filter(Boolean), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.open();\n });\n }\n }\n\n /** templateRef checker utility */\n isTemplateRef(value: unknown): boolean {\n return value instanceof TemplateRef;\n }\n\n /** updates values for selection and value template */\n updateTemplates = (templates: KbqPipeTemplate[] | null) => {\n const template = templates?.find((template) => getId(template) === getId(this.data));\n\n if (template?.values) {\n this.values = template.values;\n this.valueTemplate = template.valueTemplate;\n }\n };\n\n /** removes pipe from filter-bar and triggers changes */\n onRemove() {\n this.filterBar?.removePipe(this.data);\n\n this.stateChanges.next();\n }\n\n /** clears the pipe and triggers changes */\n onClear() {\n this.data.value = null;\n\n this.stateChanges.next();\n\n this.filterBar?.onClearPipe.emit(this.data);\n this.filterBar?.onChangePipe.emit(this.data);\n }\n\n /**\n * Restores focus to the pipe's trigger button after a value is chosen or the panel closes.\n * Focuses via {@link FocusMonitor} with the captured origin so a keyboard-driven interaction\n * keeps its focus ring, while a mouse-driven one does not.\n *\n * @docs-private\n */\n protected restoreTriggerFocus(): void {\n const active = this.document.activeElement;\n\n // The panel may have been closed by moving focus to another interactive element\n // (e.g. an outside click) — stealing focus back would break the user's intent.\n // Focus inside the pipe or inside a not-yet-detached overlay is fine to take over.\n if (\n active &&\n active !== this.document.body &&\n !this.elementRef.nativeElement.contains(active) &&\n !active.closest('.cdk-overlay-container')\n ) {\n return;\n }\n\n const trigger = this.elementRef.nativeElement.querySelector<HTMLElement>(\n 'button:not(.kbq-pipe__remove-button)'\n );\n\n // A pipe opened right after being added from pipe-add never received focus itself,\n // so `focusOrigin` is unknown there — fall back to the detected input modality.\n const origin = this.focusOrigin ?? this.inputModalityDetector.mostRecentModality ?? 'program';\n\n if (trigger) {\n this.focusMonitor.focusVia(trigger, origin);\n }\n }\n\n /** @docs-private */\n abstract open(): void;\n}\n\n@Directive({\n selector: '[kbqPipeMinWidth]',\n host: {\n '[style.min-width]': 'minWidth'\n }\n})\nexport class KbqPipeMinWidth {\n /** KbqFilterBar instance */\n protected readonly filterBar = inject(KBQ_FILTER_BAR_HOST, { optional: true });\n\n /** @docs-private */\n protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n /** @docs-private */\n protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n /** @docs-private */\n protected minWidth: string;\n /** maximal symbols for apply fit-content to min-width */\n maxSymbolsForFitContent: number = 20;\n\n /** current length of text */\n get textLength(): number {\n return this.elementRef.nativeElement.innerText?.length || 0;\n }\n\n constructor() {\n // Recompute the min-width whenever the filter changes. The pipe's text content updates during CD,\n // so defer the read to the next macrotask (mirrors the old `changes.pipe(delay(0))`). Passing the\n // `filterBar.filter` read into the scheduler subscribes the effect, replacing the `changes` bus.\n effect((onCleanup) => onCleanup(this.scheduleMinWidthUpdate(this.filterBar?.filter())));\n\n afterNextRender({ read: this.update });\n }\n\n update = () => {\n this.minWidth = this.textLength < this.maxSymbolsForFitContent ? 'fit-content' : 'unset';\n this.changeDetectorRef.markForCheck();\n };\n\n /** Schedules a deferred min-width recompute and returns the effect-cleanup that cancels it. */\n private scheduleMinWidthUpdate(_filter: unknown): () => void {\n const timerId = setTimeout(this.update);\n\n return () => clearTimeout(timerId);\n }\n}\n","import { Directive, effect, inject, input } from '@angular/core';\nimport { KbqButton, KbqButtonStyles } from '@koobiq/components/button';\nimport { KbqComponentColors } from '@koobiq/components/core';\nimport { KBQ_FILTER_BAR_HOST } from '../filter-bar.types';\nimport { KbqBasePipe } from './base-pipe';\n\n@Directive({\n selector: '[kbqPipeState]'\n})\nexport class KbqPipeState<T> {\n /** @docs-private */\n private readonly button = inject(KbqButton);\n /** @docs-private */\n private readonly pipe = inject(KbqBasePipe);\n /** KbqFilterBar instance\n * @docs-private */\n private readonly filterBar = inject(KBQ_FILTER_BAR_HOST);\n\n /** Pipe state used to calculate/update the button style. */\n readonly state = input<T | null>(null, { alias: 'kbqPipeState' });\n\n constructor() {\n // Re-derive the button style whenever the filter OR the pipe state changes (a pipe's emptiness may\n // change with either). Passing both reads into `updateState` subscribes this effect to both signals;\n // the style itself derives from `pipe.isEmpty`.\n effect(() => this.updateState(this.filterBar.filter(), this.state()));\n }\n\n private updateState = (_filter?: unknown, _state?: unknown) => {\n this.button.kbqStyle = KbqButtonStyles.Outline;\n this.button.color = KbqComponentColors.ContrastFade;\n\n if (!this.pipe.isEmpty) {\n this.button.kbqStyle = KbqButtonStyles.Filled;\n this.button.color = KbqComponentColors.ContrastFade;\n }\n };\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n effect,\n inject,\n input,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { KBQ_FILTER_BAR_HOST } from '../filter-bar.types';\nimport { KbqBasePipe } from './base-pipe';\nimport { KbqPipeState } from './pipe-state';\n\n@Component({\n selector: 'kbq-pipe-button',\n imports: [\n KbqIconModule,\n KbqButtonModule,\n KbqPipeState,\n KbqTooltipTrigger\n ],\n template: `\n <button\n kbqTooltip=\"{{ pipe.data.cleanable ? localeData.clearButtonTooltip : localeData.removeButtonTooltip }}\"\n class=\"kbq-pipe__remove-button\"\n kbq-button\n [attr.aria-label]=\"pipe.data.cleanable ? localeData.clearButtonTooltip : localeData.removeButtonTooltip\"\n [disabled]=\"pipe.data.disabled\"\n [kbqPipeState]=\"pipe.data\"\n [kbqTooltipDisabled]=\"pipe.data.disabled\"\n (click)=\"pipe.data.cleanable ? pipe.onClear() : pipe.onRemove()\"\n >\n <i kbq-icon=\"kbq-xmark-s_16\" aria-hidden=\"true\" [color]=\"pipe.data.disabled ? 'empty' : 'contrast'\"></i>\n </button>\n `,\n styleUrl: 'pipe-button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-pipe-button'\n }\n})\nexport class KbqPipeButton {\n /** KbqPipe instance */\n protected readonly pipe = inject(KbqBasePipe);\n /** KbqFilterBar instance */\n protected readonly filterBar = inject(KBQ_FILTER_BAR_HOST);\n /** @docs-private */\n protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n /** enables/disables read-only state */\n readonly readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** localized data\n * @docs-private */\n get localeData() {\n return this.filterBar?.configuration.pipe;\n }\n\n constructor() {\n this.pipe.stateChanges.pipe(takeUntilDestroyed()).subscribe(() => this.changeDetectorRef.markForCheck());\n\n // Reading the filter signal subscribes this effect; the pipe template renders plain `data`\n // (not signals), so mark it for check whenever the filter changes — replaces the retired `changes` bus.\n effect(() => {\n this.filterBar.filter();\n this.changeDetectorRef.markForCheck();\n });\n }\n}\n","import { AfterViewInit, Directive, inject, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { KbqButton, KbqButtonStyles } from '@koobiq/components/button';\nimport { DateAdapter, DateFormatter, ENTER, KbqComponentColors, PopUpPlacements } from '@koobiq/components/core';\nimport { KbqListSelection } from '@koobiq/components/list';\nimport { KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { KbqDateTimeValue } from '../filter-bar.types';\nimport { KbqBasePipe } from './base-pipe';\n\n/**\n * Shared implementation for the `date` and `datetime` pipes. The two pipes differ only in how a range\n * is formatted and in their default start/end values, exposed here as the {@link formatRange},\n * {@link getDefaultStart} and {@link getDefaultEnd} hooks. Everything else — the period list / custom\n * period flow, calendar handling and form group — is common.\n */\n@Directive()\nexport abstract class KbqPipeDateBaseComponent<D> extends KbqBasePipe<KbqDateTimeValue> implements AfterViewInit {\n // The concrete date type `D` is unconstrained, so the adapter/formatter are used loosely here,\n // matching the behaviour the `date`/`datetime` pipes had before this base class was extracted.\n protected readonly adapter: DateAdapter<any> = inject(DateAdapter);\n protected readonly formatter: DateFormatter<any> = inject(DateFormatter);\n\n /** @docs-private */\n protected readonly placements = PopUpPlacements;\n /** @docs-private */\n protected readonly styles = KbqButtonStyles;\n /** @docs-private */\n protected readonly colors = KbqComponentColors;\n\n /** Whether the current state is list of periods. When false will displayed control for set custom period */\n protected isListMode = true;\n\n /** @docs-private */\n protected formGroup: FormGroup;\n\n /** @docs-private */\n protected showStartCalendar: boolean = false;\n /** @docs-private */\n protected showEndCalendar: boolean = false;\n\n /** @docs-private */\n readonly popover = viewChild.required<KbqPopoverTrigger>('popover');\n /** @docs-private */\n // Optional: the list only exists while the popover is open in list mode, and it is read\n // in deferred callbacks that may fire after the popover has already closed.\n readonly listSelection = viewChild('listSelection', { read: KbqListSelection });\n /** @docs-private */\n readonly returnButton = viewChild.required('returnButton', { read: KbqButton });\n\n /** formatted value for period */\n get formattedValue(): string {\n if (this.start && this.end) {\n return this.formatRange(this.start, this.end);\n }\n\n return this.data.value?.name ?? '';\n }\n\n /** Whether the current pipe is disabled. */\n get disabled(): boolean {\n return (\n !this.adapter.isDateInstance(this.formGroup.controls.start.value) ||\n !this.adapter.isDateInstance(this.formGroup.controls.end.value) ||\n this.formGroup.controls.start.invalid\n );\n }\n\n /** parsed start */\n get start(): D {\n return this.adapter.parse(this.data.value?.start, '');\n }\n\n /** default object for start */\n get defaultStart(): D {\n if (this.data.value?.start) {\n return this.adapter.today().plus(this.data.value?.start);\n }\n\n return this.getDefaultStart();\n }\n\n /** parsed end */\n get end(): D {\n return this.adapter.parse(this.data.value?.end, '');\n }\n\n /** default object for end */\n get defaultEnd(): D {\n if (this.data.value?.start) {\n return this.adapter.today();\n }\n\n return this.getDefaultEnd();\n }\n\n /** Whether the current pipe is empty. */\n override get isEmpty(): boolean {\n if (this.data.value === null) return true;\n\n if (this.data.value?.name) return false;\n\n return !this.adapter.isDateInstance(this.start) || !this.adapter.isDateInstance(this.end);\n }\n\n override ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.popover()\n .visibleChange.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((visible) => {\n if (visible) {\n // Move keyboard focus onto the period list so Enter selects a preset\n // instead of the focus trap landing on the \"custom period\" row.\n if (this.isListMode) {\n setTimeout(() => this.listSelection()?.focus());\n }\n } else {\n this.filterBar?.onClosePipe.emit(this.data);\n }\n });\n }\n\n /** keydown handler\n * @docs-private */\n onKeydown($event: KeyboardEvent) {\n if (($event.ctrlKey || $event.metaKey) && $event.keyCode === ENTER) {\n this.onApplyPeriod();\n }\n\n if ($event.keyCode === ENTER) {\n $event.preventDefault();\n }\n }\n\n onApplyPeriod() {\n this.data.value = {\n start: this.formGroup.controls.start.value.toISO(),\n end: this.formGroup.controls.end.value.toISO()\n };\n this.stateChanges.next();\n\n this.filterBar?.onChangePipe.emit(this.data);\n\n this.popover().hide();\n\n setTimeout(() => this.restoreTriggerFocus());\n }\n\n onSelect(item: KbqDateTimeValue) {\n this.data.value = item;\n this.stateChanges.next();\n\n this.filterBar?.onChangePipe.emit(this.data);\n\n this.popover().hide();\n\n setTimeout(() => this.restoreTriggerFocus());\n }\n\n showPeriod() {\n this.isListMode = false;\n this.showStartCalendar = false;\n this.showEndCalendar = false;\n\n this.initFormGroup();\n\n setTimeout(() => {\n if (this.destroyed) return;\n\n this.popover().updatePosition(true);\n // Focus via FocusMonitor (keyboard origin) so the focus ring is preserved; a native\n // `.focus()` bypasses FocusMonitor and drops the `.cdk-keyboard-focused` ring.\n this.returnButton().focusViaKeyboard();\n });\n }\n\n showList() {\n this.isListMode = true;\n\n setTimeout(() => this.listSelection()?.focus());\n this.popover().updatePosition(true);\n }\n\n /** opens popover */\n override open() {\n this.popover().show();\n }\n\n onSelectStartDate(value: D) {\n this.formGroup.controls.start.setValue(value);\n }\n\n onSelectEndDate(value: D) {\n this.formGroup.controls.end.setValue(value);\n }\n\n onFocusStartInput() {\n this.showStartCalendar = true;\n this.showEndCalendar = false;\n\n this.popover().updatePosition(true);\n }\n\n onFocusEndInput() {\n this.showEndCalendar = true;\n this.showStartCalendar = false;\n }\n\n hideCalendars() {\n this.showStartCalendar = false;\n this.showEndCalendar = false;\n }\n\n /** Formats the selected range for display. */\n protected abstract formatRange(start: D, end: D): string;\n\n /** Default start value used when the pipe has no stored `start`. */\n protected abstract getDefaultStart(): D;\n\n /** Default end value used when the pipe has no stored `start`. */\n protected abstract getDefaultEnd(): D;\n\n private initFormGroup() {\n this.formGroup = new FormGroup({\n start: new FormControl(this.start || this.defaultStart),\n end: new FormControl(this.end || this.defaultEnd)\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqFormattersModule } from '@koobiq/components/core';\nimport { KbqDatepickerModule } from '@koobiq/components/datepicker';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqListModule } from '@koobiq/components/list';\nimport { KbqPopoverModule } from '@koobiq/components/popover';\nimport { KbqTimepickerModule } from '@koobiq/components/timepicker';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqBasePipe } from './base-pipe';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeDateBaseComponent } from './pipe-date-base';\nimport { KbqPipeState } from './pipe-state';\n\n@Component({\n selector: 'kbq-pipe-date',\n imports: [\n ReactiveFormsModule,\n KbqIconModule,\n KbqInputModule,\n KbqDividerModule,\n KbqPopoverModule,\n KbqButtonModule,\n KbqListModule,\n KbqDatepickerModule,\n KbqTimepickerModule,\n KbqPipeState,\n KbqFormattersModule,\n KbqPipeButton,\n KbqTitleModule,\n FormsModule\n ],\n templateUrl: 'pipe-date.html',\n styleUrls: ['base-pipe.scss', 'pipe-date.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeDateComponent<D> extends KbqPipeDateBaseComponent<D> {\n protected formatRange(start: D, end: D): string {\n return this.formatter.rangeShortDate(start, end);\n }\n\n protected getDefaultStart(): D {\n return this.adapter.today();\n }\n\n protected getDefaultEnd(): D {\n return this.adapter.today().plus({ days: 1 });\n }\n}\n","<button\n #popover=\"kbqPopover\"\n kbq-button\n kbqPopover\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [kbq-title]=\"pipeTooltip\"\n [kbqPopoverArrow]=\"false\"\n [kbqPopoverSize]=\"'custom'\"\n [kbqPopoverClass]=\"'kbq-pipe-date__popover'\"\n [kbqPopoverContent]=\"content\"\n [kbqPopoverOffset]=\"4\"\n [defaultPaddings]=\"false\"\n [kbqPopoverPlacement]=\"placements.BottomLeft\"\n [kbqPopoverPlacementPriority]=\"[placements.BottomLeft, placements.TopLeft]\"\n (kbqPopoverVisibleChange)=\"isListMode = true\"\n>\n <span #kbqTitleText class=\"kbq-pipe__name\">{{ data.name }}</span>\n <span #kbqTitleText class=\"kbq-pipe__value\" [class.kbq-pipe__value_empty]=\"!formattedValue\">\n {{ formattedValue }}\n </span>\n</button>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #content>\n @if (isListMode) {\n <div class=\"kbq-date-list\">\n <kbq-list-selection #listSelection [autoSelect]=\"false\" [ngModel]=\"data.value?.name\">\n <kbq-list-option (click)=\"showPeriod()\" (keydown.enter)=\"showPeriod()\">\n {{ localeData.datePipe?.customPeriod }}\n <!-- prevents [kbq-icon] from matching icon slot in kbq-list-option, keeping chevron after label text -->\n <ng-container>\n <i kbq-icon=\"kbq-chevron-right_16\" color=\"contrast-fade\"></i>\n </ng-container>\n </kbq-list-option>\n\n @for (item of values; track item) {\n <kbq-list-option [value]=\"item.name\" (click)=\"onSelect(item)\" (keydown.enter)=\"onSelect(item)\">\n {{ item.name }}\n </kbq-list-option>\n }\n </kbq-list-selection>\n </div>\n } @else {\n <div class=\"kbq-date-period kbq-datepicker__content\" (keydown)=\"onKeydown($event)\">\n <div class=\"kbq-date-period__header\">\n <button\n #returnButton\n kbq-button\n [color]=\"colors.Theme\"\n [kbqStyle]=\"styles.Transparent\"\n (click)=\"showList()\"\n >\n <i kbq-icon=\"kbq-chevron-left_16\"></i>\n {{ localeData.datePipe.backToPeriodSelection }}\n </button>\n </div>\n\n <form class=\"kbq-date-period__content kbq-form-horizontal\" [formGroup]=\"formGroup\">\n <label class=\"kbq-form__label\">{{ localeData.datePipe.customPeriodFrom }}</label>\n\n <kbq-form-field class=\"kbq-date-period__date kbq-form__control\" [class.kbq-focused]=\"showStartCalendar\">\n <input\n formControlName=\"start\"\n [kbqCalendar]=\"startDateCalendar\"\n [max]=\"formGroup.controls.end.value\"\n (focusin)=\"onFocusStartInput()\"\n (keydown.tab)=\"hideCalendars()\"\n />\n <i kbq-icon=\"kbq-calendar-o_16\" kbqSuffix></i>\n </kbq-form-field>\n\n <kbq-calendar\n #startDateCalendar\n [class.kbq-calendar_hidden]=\"!showStartCalendar\"\n (selectedChange)=\"onSelectStartDate($event)\"\n />\n\n <label class=\"kbq-form__label\">{{ localeData.datePipe.customPeriodTo }}</label>\n\n <kbq-form-field class=\"kbq-date-period__date kbq-form__control\" [class.kbq-focused]=\"showEndCalendar\">\n <input\n formControlName=\"end\"\n [kbqCalendar]=\"endDateCalendar\"\n (focusin)=\"onFocusEndInput()\"\n (keydown.tab)=\"hideCalendars()\"\n />\n <i kbq-icon=\"kbq-calendar-o_16\" kbqSuffix></i>\n </kbq-form-field>\n\n @if (formGroup.controls.start.invalid) {\n <kbq-hint class=\"kbq-date-period__hint\" [color]=\"'error'\">\n {{ localeData.datePipe.customPeriodErrorHint }}\n </kbq-hint>\n }\n\n <kbq-calendar\n #endDateCalendar\n [class.kbq-calendar_hidden]=\"!showEndCalendar\"\n (selectedChange)=\"onSelectEndDate($event)\"\n />\n </form>\n\n <div class=\"kbq-date-period__footer\">\n <button\n kbq-button\n [color]=\"'theme'\"\n [disabled]=\"disabled\"\n [kbqStyle]=\"'transparent'\"\n (click)=\"onApplyPeriod()\"\n >\n <span>{{ localeData.pipe.applyButton }}</span>\n &nbsp;\n <span class=\"kbq-button_hot-key\">{{ isMac ? '⌘ ' : 'Ctrl + ' }}Enter</span>\n </button>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ formattedValue }}</div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqFormattersModule } from '@koobiq/components/core';\nimport { KbqDatepickerModule } from '@koobiq/components/datepicker';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqListModule } from '@koobiq/components/list';\nimport { KbqPopoverModule } from '@koobiq/components/popover';\nimport { KbqTimepickerModule } from '@koobiq/components/timepicker';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqBasePipe } from './base-pipe';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeDateBaseComponent } from './pipe-date-base';\nimport { KbqPipeState } from './pipe-state';\n\n@Component({\n selector: 'kbq-pipe-datetime',\n imports: [\n ReactiveFormsModule,\n KbqIconModule,\n KbqInputModule,\n KbqDividerModule,\n KbqPopoverModule,\n KbqButtonModule,\n KbqListModule,\n KbqDatepickerModule,\n KbqTimepickerModule,\n KbqPipeState,\n KbqFormattersModule,\n KbqPipeButton,\n KbqTitleModule,\n FormsModule\n ],\n templateUrl: 'pipe-datetime.html',\n styleUrls: ['base-pipe.scss', 'pipe-date.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeDatetimeComponent<D> extends KbqPipeDateBaseComponent<D> {\n protected formatRange(start: D, end: D): string {\n return this.formatter.rangeShortDateTime(start, end);\n }\n\n protected getDefaultStart(): D {\n return this.adapter.today().startOf('day');\n }\n\n protected getDefaultEnd(): D {\n return this.adapter.today().endOf('day');\n }\n}\n","<button\n #popover=\"kbqPopover\"\n kbq-button\n kbqPopover\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [kbq-title]=\"pipeTooltip\"\n [kbqPopoverArrow]=\"false\"\n [kbqPopoverSize]=\"'custom'\"\n [kbqPopoverClass]=\"'kbq-pipe-date__popover'\"\n [kbqPopoverContent]=\"content\"\n [kbqPopoverOffset]=\"4\"\n [defaultPaddings]=\"false\"\n [kbqPopoverPlacement]=\"placements.BottomLeft\"\n [kbqPopoverPlacementPriority]=\"[placements.BottomLeft, placements.TopLeft]\"\n (kbqPopoverVisibleChange)=\"isListMode = true\"\n>\n <span #kbqTitleText class=\"kbq-pipe__name\">{{ data.name }}</span>\n <span #kbqTitleText class=\"kbq-pipe__value\" [class.kbq-pipe__value_empty]=\"!formattedValue\">\n {{ formattedValue }}\n </span>\n</button>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #content>\n @if (isListMode) {\n <div class=\"kbq-date-list\">\n <kbq-list-selection #listSelection [autoSelect]=\"false\" [ngModel]=\"data.value?.name\">\n <kbq-list-option (click)=\"showPeriod()\" (keydown.enter)=\"showPeriod()\">\n {{ localeData.datePipe?.customPeriod }}\n <!-- prevents [kbq-icon] from matching icon slot in kbq-list-option, keeping chevron after label text -->\n <ng-container>\n <i kbq-icon=\"kbq-chevron-right_16\" color=\"contrast-fade\"></i>\n </ng-container>\n </kbq-list-option>\n\n @for (item of values; track item) {\n <kbq-list-option [value]=\"item.name\" (click)=\"onSelect(item)\" (keydown.enter)=\"onSelect(item)\">\n {{ item.name }}\n </kbq-list-option>\n }\n </kbq-list-selection>\n </div>\n } @else {\n <div class=\"kbq-date-period kbq-datepicker__content\" (keydown)=\"onKeydown($event)\">\n <div class=\"kbq-date-period__header\">\n <button\n #returnButton\n kbq-button\n [color]=\"colors.Theme\"\n [kbqStyle]=\"styles.Transparent\"\n (click)=\"showList()\"\n >\n <i kbq-icon=\"kbq-chevron-left_16\"></i>\n {{ localeData.datePipe.backToPeriodSelection }}\n </button>\n </div>\n\n <form class=\"kbq-date-period__content kbq-form-horizontal\" [formGroup]=\"formGroup\">\n <label class=\"kbq-form__label\">{{ localeData.datePipe.customPeriodFrom }}</label>\n\n <div class=\"kbq-form__row_with-time kbq-form__control\">\n <kbq-form-field class=\"kbq-date-period__date\" [class.kbq-focused]=\"showStartCalendar\">\n <input\n formControlName=\"start\"\n [kbqCalendar]=\"startDateCalendar\"\n [max]=\"formGroup.controls.end.value\"\n (focusin)=\"onFocusStartInput()\"\n (keydown.tab)=\"hideCalendars()\"\n />\n <i kbq-icon=\"kbq-calendar-o_16\" kbqSuffix></i>\n </kbq-form-field>\n\n <kbq-form-field class=\"kbq-date-period__time\">\n <i kbq-icon=\"kbq-clock_16\" kbqPrefix></i>\n <input formControlName=\"start\" kbqTimepicker (focusin)=\"hideCalendars()\" />\n </kbq-form-field>\n </div>\n\n <kbq-calendar\n #startDateCalendar\n [class.kbq-calendar_hidden]=\"!showStartCalendar\"\n (selectedChange)=\"onSelectStartDate($event)\"\n />\n\n <label class=\"kbq-form__label\">{{ localeData.datePipe.customPeriodTo }}</label>\n\n <div class=\"kbq-form__row_with-time kbq-form__control\">\n <kbq-form-field class=\"kbq-date-period__date\" [class.kbq-focused]=\"showEndCalendar\">\n <input\n formControlName=\"end\"\n [kbqCalendar]=\"endDateCalendar\"\n (focusin)=\"onFocusEndInput()\"\n (keydown.tab)=\"hideCalendars()\"\n />\n <i kbq-icon=\"kbq-calendar-o_16\" kbqSuffix></i>\n </kbq-form-field>\n\n <kbq-form-field class=\"kbq-date-period__time\">\n <i kbq-icon=\"kbq-clock_16\" kbqPrefix></i>\n <input formControlName=\"end\" kbqTimepicker (focusin)=\"hideCalendars()\" />\n </kbq-form-field>\n </div>\n\n @if (formGroup.controls.start.invalid) {\n <kbq-hint class=\"kbq-date-period__hint\" [color]=\"'error'\">\n {{ localeData.datePipe.customPeriodErrorHint }}\n </kbq-hint>\n }\n\n <kbq-calendar\n #endDateCalendar\n [class.kbq-calendar_hidden]=\"!showEndCalendar\"\n (selectedChange)=\"onSelectEndDate($event)\"\n />\n </form>\n\n <div class=\"kbq-date-period__footer\">\n <button\n kbq-button\n [color]=\"'theme'\"\n [disabled]=\"disabled\"\n [kbqStyle]=\"'transparent'\"\n (click)=\"onApplyPeriod()\"\n >\n <span>{{ localeData.pipe.applyButton }}</span>\n &nbsp;\n <span class=\"kbq-button_hot-key\">{{ isMac ? '⌘ ' : 'Ctrl + ' }}Enter</span>\n </button>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ formattedValue }}</div>\n</ng-template>\n","import { KbqFilterBarHost, KbqPipeData, KbqSelectValue } from '../filter-bar.types';\n\n/** The pieces {@link KbqMultiSelectPipeState} reads from its owning multi-select pipe. */\nexport interface KbqMultiSelectPipeStateHost {\n readonly data: KbqPipeData<KbqSelectValue[]>;\n readonly filterBar: KbqFilterBarHost | null;\n /** Whether every selectable option is currently selected (pipe-specific). */\n allOptionsSelected(): boolean;\n}\n\n/**\n * Shared \"select all = select nothing\" state for the multi-select pipes (`kbq-pipe-multi-select`,\n * `kbq-pipe-multi-tree-select`). Extracted as a plain composition helper — not a base class — because the\n * two pipes have different bases (`KbqBasePipe` vs `KbqTreeSelectPipeBase`) and cannot share a single\n * `@Directive()` base (the diamond), while a mixin would risk breaking AOT view-query inheritance.\n */\nexport class KbqMultiSelectPipeState {\n /** Snapshot of the committed selection, preserved across the \"all selected → []\" collapse. */\n internalSelected: KbqSelectValue[] | null = null;\n\n constructor(private readonly host: KbqMultiSelectPipeStateHost) {}\n\n /** Whether selecting every option is treated as selecting nothing. */\n get selectedAllEqualsSelectedNothing(): boolean {\n return (\n this.host.data.selectedAllEqualsSelectedNothing ??\n this.host.filterBar?.selectedAllEqualsSelectedNothing() ??\n true\n );\n }\n\n /** Value to display: the preserved snapshot under \"all = nothing\", otherwise the raw value. */\n get selected(): KbqSelectValue[] | null {\n return this.selectedAllEqualsSelectedNothing ? this.internalSelected : this.host.data.value;\n }\n\n /** Refreshes the snapshot from the current value (only under \"all = nothing\"). */\n updateInternalSelected(): void {\n if (this.selectedAllEqualsSelectedNothing) {\n this.internalSelected = this.host.data.value?.slice() || [];\n }\n }\n\n /** Emits the change, collapsing the value to `[]` when everything is selected under \"all = nothing\". */\n emitChangePipeEvent(): void {\n if (this.selectedAllEqualsSelectedNothing && this.host.allOptionsSelected()) {\n this.host.filterBar?.onChangePipe.emit({ ...this.host.data, value: [] });\n } else {\n this.host.filterBar?.onChangePipe.emit(this.host.data);\n }\n }\n\n /** Whether the pipe reads as empty, given the base pipe's own emptiness. */\n isEmpty(baseIsEmpty: boolean): boolean {\n return (\n baseIsEmpty ||\n (Array.isArray(this.host.data.value) && !this.host.data.value.length) ||\n (this.selectedAllEqualsSelectedNothing && this.host.allOptionsSelected())\n );\n }\n}\n","import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n OnInit,\n viewChild,\n viewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqBadgeModule } from '@koobiq/components/badge';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqOption, KbqPseudoCheckboxModule, KbqPseudoCheckboxState } from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqSelect, KbqSelectModule } from '@koobiq/components/select';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { merge, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { KbqSelectValue } from '../filter-bar.types';\nimport { KbqBasePipe } from './base-pipe';\nimport { KbqMultiSelectPipeState } from './multi-select-pipe-state';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeState } from './pipe-state';\n\n@Component({\n selector: 'kbq-pipe-multi-select',\n imports: [\n FormsModule,\n KbqButtonModule,\n KbqDividerModule,\n KbqSelectModule,\n KbqPipeState,\n KbqBadgeModule,\n KbqPipeButton,\n KbqTitleModule,\n NgTemplateOutlet,\n KbqIconModule,\n KbqInputModule,\n ReactiveFormsModule,\n AsyncPipe,\n KbqPseudoCheckboxModule\n ],\n templateUrl: 'pipe-multi-select.html',\n styleUrls: ['base-pipe.scss', 'pipe-multiselect.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeMultiSelectComponent extends KbqBasePipe<KbqSelectValue[]> implements AfterViewInit, OnInit {\n /** control for search options */\n readonly searchControl = new FormControl<string | null>(null);\n /** filtered by search options */\n filteredOptions: Observable<KbqSelectValue[]>;\n\n /** @docs-private */\n readonly select = viewChild.required(KbqSelect);\n\n /** @docs-private */\n readonly options = viewChildren(KbqOption);\n\n /** selected value */\n get selected() {\n return this.multiSelect.selected;\n }\n\n /** Whether the current pipe is empty. */\n get isEmpty(): boolean {\n return this.multiSelect.isEmpty(super.isEmpty);\n }\n\n /** state for checkbox 'select all'. */\n get checkboxState(): KbqPseudoCheckboxState {\n if (!this.options()) return 'unchecked';\n\n const select = this.select();\n\n if (!select?.selectionModel) return 'unchecked';\n\n if (select.selectionModel.selected.length === this.values.length) {\n return 'checked';\n } else if (!select.selectionModel.selected.length) {\n return 'unchecked';\n }\n\n return 'indeterminate';\n }\n\n /** true if all visible options selected */\n get allVisibleOptionsSelected(): boolean {\n return this.visibleOptions?.every((option) => option.selected);\n }\n\n /** true if all options selected */\n get allOptionsSelected(): boolean {\n const select = this.select();\n\n if (!select?.selectionModel) return false;\n\n return select.triggerValues.length === this.values?.length;\n }\n\n get selectedAllEqualsSelectedNothing(): boolean {\n return this.multiSelect.selectedAllEqualsSelectedNothing;\n }\n\n private get visibleOptions(): KbqOption[] {\n return this.options()?.filter((option) => option.selectable());\n }\n\n private selectionAllInProgress = false;\n private readonly multiSelect = new KbqMultiSelectPipeState({\n data: this.data,\n filterBar: this.filterBar,\n allOptionsSelected: () => this.allOptionsSelected\n });\n\n /** @docs-private */\n ngOnInit(): void {\n this.multiSelect.updateInternalSelected();\n\n this.filteredOptions = merge(this.filterBar!.internalTemplatesChanges, this.searchControl.valueChanges).pipe(\n map(this.getFilteredOptions),\n takeUntilDestroyed(this.destroyRef)\n );\n }\n\n override ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.select()\n .closedStream.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.filterBar?.onClosePipe.emit(this.data));\n }\n\n /** @docs-private */\n onSelect(item: KbqSelectValue[]) {\n if (this.selectionAllInProgress) return;\n\n if (this.selectedAllEqualsSelectedNothing && this.allOptionsSelected) {\n this.data.value = [];\n } else {\n this.data.value = item;\n }\n\n this.multiSelect.emitChangePipeEvent();\n\n this.stateChanges.next();\n }\n\n /** @docs-private */\n onClear() {\n this.data.value = [];\n\n this.multiSelect.updateInternalSelected();\n\n this.filterBar?.onClearPipe.emit(this.data);\n this.filterBar?.onChangePipe.emit(this.data);\n this.stateChanges.next();\n }\n\n /** @docs-private */\n toggleSelectionAllByEnterKey() {\n if (this.data.selectAll && this.select().keyManager.activeItemIndex === 0) {\n this.toggleSelectionAll();\n }\n }\n\n /** @docs-private */\n toggleSelectionAll(emitEvent: boolean = true) {\n this.selectionAllInProgress = true;\n\n if (this.allVisibleOptionsSelected) {\n this.visibleOptions.forEach((option) => option.deselect());\n } else {\n this.visibleOptions.forEach((option) => option.select());\n }\n\n this.selectionAllInProgress = false;\n\n if (this.selectedAllEqualsSelectedNothing && this.allOptionsSelected) {\n this.data.value = [];\n } else {\n this.data.value = [...this.select().value];\n }\n\n if (emitEvent) {\n this.multiSelect.emitChangePipeEvent();\n }\n\n this.stateChanges.next();\n }\n\n /** Comparator of selected options. Two null/absent values never match (aligned with the select pipe). */\n compareByValue = (o1: Pick<KbqSelectValue, 'id'> | null, o2: Pick<KbqSelectValue, 'id'> | null): boolean =>\n !!o1 && !!o2 && o1.id === o2.id;\n\n /** handler for select all options in select */\n selectAllHandler = (event: KeyboardEvent) => {\n event.preventDefault();\n\n this.toggleSelectionAll();\n };\n\n /** @docs-private */\n onClose() {\n if (this.allOptionsSelected) {\n this.multiSelect.updateInternalSelected();\n }\n\n setTimeout(() => this.restoreTriggerFocus());\n }\n\n /** opens select */\n override open() {\n this.select().open();\n }\n\n private getFilteredOptions = (): KbqSelectValue[] => {\n const search = this.searchControl.value;\n\n return search\n ? this.values.filter((item: KbqSelectValue) => item.name.toLowerCase().includes(search.toLowerCase()))\n : this.values;\n };\n}\n","<kbq-select\n #select=\"kbqSelect\"\n multiple\n [compareWith]=\"compareByValue\"\n [disabled]=\"data.disabled\"\n [kbq-title]=\"pipeTooltip\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n [panelClass]=\"'kbq-pipe-multiselect__panel'\"\n [selectAllHandler]=\"selectAllHandler\"\n [tabIndex]=\"-1\"\n [value]=\"selected\"\n (closed)=\"onClose()\"\n (selectionChange)=\"onSelect($event.value)\"\n>\n <button\n kbq-button\n kbq-select-matcher\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n >\n <span #kbqTitleText class=\"kbq-pipe__name\">{{ data.name }}</span>\n @if (select.triggerValues.length === 1) {\n <span #kbqTitleText class=\"kbq-pipe__value\" [class.kbq-pipe__value_empty]=\"!select.triggerValue\">\n {{ select.triggerValue }}\n </span>\n } @else if (\n select.triggerValues.length > 1 &&\n (!selectedAllEqualsSelectedNothing || (selectedAllEqualsSelectedNothing && !allOptionsSelected))\n ) {\n <kbq-badge [badgeColor]=\"'contrast'\" [compact]=\"true\">\n {{ select.triggerValues.length }}\n </kbq-badge>\n }\n </button>\n @if (data.search) {\n <kbq-form-field noBorders kbqSelectSearch>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n placeholder=\"{{ localeData.search.placeholder }}\"\n autocomplete=\"off\"\n kbqInput\n type=\"text\"\n [attr.aria-label]=\"localeData.search.placeholder\"\n [formControl]=\"searchControl\"\n (keydown.enter)=\"toggleSelectionAllByEnterKey()\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n }\n\n <div kbq-select-search-empty-result>{{ localeData.pipe.emptySearchResult }}</div>\n\n @if (data.selectAll && !select.isEmptySearchResult) {\n <kbq-option\n [class.kbq-selected]=\"allVisibleOptionsSelected\"\n [selectable]=\"false\"\n (click)=\"toggleSelectionAll()\"\n (keydown.enter)=\"toggleSelectionAll()\"\n >\n <kbq-pseudo-checkbox [state]=\"checkboxState\" />\n {{ localeData.pipe.selectAll }}\n </kbq-option>\n }\n\n @for (item of filteredOptions | async; track item) {\n <kbq-option [value]=\"item\">\n @if (isTemplateRef(valueTemplate)) {\n <ng-container\n [ngTemplateOutlet]=\"$any(valueTemplate)\"\n [ngTemplateOutletContext]=\"{ $implicit, option: item }\"\n />\n } @else {\n {{ item.name }}\n }\n </kbq-option>\n }\n</kbq-select>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ select.triggerValue }}</div>\n</ng-template>\n","import { AfterViewInit, Directive, OnInit, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl } from '@angular/forms';\nimport { FlatTreeControl, KbqTreeFlatDataSource, KbqTreeFlattener } from '@koobiq/components/tree';\nimport { KbqTreeSelect } from '@koobiq/components/tree-select';\nimport { KbqTreeSelectFlatNode, KbqTreeSelectNode } from '../filter-bar.types';\nimport { KbqBasePipe } from './base-pipe';\n\n/**\n * Shared scaffolding for the tree-based select pipes (`kbq-pipe-tree-select`,\n * `kbq-pipe-multi-tree-select`): the flat-tree control / flattener / data source, the node accessors,\n * search-driven filtering and open handling. Subclasses provide the value-specific pieces (`selected`,\n * `isEmpty`, `onSelect`, `updateTemplates`).\n *\n * The `internalTemplatesChanges` subscription is intentionally left in each subclass constructor: it must\n * be set up after the subclass's `updateTemplates` field initializer runs, so the initial `BehaviorSubject`\n * replay dispatches to the subclass override (which writes `dataSource.data`) rather than the base one.\n */\n@Directive()\nexport abstract class KbqTreeSelectPipeBase<V> extends KbqBasePipe<V> implements OnInit, AfterViewInit {\n /** control for search options */\n readonly searchControl = new FormControl<string | null>(null);\n\n treeControl: FlatTreeControl<KbqTreeSelectFlatNode>;\n treeFlattener: KbqTreeFlattener<KbqTreeSelectNode, KbqTreeSelectFlatNode>;\n dataSource: KbqTreeFlatDataSource<KbqTreeSelectNode, KbqTreeSelectFlatNode>;\n\n /** @docs-private */\n readonly select = viewChild.required(KbqTreeSelect);\n\n constructor() {\n super();\n\n this.treeFlattener = new KbqTreeFlattener(this.transformer, this.getLevel, this.isExpandable, this.getChildren);\n\n this.treeControl = new FlatTreeControl<KbqTreeSelectFlatNode>(\n this.getLevel,\n this.isExpandable,\n this.getValue,\n this.getViewValue\n );\n\n this.dataSource = new KbqTreeFlatDataSource(this.treeControl, this.treeFlattener);\n }\n\n ngOnInit(): void {\n this.searchControl.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => this.treeControl.filterNodes(value));\n }\n\n override ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.select()\n .closedStream.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.filterBar?.onClosePipe.emit(this.data));\n }\n\n /** tree-node predicate: whether the node has children */\n hasChild(_: number, nodeData: KbqTreeSelectFlatNode) {\n return nodeData.expandable;\n }\n\n /** opens the tree-select panel */\n override open() {\n setTimeout(() => {\n if (this.destroyed) return;\n\n this.select().open();\n });\n }\n\n /** @docs-private */\n onOpen() {\n this.treeControl.expandAll();\n }\n\n protected transformer = (node: KbqTreeSelectNode, level: number, parent: KbqTreeSelectFlatNode | null) => {\n const flatNode = new KbqTreeSelectFlatNode();\n\n flatNode.name = node.name;\n flatNode.value = node.value;\n flatNode.parent = parent ?? undefined;\n flatNode.level = level;\n flatNode.expandable = !!node.children;\n\n return flatNode;\n };\n\n protected getLevel = (node: KbqTreeSelectFlatNode) => node.level;\n\n protected isExpandable = (node: KbqTreeSelectFlatNode) => node.expandable;\n\n protected getChildren = (node: KbqTreeSelectNode): KbqTreeSelectNode[] | null => node.children;\n\n protected getValue = (node: KbqTreeSelectFlatNode): unknown => node.value;\n\n protected getViewValue = (node: KbqTreeSelectFlatNode): string => node.name;\n}\n","import { ChangeDetectionStrategy, Component, OnInit, viewChild, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqBadgeModule } from '@koobiq/components/badge';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqHighlightModule, KbqPseudoCheckboxModule, KbqPseudoCheckboxState } from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqTreeModule, kbqTreeSelectAllValue, KbqTreeSelection } from '@koobiq/components/tree';\nimport { KbqTreeSelectModule } from '@koobiq/components/tree-select';\nimport { KbqPipeTemplate, KbqSelectValue, KbqTreeSelectFlatNode, KbqTreeSelectNode } from '../filter-bar.types';\nimport { getId, KbqBasePipe, KbqPipeMinWidth } from './base-pipe';\nimport { KbqMultiSelectPipeState } from './multi-select-pipe-state';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeState } from './pipe-state';\nimport { KbqTreeSelectPipeBase } from './tree-select-pipe-base';\n\n@Component({\n selector: 'kbq-pipe-multi-tree-select',\n imports: [\n KbqButtonModule,\n KbqDividerModule,\n KbqPipeState,\n KbqPipeButton,\n KbqTitleModule,\n KbqPipeMinWidth,\n KbqIconModule,\n KbqInputModule,\n ReactiveFormsModule,\n KbqHighlightModule,\n KbqTreeModule,\n KbqTreeSelectModule,\n FormsModule,\n KbqBadgeModule,\n KbqPseudoCheckboxModule\n ],\n templateUrl: 'pipe-multi-tree-select.html',\n styleUrls: ['base-pipe.scss', 'pipe-multi-tree-select.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeMultiTreeSelectComponent extends KbqTreeSelectPipeBase<KbqSelectValue[]> implements OnInit {\n /** @docs-private */\n readonly tree = viewChild.required(KbqTreeSelection);\n\n /** selected value */\n get selected() {\n return this.multiSelect.selected;\n }\n\n /** Whether the current pipe is empty. */\n get isEmpty(): boolean {\n return this.multiSelect.isEmpty(super.isEmpty);\n }\n\n get selectAllCheckboxState(): KbqPseudoCheckboxState {\n const select = this.select();\n\n if (!select) return 'unchecked';\n\n if (this.allOptionsSelected) {\n return 'checked';\n } else if (select.selected?.length > 0) {\n return 'indeterminate';\n }\n\n return 'unchecked';\n }\n\n get numberOfSelectedLeaves(): number {\n return this.select().selected.filter(({ value }) => value !== kbqTreeSelectAllValue).length;\n }\n\n /** true if all options selected */\n get allOptionsSelected(): boolean {\n const dataNodesLength = this.treeControl?.dataNodes?.length;\n const dataNodesForSelect = this.data.selectAll ? dataNodesLength - 1 : dataNodesLength;\n\n return this.select()?.triggerValues?.length === dataNodesForSelect;\n }\n\n get selectedAllEqualsSelectedNothing(): boolean {\n return this.multiSelect.selectedAllEqualsSelectedNothing;\n }\n\n /** true if all visible options selected */\n get allVisibleOptionsSelected(): boolean {\n return this.tree()\n .renderedOptions.filter((option) => option.value !== kbqTreeSelectAllValue)\n .every((option) => option.selected);\n }\n\n private readonly multiSelect = new KbqMultiSelectPipeState({\n data: this.data,\n filterBar: this.filterBar,\n allOptionsSelected: () => this.allOptionsSelected\n });\n\n constructor() {\n super();\n\n // See the field-init note in `KbqTreeSelectPipeBase`: subscribing here (after this class's\n // `updateTemplates` initializer) ensures the initial replay writes `dataSource.data`.\n this.filterBar?.internalTemplatesChanges.pipe(takeUntilDestroyed()).subscribe(this.updateTemplates);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n\n this.multiSelect.updateInternalSelected();\n }\n\n isNodeSelectAll(_: number, nodeData: KbqTreeSelectFlatNode) {\n return nodeData.value === kbqTreeSelectAllValue;\n }\n\n onSelect({ value: option }) {\n if (!option) return;\n\n const tree = this.tree();\n\n if (tree.treeControl.isExpandable(option.data)) {\n tree.setStateChildren(option, !option.selected);\n }\n\n this.toggleParents(option.data.parent);\n\n setTimeout(() => {\n if (this.destroyed) return;\n\n if (this.selectedAllEqualsSelectedNothing && this.allOptionsSelected) {\n this.data.value = [];\n } else {\n this.data.value = this.select().selectedValues;\n }\n\n this.multiSelect.emitChangePipeEvent();\n\n this.stateChanges.next();\n });\n }\n\n searchKeydownHandler() {\n if (this.data.selectAll && this.tree().keyManager.activeItemIndex === 0) {\n this.toggleSelectAllNode();\n }\n }\n\n toggleSelectAllNode(emitEvent: boolean = true) {\n if (this.select().search()?.ngControl.value) {\n const renderedOptions = this.tree().renderedOptions.filter(({ value }) => value !== kbqTreeSelectAllValue);\n\n if (this.allVisibleOptionsSelected) {\n renderedOptions.forEach((option) => option.setSelected(false));\n } else {\n renderedOptions.forEach((option) => option.setSelected(true));\n }\n } else {\n if (this.allOptionsSelected) {\n this.tree().selectionModel.clear();\n } else {\n const [, ...dataNodesForSelect] = this.treeControl.dataNodes;\n\n // @todo DS-3827\n this.tree().selectionModel.select(...(dataNodesForSelect as any));\n }\n }\n\n setTimeout(() => {\n if (this.destroyed) return;\n\n if (this.selectedAllEqualsSelectedNothing && this.allOptionsSelected) {\n this.data.value = [];\n } else {\n this.data.value = [...this.select().selectedValues];\n }\n\n if (emitEvent) {\n this.multiSelect.emitChangePipeEvent();\n }\n\n this.stateChanges.next();\n });\n }\n\n /**\n * Populates the tree data source from the pipe template. The shared `values`/`valueTemplate`\n * assignment is already performed by the base subscription, so this override only does the\n * tree-specific work and avoids a redundant double assignment.\n */\n override updateTemplates = (templates: KbqPipeTemplate[] | null) => {\n const template = templates?.find((item) => getId(item) === getId(this.data));\n\n if (template?.values) {\n const values = [...(template.values as KbqTreeSelectNode[])];\n\n if (this.data.selectAll) {\n values.unshift({\n name: this.localeData.pipe.selectAll,\n value: kbqTreeSelectAllValue,\n children: null\n });\n }\n\n this.dataSource.data = values;\n }\n };\n\n override onClear() {\n super.onClear();\n\n this.multiSelect.updateInternalSelected();\n }\n\n /** @docs-private */\n onClose() {\n if (this.allOptionsSelected) {\n this.multiSelect.updateInternalSelected();\n }\n\n setTimeout(() => this.restoreTriggerFocus());\n }\n\n /** handler for select all options in select */\n selectAllHandler = (event: KeyboardEvent) => {\n event.preventDefault();\n\n this.toggleSelectAllNode();\n };\n\n private toggleParents(parent: KbqTreeSelectFlatNode | undefined) {\n if (!parent) {\n return;\n }\n\n const descendants = this.treeControl.getDescendants(parent);\n const isParentSelected = this.select().selectionModel.selected.includes(parent);\n\n if (\n !isParentSelected &&\n descendants.every((d: KbqTreeSelectFlatNode) => this.select().selectionModel.selected.includes(d))\n ) {\n this.select().selectionModel.select(parent);\n this.toggleParents(parent.parent);\n } else if (isParentSelected) {\n this.select().selectionModel.deselect(parent);\n this.toggleParents(parent.parent);\n }\n }\n}\n","<kbq-tree-select\n #select\n [autoSelect]=\"false\"\n [disabled]=\"data.disabled\"\n [kbq-title]=\"pipeTooltip\"\n [multiple]=\"true\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n [ngModel]=\"selected\"\n [panelClass]=\"'kbq-pipe-multi-tree-select__panel'\"\n [selectAllHandler]=\"selectAllHandler\"\n [tabIndex]=\"-1\"\n (closed)=\"onClose()\"\n (opened)=\"onOpen()\"\n (selectionChange)=\"onSelect($event)\"\n>\n @if (data.search) {\n <kbq-form-field noBorders kbqSelectSearch>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n placeholder=\"{{ localeData.search.placeholder }}\"\n autocomplete=\"off\"\n kbqInput\n type=\"text\"\n [attr.aria-label]=\"localeData.search.placeholder\"\n [formControl]=\"searchControl\"\n (keydown.enter)=\"searchKeydownHandler()\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n }\n\n <div kbq-select-search-empty-result>{{ localeData.pipe.emptySearchResult }}</div>\n\n <kbq-cleaner #kbqSelectCleaner />\n\n <button\n kbq-button\n kbq-select-matcher\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n >\n <span #kbqTitleText kbqPipeMinWidth class=\"kbq-pipe__name\">{{ data.name }}</span>\n\n @if (select.selected?.length === 1) {\n <span #kbqTitleText class=\"kbq-pipe__value\" [class.kbq-pipe__value_empty]=\"!select.triggerValue\">\n {{ select.selected[0].name }}\n </span>\n } @else if (\n select.selected?.length > 1 &&\n (!selectedAllEqualsSelectedNothing || (selectedAllEqualsSelectedNothing && !allOptionsSelected))\n ) {\n <kbq-badge [badgeColor]=\"'contrast'\" [compact]=\"true\">\n {{ numberOfSelectedLeaves }}\n </kbq-badge>\n }\n </button>\n\n <kbq-tree-selection [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <kbq-tree-option\n *kbqTreeNodeDef=\"let node; when: isNodeSelectAll\"\n kbqTreeNodePadding\n [class.kbq-selected]=\"allOptionsSelected\"\n [selectable]=\"false\"\n (click)=\"toggleSelectAllNode()\"\n >\n <kbq-pseudo-checkbox [state]=\"selectAllCheckboxState\" />\n <span [innerHTML]=\"treeControl.getViewValue(node) | mcHighlight: treeControl.filterValue.value\"></span>\n </kbq-tree-option>\n\n <kbq-tree-option *kbqTreeNodeDef=\"let node\" kbqTreeNodePadding [checkboxThirdState]=\"true\">\n <span [innerHTML]=\"treeControl.getViewValue(node) | mcHighlight: treeControl.filterValue.value\"></span>\n </kbq-tree-option>\n\n <kbq-tree-option *kbqTreeNodeDef=\"let node; when: hasChild\" kbqTreeNodePadding [checkboxThirdState]=\"true\">\n <kbq-tree-node-toggle [node]=\"node\" />\n <span [innerHTML]=\"treeControl.getViewValue(node) | mcHighlight: treeControl.filterValue.value\"></span>\n </kbq-tree-option>\n </kbq-tree-selection>\n</kbq-tree-select>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ select.triggerValue }}</div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqBasePipe, KbqPipeMinWidth } from './base-pipe';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeState } from './pipe-state';\n\n@Component({\n selector: 'kbq-pipe-readonly',\n imports: [\n KbqButtonModule,\n KbqTitleModule,\n KbqPipeState,\n KbqPipeMinWidth,\n KbqPipeButton\n ],\n template: `\n <button kbq-button [disabled]=\"data.disabled\" [kbqPipeState]=\"data\" [kbq-title]=\"pipeTooltip\">\n <span #kbqTitleText class=\"kbq-pipe__name\" kbqPipeMinWidth>{{ data.name }}</span>\n <span #kbqTitleText class=\"kbq-pipe__value\" kbqPipeMinWidth [class.kbq-pipe__value_empty]=\"!data.value\">\n {{ data.value }}\n </span>\n </button>\n\n @if (showRemoveButton) {\n <kbq-pipe-button />\n }\n\n <ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ data.value }}</div>\n </ng-template>\n `,\n styleUrls: ['base-pipe.scss', 'pipe-readonly.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeReadonlyComponent extends KbqBasePipe<string | null> {\n open(): void {}\n}\n","import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, OnInit, viewChild, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqSelect, KbqSelectModule } from '@koobiq/components/select';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { merge, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { KbqSelectValue } from '../filter-bar.types';\nimport { KbqBasePipe, KbqPipeMinWidth } from './base-pipe';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeState } from './pipe-state';\n\n@Component({\n selector: 'kbq-pipe-select',\n imports: [\n KbqButtonModule,\n KbqDividerModule,\n KbqSelectModule,\n KbqPipeState,\n KbqPipeButton,\n KbqTitleModule,\n KbqPipeMinWidth,\n NgTemplateOutlet,\n KbqIcon,\n KbqInputModule,\n ReactiveFormsModule,\n AsyncPipe\n ],\n templateUrl: 'pipe-select.html',\n styleUrls: ['base-pipe.scss', 'pipe-select.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeSelectComponent extends KbqBasePipe<KbqSelectValue> implements AfterViewInit, OnInit {\n /** control for search options */\n readonly searchControl = new FormControl<string | null>(null);\n /** filtered by search options */\n filteredOptions: Observable<KbqSelectValue[]>;\n\n /** @docs-private */\n readonly select = viewChild.required(KbqSelect);\n\n /** selected value */\n get selected() {\n return this.data.value;\n }\n\n /** Whether the current pipe is empty. */\n get isEmpty(): boolean {\n return !this.data.value;\n }\n\n /** @docs-private */\n ngOnInit(): void {\n // Merge the live template stream (re-emits when `pipeTemplates` changes after init) with the\n // search input, so options render on first open even when templates are supplied late\n // (e.g. a parent assigning `pipeTemplates` in ngAfterViewInit for a viewChild valueTemplate).\n this.filteredOptions = merge(this.filterBar!.internalTemplatesChanges, this.searchControl.valueChanges).pipe(\n map(this.getFilteredOptions),\n takeUntilDestroyed(this.destroyRef)\n );\n }\n\n override ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.select()\n .closedStream.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.filterBar?.onClosePipe.emit(this.data));\n }\n\n onSelect(item: KbqSelectValue) {\n this.data.value = item;\n this.filterBar?.onChangePipe.emit(this.data);\n this.stateChanges.next();\n\n setTimeout(() => this.restoreTriggerFocus());\n }\n\n /** Comparator of selected options */\n compareByValue = (o1: Pick<KbqSelectValue, 'id'> | null, o2: Pick<KbqSelectValue, 'id'> | null): boolean =>\n !!o1 && !!o2 && o1.id === o2.id;\n\n /** opens select */\n override open() {\n this.select().open();\n }\n\n private getFilteredOptions = (): KbqSelectValue[] => {\n const search = this.searchControl.value;\n\n return search\n ? this.values.filter((item: KbqSelectValue) => item.name.toLowerCase().includes(search.toLowerCase()))\n : this.values;\n };\n}\n","<kbq-select\n #select\n [compareWith]=\"compareByValue\"\n [disabled]=\"data.disabled\"\n [kbq-title]=\"pipeTooltip\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n [panelClass]=\"'kbq-pipe-select__panel'\"\n [tabIndex]=\"-1\"\n [value]=\"selected\"\n (selectionChange)=\"onSelect($event.value)\"\n>\n <button\n kbq-button\n kbq-select-matcher\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n >\n <span #kbqTitleText kbqPipeMinWidth class=\"kbq-pipe__name\">{{ data.name }}</span>\n <span\n #kbqTitleText\n kbqPipeMinWidth\n class=\"kbq-pipe__value\"\n [class.kbq-pipe__value_empty]=\"!select.triggerValue\"\n >\n {{ select.triggerValue }}\n </span>\n </button>\n\n @if (data.search) {\n <kbq-form-field noBorders kbqSelectSearch>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n placeholder=\"{{ localeData.search.placeholder }}\"\n kbqInput\n type=\"text\"\n [attr.aria-label]=\"localeData.search.placeholder\"\n [formControl]=\"searchControl\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n }\n\n <div kbq-select-search-empty-result>{{ localeData.pipe.emptySearchResult }}</div>\n\n @for (item of filteredOptions | async; track item) {\n <kbq-option [value]=\"item\">\n @if (isTemplateRef(valueTemplate)) {\n <ng-container\n [ngTemplateOutlet]=\"$any(valueTemplate)\"\n [ngTemplateOutletContext]=\"{ $implicit, option: item }\"\n />\n } @else {\n {{ item.name }}\n }\n </kbq-option>\n }\n</kbq-select>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ select.triggerValue }}</div>\n</ng-template>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, OnInit, ViewEncapsulation, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { ENTER, PopUpPlacements } from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqPopoverModule, KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { KbqTextareaModule } from '@koobiq/components/textarea';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqBasePipe, KbqPipeMinWidth } from './base-pipe';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeState } from './pipe-state';\n\n@Component({\n selector: 'kbq-pipe-text',\n imports: [\n KbqButtonModule,\n KbqPopoverModule,\n KbqInputModule,\n KbqDividerModule,\n FormsModule,\n KbqTextareaModule,\n KbqPipeButton,\n ReactiveFormsModule,\n KbqTitleModule,\n KbqPipeState,\n KbqPipeMinWidth\n ],\n templateUrl: 'pipe-text.html',\n styleUrls: ['base-pipe.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeTextComponent extends KbqBasePipe<string | null> implements AfterViewInit, OnInit {\n readonly placements = PopUpPlacements;\n\n /** @docs-private */\n readonly popover = viewChild.required(KbqPopoverTrigger);\n\n /** Whether the current pipe is disabled. */\n get disabled(): boolean {\n return !this.control.value;\n }\n\n /** textarea control */\n control = new FormControl<typeof this.data.value>('');\n\n ngOnInit(): void {\n this.control.setValue(this.data.value);\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.popover()\n .visibleChange.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((visible) => {\n this.stateChanges.next();\n\n if (!visible) {\n this.filterBar?.onClosePipe.emit(this.data);\n }\n });\n }\n\n onApply() {\n this.data.value = this.control.value;\n this.stateChanges.next();\n\n this.control.markAsPristine();\n this.popover().hide();\n\n this.filterBar?.onChangePipe.emit(this.data);\n\n setTimeout(() => this.restoreTriggerFocus());\n }\n\n /** @docs-private */\n onKeydown($event: KeyboardEvent) {\n if (!this.disabled && ($event.ctrlKey || $event.metaKey) && $event.keyCode === ENTER) {\n this.onApply();\n }\n }\n\n /** clears the pipe and triggers changes */\n override onClear() {\n super.onClear();\n\n this.control.reset();\n }\n\n /** opens popover */\n override open() {\n this.popover().show();\n }\n}\n","<button\n kbq-button\n kbqPopover\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [kbq-title]=\"pipeTooltip\"\n [kbqPopoverArrow]=\"false\"\n [kbqPopoverSize]=\"'custom'\"\n [kbqPopoverClass]=\"'kbq-pipe__popover'\"\n [kbqPopoverContent]=\"content\"\n [kbqPopoverFooter]=\"footer\"\n [kbqPopoverOffset]=\"4\"\n [defaultPaddings]=\"false\"\n [kbqPopoverPlacement]=\"placements.BottomLeft\"\n [class]=\"{ 'kbq-active': popover()?.isOpen }\"\n>\n <span #kbqTitleText kbqPipeMinWidth class=\"kbq-pipe__name\">{{ data.name }}</span>\n <span #kbqTitleText kbqPipeMinWidth class=\"kbq-pipe__value\" [class.kbq-pipe__value_empty]=\"!data.value\">\n {{ data.value }}\n </span>\n</button>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #content>\n <kbq-form-field (keydown)=\"onKeydown($event)\">\n <textarea kbqTextarea rows=\"1\" [formControl]=\"control\" [freeRowsHeight]=\"0\" [maxRows]=\"5\"></textarea>\n </kbq-form-field>\n</ng-template>\n\n<ng-template #footer>\n <button kbq-button [color]=\"'theme'\" [disabled]=\"disabled\" [kbqStyle]=\"'transparent'\" (click)=\"onApply()\">\n <span>{{ localeData.pipe.applyButton }}</span>\n &nbsp;\n <span class=\"kbq-button_hot-key\">{{ isMac ? '⌘ ' : 'Ctrl + ' }}Enter</span>\n </button>\n</ng-template>\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ data.value }}</div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqHighlightModule } from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqTreeModule, KbqTreeOption } from '@koobiq/components/tree';\nimport { KbqTreeSelectModule } from '@koobiq/components/tree-select';\nimport { KbqPipeTemplate, KbqSelectValue, KbqTreeSelectNode } from '../filter-bar.types';\nimport { getId, KbqBasePipe, KbqPipeMinWidth } from './base-pipe';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeState } from './pipe-state';\nimport { KbqTreeSelectPipeBase } from './tree-select-pipe-base';\n\n@Component({\n selector: 'kbq-pipe-tree-select',\n imports: [\n KbqButtonModule,\n KbqDividerModule,\n KbqPipeState,\n KbqPipeButton,\n KbqTitleModule,\n KbqPipeMinWidth,\n KbqIconModule,\n KbqInputModule,\n ReactiveFormsModule,\n KbqHighlightModule,\n KbqTreeModule,\n KbqTreeSelectModule,\n FormsModule\n ],\n templateUrl: 'pipe-tree-select.html',\n styleUrls: ['base-pipe.scss', 'pipe-tree-select.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeTreeSelectComponent extends KbqTreeSelectPipeBase<KbqSelectValue> {\n /** selected value */\n get selected() {\n return this.data.value;\n }\n\n /** Whether the current pipe is empty. */\n get isEmpty(): boolean {\n return !this.data.value;\n }\n\n constructor() {\n super();\n\n // See the field-init note in `KbqTreeSelectPipeBase`: subscribing here (after this class's\n // `updateTemplates` initializer) ensures the initial replay writes `dataSource.data`.\n this.filterBar?.internalTemplatesChanges.pipe(takeUntilDestroyed()).subscribe(this.updateTemplates);\n }\n\n onSelect(item: KbqTreeOption) {\n this.data.value = item.value;\n this.filterBar?.onChangePipe.emit(this.data);\n this.select().close();\n setTimeout(() => this.restoreTriggerFocus());\n this.stateChanges.next();\n }\n\n /**\n * Populates the tree data source from the pipe template. The shared `values`/`valueTemplate`\n * assignment is already performed by the base subscription, so this override only does the\n * tree-specific work and avoids a redundant double assignment.\n */\n override updateTemplates = (templates: KbqPipeTemplate[] | null) => {\n const template = templates?.find((item) => getId(item) === getId(this.data));\n\n if (template?.values) {\n this.dataSource.data = template.values as KbqTreeSelectNode[];\n }\n };\n}\n","<kbq-tree-select\n #select\n [autoSelect]=\"false\"\n [disabled]=\"data.disabled\"\n [kbq-title]=\"pipeTooltip\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n [ngModel]=\"selected\"\n [panelClass]=\"'kbq-pipe-tree-select__panel'\"\n [tabIndex]=\"-1\"\n (opened)=\"onOpen()\"\n (selectionChange)=\"onSelect($event.value)\"\n>\n @if (data.search) {\n <kbq-form-field noBorders kbqSelectSearch>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n placeholder=\"{{ localeData.search.placeholder }}\"\n autocomplete=\"off\"\n kbqInput\n type=\"text\"\n [attr.aria-label]=\"localeData.search.placeholder\"\n [formControl]=\"searchControl\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n }\n\n <div kbq-select-search-empty-result>{{ localeData.pipe.emptySearchResult }}</div>\n\n <kbq-cleaner #kbqSelectCleaner />\n\n <button\n kbq-button\n kbq-select-matcher\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n >\n <span #kbqTitleText kbqPipeMinWidth class=\"kbq-pipe__name\">{{ data.name }}</span>\n <span\n #kbqTitleText\n kbqPipeMinWidth\n class=\"kbq-pipe__value\"\n [class.kbq-pipe__value_empty]=\"!select.triggerValue\"\n >\n {{ select.triggerValue }}\n </span>\n </button>\n\n <kbq-tree-selection [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <kbq-tree-option *kbqTreeNodeDef=\"let node\" kbqTreeNodePadding>\n <span [innerHTML]=\"treeControl.getViewValue(node) | mcHighlight: treeControl.filterValue.value\"></span>\n </kbq-tree-option>\n\n <kbq-tree-option *kbqTreeNodeDef=\"let node; when: hasChild\" kbqTreeNodePadding [selectable]=\"false\">\n <kbq-tree-node-toggle [node]=\"node\" />\n <span [innerHTML]=\"treeControl.getViewValue(node) | mcHighlight: treeControl.filterValue.value\"></span>\n </kbq-tree-option>\n </kbq-tree-selection>\n</kbq-tree-select>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ select.triggerValue }}</div>\n</ng-template>\n","import { InjectionToken, ModelSignal, OutputEmitterRef, Provider, Signal, TemplateRef, Type } from '@angular/core';\nimport { ruRULocaleData } from '@koobiq/components/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { KbqFilterBar } from './filter-bar';\nimport type { KbqBasePipe } from './pipes/base-pipe';\nimport { KbqPipeDateComponent } from './pipes/pipe-date';\nimport { KbqPipeDatetimeComponent } from './pipes/pipe-datetime';\nimport { KbqPipeMultiSelectComponent } from './pipes/pipe-multi-select';\nimport { KbqPipeMultiTreeSelectComponent } from './pipes/pipe-multi-tree-select';\nimport { KbqPipeReadonlyComponent } from './pipes/pipe-readonly';\nimport { KbqPipeSelectComponent } from './pipes/pipe-select';\nimport { KbqPipeTextComponent } from './pipes/pipe-text';\nimport { KbqPipeTreeSelectComponent } from './pipes/pipe-tree-select';\n\n/**\n * Default localized strings for the filter-bar, used when no `KBQ_LOCALE_SERVICE` (nor an explicit\n * `KBQ_FILTER_BAR_CONFIGURATION`) is provided. These are the Russian (`ru-RU`) strings, matching the\n * library-wide default-locale convention (every `KBQ_*_DEFAULT_CONFIGURATION` resolves to `ruRULocaleData`).\n * Provide `KBQ_LOCALE_SERVICE` at the application root to localize the filter-bar for other locales.\n */\nexport const KBQ_FILTER_BAR_DEFAULT_CONFIGURATION = ruRULocaleData.filterBar;\n\n/** Shape of the localized strings consumed by the filter-bar and its pipes. */\nexport type KbqFilterBarConfiguration = typeof KBQ_FILTER_BAR_DEFAULT_CONFIGURATION;\n\n/** Injection Token for providing configuration of filter-bar */\nexport const KBQ_FILTER_BAR_CONFIGURATION = new InjectionToken<KbqFilterBarConfiguration>('KbqFilterBarConfiguration');\n\n/**\n * Contract a pipe (or filter-bar sub-component) depends on instead of the concrete `KbqFilterBar`.\n * `KbqFilterBar` provides itself as {@link KBQ_FILTER_BAR_HOST}, so a pipe can be unit-tested against a\n * lightweight mock of this seam rather than a full bar. Members mirror the current `KbqFilterBar` surface;\n * they are expected to slim down once the state model moves to signals.\n */\nexport interface KbqFilterBarHost {\n /** Localized strings and configuration for the filter-bar and its pipes. */\n configuration: KbqFilterBarConfiguration;\n\n /** Currently selected filter. A two-way-bindable `model()`: read via `filter()`, write via `filter.set()`. */\n readonly filter: ModelSignal<KbqFilter | null>;\n\n /** Templates used when adding a pipe (also hold the option lists). Read via `pipeTemplates()`. */\n readonly pipeTemplates: Signal<KbqPipeTemplate[]>;\n\n /** Whether selecting all options counts as selecting nothing. */\n readonly selectedAllEqualsSelectedNothing: Signal<boolean>;\n\n /** Whether the current filter is saved. */\n readonly isSaved: Signal<boolean>;\n /** Whether the current filter is changed. */\n readonly isChanged: Signal<boolean>;\n /** Whether the current filter is both saved and changed. */\n readonly isSavedAndChanged: Signal<boolean>;\n /** Whether the current filter is readonly. */\n readonly isReadOnly: Signal<boolean>;\n\n /**\n * Emits whenever a pipe value changes.\n * (The two-way-bound `filter` value is emitted by the `filter` model's `filterChange` output.)\n */\n readonly onChangePipe: OutputEmitterRef<KbqPipe>;\n /** Emits whenever a pipe is cleared. */\n readonly onClearPipe: OutputEmitterRef<KbqPipe>;\n /** Emits whenever a select/multiselect pipe closes. */\n readonly onClosePipe: OutputEmitterRef<KbqPipe>;\n\n /** Internal filter changes. */\n readonly internalFilterChanges: BehaviorSubject<KbqFilter | null>;\n /** Internal pipe-template changes. */\n readonly internalTemplatesChanges: BehaviorSubject<KbqPipeTemplate[] | null>;\n /** Requests opening a pipe after it is added. */\n readonly openPipe: BehaviorSubject<string | number | null>;\n /** Emits when the filter is reset. */\n readonly onResetFilter: BehaviorSubject<boolean>;\n\n /** Removes a pipe from the current filter and emits the change. */\n removePipe(pipe: KbqPipe): void;\n\n /** Clears the current filter's \"changed\" flag. */\n resetFilterChangedState(): void;\n}\n\n/**\n * Injection token exposing the {@link KbqFilterBarHost} seam. `KbqFilterBar` provides itself via\n * `useExisting`, so pipes `inject(KBQ_FILTER_BAR_HOST)` instead of depending on the concrete bar.\n */\nexport const KBQ_FILTER_BAR_HOST = new InjectionToken<KbqFilterBarHost>('KBQ_FILTER_BAR_HOST');\n\n/** Injection Token for providing pipes in filter-bar */\nexport const KBQ_FILTER_BAR_PIPES = new InjectionToken<Map<KbqPipeType, Type<KbqBasePipe<unknown>>>>(\n 'kbq-filter-bar-pipes'\n);\n\n/** Utility provider for `KBQ_FILTER_BAR_PIPES`. */\nexport const kbqFilterBarPipesProvider = (): Provider => {\n return {\n provide: KBQ_FILTER_BAR_PIPES,\n useValue: new Map<KbqPipeType, Type<KbqBasePipe<unknown>>>(defaultFilterBarPipes)\n };\n};\n\n/** list of pipe types available out of the box */\nexport enum KbqPipeTypes {\n ReadOnly = 'readonly',\n Text = 'text',\n Select = 'select',\n TreeSelect = 'tree-select',\n MultiSelect = 'multiselect',\n MultiTreeSelect = 'multi-tree-select',\n Date = 'date',\n Datetime = 'datetime'\n}\n\n// `string & {}` keeps the literal union members visible to autocomplete while still allowing custom pipe types.\nexport type KbqPipeType = `${KbqPipeTypes}` | (string & {});\n\n/** list of pipes available out of the box. */\nexport const defaultFilterBarPipes: [KbqPipeType, Type<KbqBasePipe<unknown>>][] = [\n [KbqPipeTypes.ReadOnly, KbqPipeReadonlyComponent],\n [KbqPipeTypes.Text, KbqPipeTextComponent],\n [KbqPipeTypes.Select, KbqPipeSelectComponent],\n [KbqPipeTypes.TreeSelect, KbqPipeTreeSelectComponent],\n [KbqPipeTypes.MultiSelect, KbqPipeMultiSelectComponent],\n [KbqPipeTypes.MultiTreeSelect, KbqPipeMultiTreeSelectComponent],\n [KbqPipeTypes.Date, KbqPipeDateComponent],\n [KbqPipeTypes.Datetime, KbqPipeDatetimeComponent]\n];\n\nexport interface KbqDateTimeValue {\n name?: string;\n start?: string;\n end?: string;\n}\n\nexport interface KbqSelectValue {\n name: string;\n value: unknown;\n /** Optional stable identifier used by the select/multi-select pipe comparators. */\n id?: string | number;\n}\n\nexport interface KbqFilter {\n name: string;\n\n pipes: KbqPipe[];\n\n readonly: boolean;\n disabled: boolean;\n changed: boolean;\n // this is business logic state (like a flag)\n saved: boolean;\n}\n\nexport interface KbqPipe {\n name: string;\n id?: string | number;\n type: KbqPipeType;\n value: unknown | null;\n\n search?: boolean;\n selectAll?: boolean;\n\n openOnAdd?: boolean;\n openOnReset?: boolean;\n\n /**\n * This is special logic that unselect all items when all selected because \"all selected = nothing selected\".\n * Default is true\n * */\n selectedAllEqualsSelectedNothing?: boolean;\n\n /** @deprecated use cleanable = false and removable = false instead */\n required?: boolean;\n cleanable: boolean;\n removable: boolean;\n disabled: boolean;\n}\n\nexport interface KbqPipeData<V> extends KbqPipe {\n value: V | null;\n}\n\nexport interface KbqPipeTemplate extends Omit<KbqPipe, 'value'> {\n values?: unknown[];\n valueTemplate?: TemplateRef<any> | string;\n}\n\nexport interface KbqSaveFilterError {\n text?: string;\n nameAlreadyExists?: boolean;\n}\n\n/** saving statuses for KbqSaveFilterEvent */\nexport enum KbqSaveFilterStatuses {\n OnlyChanges = 'onlyChanges',\n NewName = 'newName',\n NewFilter = 'newFilter'\n}\n\nexport interface KbqSaveFilterEvent {\n filter: KbqFilter;\n filterBar: KbqFilterBar;\n status?: KbqSaveFilterStatuses;\n}\n\n/** Flattened node */\nexport class KbqTreeSelectFlatNode {\n name: string;\n value: unknown;\n level: number;\n expandable: boolean;\n parent?: KbqTreeSelectFlatNode;\n}\n\nexport interface KbqTreeSelectNode {\n children: KbqTreeSelectNode[] | null;\n name: string;\n value: unknown;\n}\n\n/**\n * Build the file structure tree. The `value` is the Json object, or a sub-tree of a Json object.\n * The return value is the list of extends `KbqTreeSelectNode`.\n */\nexport function kbqBuildTree<T extends KbqTreeSelectNode>(value: Record<string, unknown>, level: number): T[] {\n const data: T[] = [];\n\n for (const [k, v] of Object.entries(value)) {\n const isBranch = typeof v === 'object' && v !== null && !(v as Record<string, unknown>)['value'];\n\n data.push({\n name: k.toString(),\n value: v,\n children: isBranch ? kbqBuildTree(v as Record<string, unknown>, level + 1) : null\n } as T);\n }\n\n return data;\n}\n","import { ChangeDetectionStrategy, Component, inject, output } from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KBQ_FILTER_BAR_HOST, KbqFilter } from './filter-bar.types';\n\n@Component({\n selector: 'kbq-filter-reset',\n imports: [KbqButtonModule],\n template: `\n <button kbq-button [color]=\"'theme'\" [kbqStyle]=\"'transparent'\" (click)=\"resetFilter()\">\n <ng-content>{{ localeData }}</ng-content>\n </button>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'kbq-filter-reset'\n }\n})\nexport class KbqFilterReset {\n /** KbqFilterBar host seam */\n private readonly filterBar = inject(KBQ_FILTER_BAR_HOST);\n\n /** Event that is generated whenever the user reset a filter. */\n readonly onResetFilter = output<KbqFilter | null>();\n\n /** localized data\n * @docs-private */\n get localeData() {\n return this.filterBar.configuration.reset.buttonName;\n }\n\n protected resetFilter() {\n this.onResetFilter.emit(this.filterBar.filter()!);\n\n this.filterBar.onResetFilter.next(true);\n }\n}\n","import { Directive, effect, inject } from '@angular/core';\nimport { KbqButton, KbqButtonStyles } from '@koobiq/components/button';\nimport { KbqComponentColors } from '@koobiq/components/core';\nimport { KBQ_FILTER_BAR_HOST } from './filter-bar.types';\nimport { KbqFilters } from './filters';\n\n@Directive({\n selector: '[kbqFilterBarButton]',\n host: {\n '(click)': 'saveFocusedElement()',\n '(keydown)': 'saveFocusedElement()'\n }\n})\nexport class KbqFilterBarButton {\n private readonly button = inject(KbqButton);\n /** KbqFilterBar host seam */\n private readonly filterBar = inject(KBQ_FILTER_BAR_HOST);\n /** KbqFilters instance */\n protected readonly filters = inject(KbqFilters);\n\n constructor() {\n // Reflect the current filter's saved/changed state in the button style. Reading `filterBar.filter`\n // (a signal-backed accessor) subscribes this effect, replacing the retired `changes` bus.\n effect(() => {\n const filter = this.filterBar.filter();\n\n this.button.kbqStyle = KbqButtonStyles.Outline;\n this.button.color = KbqComponentColors.ContrastFade;\n\n if (filter?.changed || filter?.saved) {\n this.button.kbqStyle = 'changed-filter';\n this.button.color = KbqComponentColors.Empty;\n }\n });\n }\n\n /** @docs-private */\n saveFocusedElement() {\n this.filters.saveFocusedElement(this.button);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n input,\n output,\n TemplateRef,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { KbqAlertModule } from '@koobiq/components/alert';\nimport { KbqButton, KbqButtonModule } from '@koobiq/components/button';\nimport { KbqFormsModule } from '@koobiq/components/core';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { merge } from 'rxjs';\nimport { distinctUntilChanged, filter } from 'rxjs/operators';\nimport { KbqFilterBar } from './filter-bar';\nimport { KbqFilter, KbqSaveFilterError, KbqSaveFilterEvent, KbqSaveFilterStatuses } from './filter-bar.types';\n\n/**\n * The \"save / rename filter\" popover, extracted from `KbqFilters` (SRP). Owns the save form state, the\n * name control, validation/error display and the save/rename flow. It declares the popover's header,\n * content and footer templates and pushes them imperatively onto the trigger it is given (via the\n * `popoverTrigger` input), so there is no cross-component template binding on the parent (which would\n * otherwise risk `ExpressionChangedAfterItHasBeenCheckedError`). `KbqFilters` keeps the trigger (on its\n * main button), focus management and the public `filterSavedSuccessfully`/`filterSavedUnsuccessfully` API,\n * delegating to this component.\n *\n * @docs-private\n */\n@Component({\n selector: 'kbq-filter-save-popover',\n imports: [ReactiveFormsModule, KbqButtonModule, KbqFormsModule, KbqInputModule, KbqAlertModule],\n template: `\n <ng-template #header>{{ popoverHeader }}</ng-template>\n\n <ng-template #content>\n @if (showFilterSavingError) {\n <kbq-alert\n class=\"layout-margin-bottom-m\"\n role=\"alert\"\n [alertColor]=\"'error'\"\n [alertStyle]=\"'colored'\"\n [compact]=\"true\"\n >\n {{ filterSavingErrorText }}\n </kbq-alert>\n }\n <div class=\"kbq-form-vertical\">\n <div class=\"kbq-form__row\">\n <label class=\"kbq-form__label\">{{ localeData.name }}</label>\n\n <kbq-form-field class=\"kbq-form__control\">\n <input\n #newFilterName\n kbqInput\n type=\"text\"\n [attr.aria-label]=\"localeData.name\"\n [formControl]=\"filterName\"\n (keydown.enter)=\"saveAsNew($event)\"\n />\n\n @if (filterName.hasError('filterNameAlreadyExist')) {\n <kbq-error>{{ localeData.error }}</kbq-error>\n }\n </kbq-form-field>\n </div>\n </div>\n </ng-template>\n\n <ng-template #footer>\n <button\n #saveFilterButton\n kbq-button\n class=\"layout-margin-right-l\"\n [class.kbq-progress]=\"isSaving\"\n [disabled]=\"isSaving\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'filled'\"\n (click)=\"saveAsNew()\"\n >\n {{ localeData.saveButton }}\n </button>\n <button\n kbq-button\n [color]=\"'contrast-fade'\"\n [kbqStyle]=\"'filled'\"\n [disabled]=\"isSaving\"\n (click)=\"close(true)\"\n >\n {{ localeData.cancelButton }}\n </button>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqFilterSavePopover implements AfterViewInit {\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n /** Popover trigger owned by the parent (`KbqFilters` main button). */\n readonly popoverTrigger = input.required<KbqPopoverTrigger>();\n /** Filter bar, used for the save payload, the current filter and localized strings. */\n readonly filterBar = input.required<KbqFilterBar>();\n\n /** Emits when the user saves/renames a filter. */\n readonly save = output<KbqSaveFilterEvent>();\n /** Emits when the popover closes; the boolean requests focus restoration by the parent. */\n readonly closed = output<boolean>();\n\n /** @docs-private */\n readonly headerTemplate = viewChild.required<TemplateRef<unknown>>('header');\n /** @docs-private */\n readonly contentTemplate = viewChild.required<TemplateRef<unknown>>('content');\n /** @docs-private */\n readonly footerTemplate = viewChild.required<TemplateRef<unknown>>('footer');\n\n private readonly newFilterName = viewChild.required<ElementRef>('newFilterName');\n private readonly saveFilterButton = viewChild.required<KbqButton>('saveFilterButton');\n\n /** new filter name for saving */\n filterName: FormControl<string | null> = new FormControl<string | null>(null);\n\n /** true if saving a new filter, false if saving changes in filter */\n saveNewFilter: boolean = false;\n\n showFilterSavingError: boolean = false;\n filterSavingErrorText: string = '';\n\n isSaving: boolean = false;\n\n /** localized data\n * @docs-private */\n get localeData() {\n return this.filterBar().configuration.filters;\n }\n\n /** header of popover. Depends on the mode */\n get popoverHeader(): string {\n return this.saveNewFilter ? this.localeData.saveAsNew : this.localeData.saveChanges;\n }\n\n ngAfterViewInit(): void {\n // Push the templates onto the parent's trigger imperatively (no parent-side binding).\n const trigger = this.popoverTrigger();\n\n trigger.header = this.headerTemplate();\n trigger.content = this.contentTemplate();\n trigger.footer = this.footerTemplate();\n }\n\n openSaveAsNewFilterPopover() {\n this.saveNewFilter = true;\n\n this.preparePopover();\n }\n\n openChangeFilterNamePopover() {\n this.saveNewFilter = false;\n\n this.preparePopover();\n }\n\n saveAsNew(event?: Event) {\n if (this.filterName.invalid) return;\n\n const name = this.filterName.value || '';\n\n // @todo default filter\n // Shallow structural copy (new filter + new pipes array + per-pipe shallow copy), mirroring\n // `KbqFilters.selectFilter`. Avoids `structuredClone` so non-cloneable custom pipe `value`\n // payloads survive a save; every pipe writes `value` by reassignment, never in place.\n const current = this.filterBar().filter();\n const filter: KbqFilter = current\n ? { ...current, pipes: current.pipes.map((pipe) => ({ ...pipe })) }\n : ({ pipes: [] } as unknown as KbqFilter);\n\n filter.name = name;\n filter.saved = true;\n filter.changed = false;\n\n this.isSaving = true;\n this.popoverTrigger().preventClose = true;\n this.filterName.disable();\n\n if (this.saveNewFilter) {\n this.save.emit({ filter, filterBar: this.filterBar(), status: KbqSaveFilterStatuses.NewFilter });\n } else {\n this.save.emit({ filter, filterBar: this.filterBar(), status: KbqSaveFilterStatuses.NewName });\n }\n\n event?.preventDefault();\n }\n\n showError(error?: KbqSaveFilterError) {\n if (error?.nameAlreadyExists) {\n this.filterName.setErrors({ filterNameAlreadyExist: true });\n }\n\n this.showFilterSavingError = true;\n\n this.filterSavingErrorText = error?.text ?? this.filterBar().configuration.filters.errorHint;\n }\n\n close = (restoreFocus: boolean = true) => {\n this.popoverTrigger().hide();\n\n this.closed.emit(restoreFocus);\n\n setTimeout(() => this.changeDetectorRef.detectChanges());\n\n this.showFilterSavingError = false;\n };\n\n /** Hide the popover on a successful save. Focus restoration is handled by the parent. */\n savedSuccessfully() {\n this.isSaving = false;\n this.popoverTrigger().preventClose = false;\n\n this.popoverTrigger().hide();\n\n this.changeDetectorRef.markForCheck();\n }\n\n /** Release the saving state after a failed save (the error itself is shown by the host via `showError`). */\n savedUnsuccessfully() {\n this.isSaving = false;\n this.popoverTrigger().preventClose = false;\n\n this.filterName.enable();\n // Focus via FocusMonitor (keyboard origin) so the focus ring is preserved on the retry path.\n setTimeout(() => this.saveFilterButton().focusViaKeyboard());\n\n this.changeDetectorRef.markForCheck();\n }\n\n private preparePopover() {\n this.filterName = new FormControl<string>(this.filterBar().filter()?.name || '', Validators.required);\n\n const trigger = this.popoverTrigger();\n\n trigger.show();\n\n // Tie to the popover instance (recreated each open) so this per-open control's subscription\n // doesn't accumulate across open/close cycles.\n this.filterName.valueChanges\n .pipe(distinctUntilChanged(), takeUntilDestroyed(trigger.instanceDestroyRef))\n .subscribe(() => (this.showFilterSavingError = false));\n\n merge(...trigger.defaultClosingActions())\n .pipe(\n filter(() => !this.isSaving),\n takeUntilDestroyed(trigger.instanceDestroyRef)\n )\n .subscribe(() => this.close(false));\n\n trigger.visibleChange\n .pipe(\n filter((state) => !state),\n takeUntilDestroyed(trigger.instanceDestroyRef)\n )\n .subscribe(this.close);\n\n setTimeout(() => {\n this.newFilterName().nativeElement.focus();\n this.filterName.setErrors(null);\n });\n }\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n inject,\n input,\n OnInit,\n output,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButton, KbqButtonModule, KbqButtonStyles } from '@koobiq/components/button';\nimport { KbqComponentColors, KbqFormsModule, PopUpPlacements, PopUpSizes } from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqDropdownModule, KbqDropdownTrigger } from '@koobiq/components/dropdown';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqPopoverModule, KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { merge, Observable, of } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { KbqFilterBar } from './filter-bar';\nimport { KbqFilterBarButton } from './filter-bar-button';\nimport { KbqFilter, KbqSaveFilterError, KbqSaveFilterEvent, KbqSaveFilterStatuses } from './filter-bar.types';\nimport { KbqFilterSavePopover } from './filter-save-popover';\n\n@Component({\n selector: 'kbq-filters',\n imports: [\n ReactiveFormsModule,\n KbqButtonModule,\n KbqDropdownModule,\n KbqDividerModule,\n KbqIcon,\n KbqTitleModule,\n KbqInputModule,\n KbqFilterBarButton,\n AsyncPipe,\n KbqTooltipTrigger,\n KbqPopoverModule,\n FormsModule,\n KbqFormsModule,\n KbqFilterSavePopover\n ],\n templateUrl: 'filters.html',\n styleUrls: ['filters.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-filters'\n },\n exportAs: 'kbqFilters'\n})\nexport class KbqFilters implements OnInit {\n /** @docs-private */\n protected readonly elementRef = inject(ElementRef);\n /** @docs-private */\n protected readonly destroyRef = inject(DestroyRef);\n /** @docs-private */\n protected readonly focusMonitor = inject(FocusMonitor);\n /** @docs-private */\n protected readonly placements = PopUpPlacements;\n /** @docs-private */\n protected readonly styles = KbqButtonStyles;\n /** @docs-private */\n protected readonly colors = KbqComponentColors;\n\n /** KbqFilterBar instance */\n protected readonly filterBar = inject(KbqFilterBar);\n\n /** @docs-private */\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n /** @docs-private */\n protected readonly mainButton = viewChild.required<KbqButton>('mainButton');\n /** @docs-private */\n protected readonly saveNewFilterButton = viewChild.required<KbqButton>('saveNewFilterButton');\n /** @docs-private */\n protected readonly filterActionsButton = viewChild.required<KbqButton>('filterActionsButton');\n\n /** @docs-private */\n protected readonly popover = viewChild.required(KbqPopoverTrigger);\n /** @docs-private */\n protected readonly dropdown = viewChild.required(KbqDropdownTrigger);\n /** @docs-private */\n protected readonly filterActionsDropdown = viewChild<KbqDropdownTrigger>('filterActionsButton');\n\n /** @docs-private */\n protected readonly savePopover = viewChild.required(KbqFilterSavePopover);\n\n private readonly search = viewChild.required<ElementRef>('search');\n\n /** control for search filter */\n readonly searchControl = new FormControl<string | null>(null);\n /** filtered by search filters */\n filteredOptions: Observable<KbqFilter[]>;\n\n /** @docs-private */\n protected readonly popoverSize = PopUpSizes.Medium;\n /** @docs-private */\n protected readonly popoverOffset: number = 4;\n\n readonly filters = input.required<KbqFilter[]>();\n\n /** Event that is generated whenever the user selects a filter. */\n readonly onSelectFilter = output<KbqFilter>();\n /**\n * Event that is generated whenever the user save a filter.\n *\n * The emitted `filter` shares its pipe objects with the live filter by design (so the rendered pipes keep\n * their identity across a save instead of being destroyed and recreated). Consumers that persist\n * `event.filter` as an immutable record should snapshot it first (e.g. via `KbqFilterBar.saveFilterState`\n * or a structural copy) — otherwise later in-place pipe edits will mutate the stored reference.\n */\n readonly onSave = output<KbqSaveFilterEvent>();\n /** Event that is generated whenever the user change a filter. */\n readonly onChangeFilter = output<KbqSaveFilterEvent>();\n /** Event that is generated whenever the user remove a filter. */\n readonly onRemoveFilter = output<KbqFilter>();\n /** Event that is generated whenever the user reset a filter changes. */\n readonly onResetFilterChanges = output<KbqFilter | null>();\n\n /** Component state. true if opened dropdown or popup */\n get opened(): boolean {\n return !!(this.popover()?.isOpen || this.dropdown()?.opened);\n }\n\n /** Component state. true if opened dropdown or popup of filterActions */\n get filterActionsOpened(): boolean {\n return !!(this.popover()?.isOpen || this.filterActionsDropdown()?.opened);\n }\n\n /** Selected filter. Kept as a plain getter facade over the bar's `filter` model. */\n get filter(): KbqFilter | null {\n return this.filterBar.filter();\n }\n\n /** Component state. True if 'filters' input contains no elements. */\n get isEmpty(): boolean {\n return this.filters().length === 0;\n }\n\n /** localized data\n * @docs-private */\n get localeData() {\n return this.filterBar.configuration.filters;\n }\n\n /** Current focus origin state.\n * @docs-private */\n get focusOrigin(): FocusOrigin {\n return this._focusOrigin;\n }\n\n private _focusOrigin: FocusOrigin = null;\n\n private focusedElementBeforeOpen: KbqButton | null;\n\n ngOnInit(): void {\n this.filteredOptions = merge(\n of(this.filters()),\n this.searchControl.valueChanges.pipe(map((value) => this.getFilteredOptions(value)))\n );\n\n this.focusMonitor\n .monitor(this.elementRef, true)\n .pipe(\n filter((origin) => !!origin),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((origin) => (this._focusOrigin = origin));\n }\n\n /** @docs-private */\n focusedElementBeforeIs(button: KbqButton): boolean {\n return this.focusedElementBeforeOpen === button;\n }\n\n selectFilter(filter: KbqFilter) {\n // Isolate the active filter from the saved source with a shallow structural copy (new filter object\n // + new pipes array + per-pipe shallow copy) instead of a deep `structuredClone`. Every pipe writes\n // its `value` by reassignment (never in-place mutation), so this fully isolates subsequent edits\n // while preserving any non-cloneable payload inside `value`. `structuredClone` (P2-20) is reserved\n // for the explicit save/restore boundary (`KbqFilterBar.saveFilterState`/`restoreFilterState`).\n this.filterBar.internalFilterChanges.next({ ...filter, pipes: filter.pipes.map((pipe) => ({ ...pipe })) });\n\n this.onSelectFilter.emit(filter);\n }\n\n saveChanges() {\n const current = this.filterBar.filter();\n\n if (!current) return;\n\n // Immutable update (new reference) so the `filter` signal reacts; `internalFilterChanges` sets the\n // signal and emits `filterChange`.\n const updated = { ...current, saved: true, changed: false };\n\n this.filterBar.internalFilterChanges.next(updated);\n\n this.onSave.emit({\n filter: updated,\n filterBar: this.filterBar,\n status: KbqSaveFilterStatuses.OnlyChanges\n });\n }\n\n restoreFocus() {\n // The popover can be opened from the dropdown item or programmatically, paths that never\n // capture a trigger via `saveFocusedElement`. Fall back to the main button so focus returns\n // to the filters control instead of being dropped on `<body>` (WCAG 2.4.3).\n const target = this.focusedElementBeforeOpen ?? this.mainButton();\n\n if (target && !target.disabled) {\n this.focusMonitor.focusVia(target.elementRef, this.focusOrigin);\n }\n\n this.focusedElementBeforeOpen = null;\n }\n\n /** @docs-private */\n saveFocusedElement(button?: KbqButton) {\n this.focusedElementBeforeOpen = button || null;\n }\n\n /** Restore focus when the save popover reports it closed. @docs-private */\n onSavePopoverClosed(restoreFocus: boolean) {\n if (restoreFocus) this.restoreFocus();\n\n this.changeDetectorRef.markForCheck();\n }\n\n /** @docs-private */\n stopEventPropagation(event: Event) {\n event.stopPropagation();\n }\n\n /** @docs-private */\n searchKeydownHandler(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.closePopover();\n } else {\n this.stopEventPropagation(event);\n }\n }\n\n /** @docs-private */\n onDropdownOpen() {\n this.searchControl.setValue(null);\n setTimeout(() => this.search().nativeElement.focus());\n }\n\n resetFilterChanges() {\n this.filterBar.resetFilterChangedState();\n\n this.onResetFilterChanges.emit(this.filter!);\n }\n\n removeFilter() {\n this.onRemoveFilter.emit(this.filter!);\n\n setTimeout(() => this.focusMonitor.focusVia(this.mainButton().elementRef, this.focusOrigin), 0);\n }\n\n /** Hide the popup and restore focus.\n * Use this method in the onSave or onChangeFilter events after the data has been successfully saved. */\n filterSavedSuccessfully() {\n this.savePopover().savedSuccessfully();\n\n setTimeout(() => this.restoreFocus(), 0);\n\n this.changeDetectorRef.markForCheck();\n }\n\n /** Shows an error. Use this method in the onSave or onChangeFilter events if saving data failed. */\n filterSavedUnsuccessfully(error?: KbqSaveFilterError) {\n // Re-enable the name control FIRST: `enable()` re-runs the control's validators and would wipe a\n // custom `filterNameAlreadyExist` error set beforehand, so apply the error AFTER re-enabling —\n // otherwise the inline \"name already exists\" message never renders.\n this.savePopover().savedUnsuccessfully();\n\n this.showError(error);\n\n this.changeDetectorRef.markForCheck();\n }\n\n // Delegating facade to the extracted `KbqFilterSavePopover`: the save-popover state, templates and\n // logic live in that child; these members keep `KbqFilters`' public surface for callers and the template.\n\n /** @docs-private */\n get filterName(): FormControl<string | null> {\n return this.savePopover().filterName;\n }\n\n /** @docs-private */\n get saveNewFilter(): boolean {\n return this.savePopover().saveNewFilter;\n }\n\n /** @docs-private */\n set saveNewFilter(value: boolean) {\n this.savePopover().saveNewFilter = value;\n }\n\n /** @docs-private */\n get isSaving(): boolean {\n return this.savePopover().isSaving;\n }\n\n /** @docs-private */\n set isSaving(value: boolean) {\n this.savePopover().isSaving = value;\n }\n\n /** @docs-private */\n get showFilterSavingError(): boolean {\n return this.savePopover().showFilterSavingError;\n }\n\n /** @docs-private */\n set showFilterSavingError(value: boolean) {\n this.savePopover().showFilterSavingError = value;\n }\n\n /** @docs-private */\n get filterSavingErrorText(): string {\n return this.savePopover().filterSavingErrorText;\n }\n\n /** header of popover. Depends on the mode\n * @docs-private */\n get popoverHeader(): string {\n return this.savePopover().popoverHeader;\n }\n\n /** @docs-private */\n openSaveAsNewFilterPopover() {\n this.savePopover().openSaveAsNewFilterPopover();\n }\n\n /** @docs-private */\n openChangeFilterNamePopover() {\n this.savePopover().openChangeFilterNamePopover();\n }\n\n /** @docs-private */\n saveAsNew(event?: Event) {\n this.savePopover().saveAsNew(event);\n }\n\n /** @docs-private */\n showError(error?: KbqSaveFilterError) {\n this.savePopover().showError(error);\n }\n\n /** @docs-private */\n closePopover(restoreFocus: boolean = true) {\n this.savePopover().close(restoreFocus);\n }\n\n private getFilteredOptions(value: string | null): KbqFilter[] {\n return value\n ? this.filters().filter((filter) => filter.name.toLowerCase().includes(value.toLowerCase()))\n : this.filters();\n }\n}\n","<button\n #mainButton\n #popoverRef=\"kbqPopover\"\n kbq-button\n kbq-title\n kbqFilterBarButton\n kbqPopover\n [kbqDropdownTriggerFor]=\"savedFilters\"\n [kbqPopoverArrow]=\"false\"\n [kbqPopoverOffset]=\"popoverOffset\"\n [kbqPopoverClass]=\"'kbq-filters__save-as-new-filter-popover'\"\n [kbqPopoverPlacement]=\"placements.BottomLeft\"\n [kbqPopoverPlacementPriority]=\"[placements.BottomLeft, placements.TopLeft]\"\n [kbqPopoverSize]=\"popoverSize\"\n [kbqTrigger]=\"'manual'\"\n [disabled]=\"savePopover.isSaving\"\n [class.kbq-active]=\"focusedElementBeforeIs(mainButton) && opened\"\n (dropdownClosed)=\"searchControl.setValue('')\"\n (dropdownOpened)=\"onDropdownOpen()\"\n>\n <span #kbqTitleText class=\"kbq-filters__filter-name\">\n @if (filter?.name) {\n {{ filter!.name }}\n } @else {\n <ng-content>\n <i kbq-icon=\"kbq-list_16\"></i>\n {{ localeData.defaultName }}\n </ng-content>\n }\n </span>\n</button>\n\n@if (filterBar.isChanged() && !filterBar.isSaved()) {\n <button\n #saveNewFilterButton\n kbqTooltip=\"{{ localeData.saveNewFilterTooltip }}\"\n kbq-button\n kbqFilterBarButton\n class=\"kbq-button_action\"\n [attr.aria-label]=\"localeData.saveNewFilterTooltip\"\n [class.kbq-active]=\"focusedElementBeforeIs(saveNewFilterButton) && opened\"\n [color]=\"colors.Empty\"\n [disabled]=\"savePopover.isSaving\"\n (click)=\"savePopover.openSaveAsNewFilterPopover()\"\n >\n <i kbq-icon=\"kbq-floppy-disk_16\" aria-hidden=\"true\"></i>\n </button>\n}\n\n@if (filterBar.isSaved()) {\n <button\n #filterActionsButton\n kbq-button\n kbqFilterBarButton\n class=\"kbq-button_action\"\n [attr.aria-label]=\"localeData.actionsTooltip\"\n [color]=\"colors.Empty\"\n [kbqDropdownTriggerFor]=\"filterActions\"\n [disabled]=\"savePopover.isSaving\"\n [class.kbq-active]=\"focusedElementBeforeIs(filterActionsButton) && filterActionsOpened\"\n [class]=\"{ 'kbq-button_changed-saved-filter': filterBar.isSavedAndChanged() }\"\n >\n <i kbq-icon=\"kbq-ellipsis-vertical_16\" aria-hidden=\"true\"></i>\n </button>\n\n <i kbq-icon=\"kbq-chevron-right-s_16\" class=\"kbq-filter-bar__arrow\" [color]=\"'theme'\"></i>\n} @else {\n <kbq-divider class=\"kbq-filter-bar__separator\" [vertical]=\"true\" />\n}\n\n<kbq-dropdown #savedFilters=\"kbqDropdown\" [class]=\"'kbq-filters__dropdown'\">\n <div [style.display]=\"isEmpty ? 'none' : 'initial'\">\n <kbq-form-field noBorders>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n\n <input\n #search\n placeholder=\"{{ localeData.searchPlaceholder }}\"\n autocomplete=\"off\"\n kbqInput\n [attr.aria-label]=\"localeData.searchPlaceholder\"\n [formControl]=\"searchControl\"\n (click)=\"stopEventPropagation($event)\"\n (keydown)=\"searchKeydownHandler($event)\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n\n <kbq-divider />\n\n @for (filter of filteredOptions | async; track filter) {\n <button\n kbq-dropdown-item\n kbq-title\n [class.kbq-selected]=\"filterBar.filter()?.name === filter.name\"\n (click)=\"selectFilter(filter)\"\n >\n {{ filter.name }}\n </button>\n } @empty {\n <button kbq-dropdown-item [disabled]=\"true\">\n {{ localeData.searchEmptyResult }}\n </button>\n }\n\n <kbq-divider />\n </div>\n\n <button kbq-dropdown-item (click)=\"savePopover.openSaveAsNewFilterPopover()\">\n <i kbq-icon=\"kbq-plus_16\"></i>\n {{ localeData.saveAsNewFilter }}\n </button>\n</kbq-dropdown>\n\n<kbq-dropdown #filterActions=\"kbqDropdown\" [class]=\"'kbq-filters__dropdown'\">\n @if (filterBar.isSavedAndChanged() && !filterBar.isReadOnly()) {\n <button\n kbq-dropdown-item\n [class]=\"{ 'kbq-button_changed-saved-filter': filterBar.isSavedAndChanged() }\"\n (click)=\"saveChanges()\"\n >\n <i kbq-icon=\"kbq-floppy-disk_16\"></i>\n {{ localeData.saveChanges }}\n @if (filterBar.isSavedAndChanged()) {\n <i kbq-icon=\"kbq-circle-xs_16\" class=\"kbq-icon-button kbq-warning layout-margin-left-xs\"></i>\n }\n </button>\n }\n <button kbq-dropdown-item (click)=\"savePopover.openSaveAsNewFilterPopover()\">\n <i kbq-icon=\"kbq-plus_16\"></i>\n {{ localeData.saveAsNew }}\n </button>\n\n @if (!filterBar.isReadOnly()) {\n <button kbq-dropdown-item (click)=\"savePopover.openChangeFilterNamePopover()\">\n <i kbq-icon=\"kbq-pencil_16\"></i>\n {{ localeData.change }}\n </button>\n }\n\n @if (filterBar.isSavedAndChanged() || !filterBar.isReadOnly()) {\n <kbq-divider />\n }\n\n @if (filterBar.isSavedAndChanged()) {\n <button kbq-dropdown-item (click)=\"resetFilterChanges()\">\n <i kbq-icon=\"kbq-circle-xmark_16\"></i>\n {{ localeData.resetChanges }}\n </button>\n }\n @if (!filterBar.isReadOnly()) {\n <button kbq-dropdown-item (click)=\"removeFilter()\">\n <i kbq-icon=\"kbq-trash_16\"></i>\n {{ localeData.remove }}\n </button>\n }\n</kbq-dropdown>\n\n<kbq-filter-save-popover\n #savePopover\n [popoverTrigger]=\"popoverRef\"\n [filterBar]=\"filterBar\"\n (save)=\"onSave.emit($event)\"\n (closed)=\"onSavePopoverClosed($event)\"\n/>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n contentChild,\n effect,\n forwardRef,\n inject,\n input,\n model,\n output,\n ViewEncapsulation\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KBQ_LOCALE_SERVICE } from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n KBQ_FILTER_BAR_CONFIGURATION,\n KBQ_FILTER_BAR_DEFAULT_CONFIGURATION,\n KBQ_FILTER_BAR_HOST,\n KbqFilter,\n KbqFilterBarConfiguration,\n KbqFilterBarHost,\n KbqPipe,\n KbqPipeTemplate\n} from './filter-bar.types';\nimport { KbqFilterReset } from './filter-reset';\nimport { KbqFilters } from './filters';\n\n@Component({\n selector: 'kbq-filter-bar, [kbq-filter-bar]',\n imports: [KbqDividerModule],\n template: `\n <div class=\"kbq-filter-bar__left\">\n <ng-content select=\"kbq-filters\" />\n\n <ng-content />\n\n <ng-content select=\"kbq-pipe-add\" />\n\n <ng-content select=\"kbq-filter-reset\" />\n </div>\n\n <div class=\"kbq-filter-bar__right\">\n <ng-content select=\"kbq-search-expandable\" />\n\n <ng-content select=\"kbq-filter-refresher, [kbq-filter-refresher]\" />\n </div>\n `,\n styleUrls: ['filter-bar-tokens.scss', 'filter-bar.scss'],\n providers: [{ provide: KBQ_FILTER_BAR_HOST, useExisting: forwardRef(() => KbqFilterBar) }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-filter-bar'\n }\n})\nexport class KbqFilterBar implements KbqFilterBarHost {\n /** @docs-private */\n protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n /** @docs-private */\n protected readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n\n readonly externalConfiguration = inject(KBQ_FILTER_BAR_CONFIGURATION, { optional: true });\n\n /** Localized strings and configuration for the filter-bar and its pipes. */\n configuration: KbqFilterBarConfiguration = KBQ_FILTER_BAR_DEFAULT_CONFIGURATION;\n\n /** @docs-private */\n readonly filters = contentChild(KbqFilters);\n /** @docs-private */\n readonly filterReset = contentChild(KbqFilterReset);\n\n /**\n * This is special logic that unselect all items when all selected because \"all selected = nothing selected\".\n * Default is true\n * */\n readonly selectedAllEqualsSelectedNothing = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /**\n * Filter that is currently selected. A two-way-bindable `model()`: derived state (`isSaved`/`isChanged`/…)\n * is exposed via `computed()` off it and change detection is driven by signal reactivity. `model()`\n * auto-provides the `filterChange` output for `[(filter)]` two-way binding.\n */\n readonly filter = model<KbqFilter | null>(null);\n\n /** An array of templates that are used when adding a pipe. Also contains lists of options to select (values). */\n readonly pipeTemplates = input<KbqPipeTemplate[]>([]);\n\n /** Event that emits whenever the value of the pipe changes. */\n readonly onChangePipe = output<KbqPipe>();\n /** Event that emits whenever the pipe deleted. */\n readonly onRemovePipe = output<KbqPipe>();\n /** Event that emits whenever the pipe cleared. */\n readonly onClearPipe = output<KbqPipe>();\n /** Event that emits whenever the select or multiselect pipe closed. */\n readonly onClosePipe = output<KbqPipe>();\n\n /** Whether the current filter is saved */\n readonly isSaved = computed(() => !!this.filter()?.saved);\n\n /** Whether the current filter is changed */\n readonly isChanged = computed(() => !!this.filter()?.changed);\n\n /** Whether the current filter is saved and changed */\n readonly isSavedAndChanged = computed(() => this.isSaved() && this.isChanged());\n\n /** Whether the current filter is readonly */\n readonly isReadOnly = computed(() => !!this.filter()?.readonly);\n\n /** Whether the current filter is disabled */\n readonly isDisabled = computed(() => !!this.filter()?.disabled);\n\n private savedFilter: KbqFilter | null = null;\n\n /**\n * All changes.\n * @deprecated noop. Reactivity is driven by the `filter` signal now; this never emits and will be\n * removed in the next major.\n */\n readonly changes = new BehaviorSubject<void>(undefined);\n\n /** Event that emits whenever the filter is reset. */\n readonly onResetFilter = new BehaviorSubject<boolean>(false);\n /** internal filter changes */\n readonly internalFilterChanges = new BehaviorSubject<KbqFilter | null>(null);\n /** internal changes in templates */\n readonly internalTemplatesChanges = new BehaviorSubject<KbqPipeTemplate[] | null>(null);\n /** this subject need for opens pipe after adding\n * @docs-private */\n readonly openPipe = new BehaviorSubject<string | number | null>(null);\n\n constructor() {\n // Push template changes into the internal stream — replaces the retired `pipeTemplates` accessor\n // setter side effect now that `pipeTemplates` is a signal `input()`.\n effect(() => this.internalTemplatesChanges.next(this.pipeTemplates()));\n\n this.internalFilterChanges.pipe(takeUntilDestroyed()).subscribe((filter) => {\n // `model.set(...)` auto-emits `filterChange` for the two-way binding.\n this.filter.set(filter);\n });\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n\n if (!this.localeService) {\n this.initDefaultParams();\n }\n\n // A pipe value change marks the current filter as \"changed\". Produce a new filter reference (not an\n // in-place mutation) so the `filter` model — and every `computed()`/`effect()` reading it — reacts.\n // `removePipe` owns its own `changed` flag in a single `set` (one `filterChange` emission), so only\n // `onChangePipe` feeds this subscriber. `model.set(...)` auto-emits `filterChange` for the binding.\n outputToObservable(this.onChangePipe)\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n const current = this.filter();\n\n if (current) {\n this.filter.set({ ...current, changed: true });\n }\n });\n }\n\n /** Remove pipe from current filter and emit event */\n removePipe(pipe: KbqPipe) {\n const current = this.filter();\n\n if (!current?.pipes.includes(pipe)) return;\n\n // Replace the filter (and its `pipes` array) with new references instead of mutating in place, so the\n // `filter` signal reacts; unknown pipes are left untouched. Fold in `changed: true` here — the removal\n // IS the change — so it happens in a single `set` (one `filterChange` emission) rather than relying on\n // `onRemovePipe` to trigger a second update.\n this.filter.set({ ...current, changed: true, pipes: current.pipes.filter((item) => item !== pipe) });\n\n this.onRemovePipe.emit(pipe);\n }\n\n /**\n * Save current state of filter.\n *\n * Deep-clones the filter via `structuredClone`, so any pipe `value` payload handed to save/restore must be\n * structured-cloneable (plain data — no functions, DOM nodes, class instances or `TemplateRef`s), otherwise\n * `structuredClone` throws `DataCloneError`. All built-in pipes produce cloneable values.\n */\n saveFilterState(filter?: KbqFilter) {\n this.savedFilter = structuredClone(filter ?? this.filter());\n }\n\n /**\n * Restore previously saved filter state.\n *\n * @see `saveFilterState` — pipe `value` payloads must be structured-cloneable.\n */\n restoreFilterState(filter?: KbqFilter) {\n const state = filter ?? this.savedFilter;\n\n // Nothing to restore — bail out instead of wiping the current filter with `structuredClone(null)`.\n if (!state) return;\n\n this.filter.set(structuredClone(state));\n }\n\n /** Set the filter state \"changed\" to false */\n resetFilterChangedState() {\n const current = this.filter();\n\n if (!current) return;\n\n this.filter.set({ ...current, changed: false });\n }\n\n private updateLocaleParams = () => {\n this.configuration = this.externalConfiguration || this.localeService?.getParams('filterBar');\n\n this.changeDetectorRef.markForCheck();\n };\n\n private initDefaultParams() {\n this.configuration = KBQ_FILTER_BAR_DEFAULT_CONFIGURATION;\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KBQ_FILTER_BAR_DEFAULT_CONFIGURATION, KBQ_FILTER_BAR_HOST } from './filter-bar.types';\n\n@Component({\n selector: 'kbq-filter-refresher, [kbq-filter-refresher]',\n imports: [\n KbqButtonModule,\n KbqIconModule\n ],\n template: `\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [attr.aria-label]=\"localeData.refresher.refresh\"\n >\n <i kbq-icon=\"kbq-arrow-rotate-right_16\" aria-hidden=\"true\"></i>\n </button>\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [attr.aria-label]=\"localeData.refresher.settings\"\n >\n <i kbq-icon=\"kbq-chevron-down_16\" aria-hidden=\"true\"></i>\n </button>\n `,\n styleUrls: ['filter-refresher.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-filter-refresher'\n }\n})\nexport class KbqFilterRefresher {\n /** KbqFilterBar host seam */\n private readonly filterBar = inject(KBQ_FILTER_BAR_HOST, { optional: true });\n\n /** localized data\n * @docs-private */\n protected get localeData() {\n return this.filterBar?.configuration ?? KBQ_FILTER_BAR_DEFAULT_CONFIGURATION;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqOption, KbqOptionModule } from '@koobiq/components/core';\nimport { KbqDropdownModule } from '@koobiq/components/dropdown';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqSelect, KbqSelectModule } from '@koobiq/components/select';\nimport { KbqToolTipModule } from '@koobiq/components/tooltip';\nimport { KBQ_FILTER_BAR_HOST, KbqFilter, KbqPipe, KbqPipeTemplate } from './filter-bar.types';\nimport { getId } from './pipes/base-pipe';\n\n@Component({\n selector: 'kbq-pipe-add',\n imports: [\n KbqDropdownModule,\n KbqToolTipModule,\n KbqButtonModule,\n KbqIcon,\n KbqOptionModule,\n KbqSelectModule\n ],\n template: `\n <kbq-select #select [tabIndex]=\"-1\" [multiple]=\"true\" [value]=\"addedPipes()\" [compareWith]=\"compareWith\">\n <button\n kbqTooltip=\"{{ filterBar.configuration.add.tooltip }}\"\n kbq-button\n kbq-select-matcher\n [attr.aria-label]=\"filterBar.configuration.add.tooltip\"\n [color]=\"'contrast-fade'\"\n [kbqStyle]=\"'outline'\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n >\n <i kbq-icon=\"kbq-plus_16\" aria-hidden=\"true\"></i>\n </button>\n\n @for (template of filterBar.pipeTemplates(); track template) {\n <kbq-option\n #option\n [userSelect]=\"true\"\n [value]=\"template\"\n [showCheckbox]=\"false\"\n (click)=\"addPipeFromTemplate(option)\"\n (keydown.enter)=\"addPipeFromTemplate(option)\"\n (keydown.space)=\"addPipeFromTemplate(option)\"\n >\n {{ template.name }}\n </kbq-option>\n }\n </kbq-select>\n\n <!-- Announces a newly-added pipe to assistive tech (WCAG 4.1.3). -->\n <div class=\"cdk-visually-hidden\" aria-live=\"polite\" aria-atomic=\"true\">{{ announcement() }}</div>\n `,\n styleUrl: 'pipe-add.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-pipe-add'\n }\n})\nexport class KbqPipeAdd {\n /** KbqFilterBar instance */\n protected readonly filterBar = inject(KBQ_FILTER_BAR_HOST);\n\n /** @docs-private */\n readonly select = viewChild.required(KbqSelect);\n\n /** Event that is generated after add pipe. */\n readonly onAddPipe = output<KbqPipeTemplate>();\n\n /** template of filter */\n readonly filterTemplate = input<KbqFilter>({\n name: '',\n pipes: [],\n readonly: false,\n disabled: false,\n changed: false,\n saved: false\n });\n\n /**\n * Ids of the pipes already added to the current filter. Used to open an already-added pipe.\n * Derived from the `filter` signal so it stays in sync without the retired `changes` bus.\n */\n readonly addedPipes = computed(() => this.filterBar.filter()?.pipes.map((pipe: KbqPipe) => getId(pipe)) ?? []);\n\n /**\n * Visually-hidden live-region text announcing a newly-added pipe to assistive tech (WCAG 4.1.3).\n * @docs-private\n */\n protected readonly announcement = signal('');\n\n addPipeFromTemplate(option: KbqOption) {\n if (option.selected) {\n this.filterBar.openPipe.next(getId(option.value));\n } else {\n option.select();\n\n const current = this.filterBar.filter() ?? structuredClone(this.filterTemplate());\n\n // Build a new filter reference (immutable add) so the `filter` model reacts; keep `pipes` on a\n // new-reference-on-change model instead of an in-place push. `model.set(...)` auto-emits\n // `filterChange` for the two-way binding.\n this.filterBar.filter.set({\n ...current,\n changed: true,\n pipes: [\n ...current.pipes,\n Object.assign({}, option.value, { values: undefined, valueTemplate: undefined, openOnAdd: true })\n ]\n });\n\n this.onAddPipe.emit(option.value);\n\n const message = this.filterBar.configuration.add.addedAnnouncement.replace('{{ name }}', option.value.name);\n\n // Empty then re-fill on the next tick so an identical consecutive message still changes the\n // live-region text node and is re-announced (a same-string `set` would be an `Object.is` no-op\n // that assistive tech never picks up).\n this.announcement.set('');\n setTimeout(() => this.announcement.set(message));\n }\n\n this.select().close();\n }\n\n /**\n * Function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n */\n compareWith(o1: KbqPipe, o2: string): boolean {\n return getId(o1) === o2;\n }\n}\n","import { AfterContentInit, Directive, inject, Injector, input, ViewContainerRef } from '@angular/core';\nimport { KBQ_FILTER_BAR_PIPES, KbqPipe } from './filter-bar.types';\nimport { KBQ_PIPE_DATA } from './pipes/base-pipe';\n\n@Directive({\n selector: '[kbqPipe]'\n})\nexport class KbqPipeDirective<T extends KbqPipe> implements AfterContentInit {\n private injector = inject(Injector);\n private pipes = inject(KBQ_FILTER_BAR_PIPES);\n private viewContainerRef = inject(ViewContainerRef);\n\n readonly pipe = input<T>(undefined!, { alias: 'kbqPipe' });\n\n ngAfterContentInit(): void {\n const component = this.pipes.get(this.pipe().type);\n\n if (!component) {\n throw new Error(`Can't find component for this type: ${this.pipe().type}`);\n }\n\n this.viewContainerRef.createComponent(component, { injector: this.getInjector(this.pipe()) });\n }\n\n private getInjector(pipe: T): Injector {\n return Injector.create({\n providers: [{ provide: KBQ_PIPE_DATA, useValue: pipe }],\n parent: this.injector\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqFilterBar } from './filter-bar';\nimport { KbqFilterBarButton } from './filter-bar-button';\nimport { kbqFilterBarPipesProvider } from './filter-bar.types';\nimport { KbqFilterRefresher } from './filter-refresher';\nimport { KbqFilterReset } from './filter-reset';\nimport { KbqFilters } from './filters';\nimport { KbqPipeAdd } from './pipe-add';\nimport { KbqPipeDirective } from './pipe.directive';\nimport { KbqPipeButton } from './pipes/pipe-button';\nimport { KbqPipeState } from './pipes/pipe-state';\n\nconst COMPONENTS = [\n KbqFilterBar,\n KbqFilters,\n KbqFilterRefresher,\n KbqFilterBarButton,\n KbqFilterReset,\n KbqPipeAdd,\n KbqPipeDirective,\n KbqPipeButton,\n KbqPipeState\n];\n\n@NgModule({\n imports: COMPONENTS,\n providers: [kbqFilterBarPipesProvider()],\n exports: COMPONENTS\n})\nexport class KbqFilterBarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","i5","i6","i9","this","i10","i7","i8"],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-filter-bar.mjs","sources":["../../../packages/components/filter-bar/pipes/base-pipe.ts","../../../packages/components/filter-bar/pipes/pipe-state.ts","../../../packages/components/filter-bar/pipes/pipe-button.ts","../../../packages/components/filter-bar/pipes/pipe-date-base.ts","../../../packages/components/filter-bar/pipes/pipe-date.ts","../../../packages/components/filter-bar/pipes/pipe-date.html","../../../packages/components/filter-bar/pipes/pipe-datetime.ts","../../../packages/components/filter-bar/pipes/pipe-datetime.html","../../../packages/components/filter-bar/pipes/pipe-input.ts","../../../packages/components/filter-bar/pipes/multi-select-pipe-state.ts","../../../packages/components/filter-bar/pipes/pipe-multi-select.ts","../../../packages/components/filter-bar/pipes/pipe-multi-select.html","../../../packages/components/filter-bar/pipes/tree-select-pipe-base.ts","../../../packages/components/filter-bar/pipes/pipe-multi-tree-select.ts","../../../packages/components/filter-bar/pipes/pipe-multi-tree-select.html","../../../packages/components/filter-bar/pipes/pipe-readonly.ts","../../../packages/components/filter-bar/pipes/pipe-select.ts","../../../packages/components/filter-bar/pipes/pipe-select.html","../../../packages/components/filter-bar/pipes/pipe-text.ts","../../../packages/components/filter-bar/pipes/pipe-text.html","../../../packages/components/filter-bar/pipes/pipe-tree-select.ts","../../../packages/components/filter-bar/pipes/pipe-tree-select.html","../../../packages/components/filter-bar/filter-bar.types.ts","../../../packages/components/filter-bar/filter-reset.ts","../../../packages/components/filter-bar/filter-bar-button.ts","../../../packages/components/filter-bar/filter-save-popover.ts","../../../packages/components/filter-bar/filters.ts","../../../packages/components/filter-bar/filters.html","../../../packages/components/filter-bar/filter-bar.ts","../../../packages/components/filter-bar/filter-refresher.ts","../../../packages/components/filter-bar/pipe-add.ts","../../../packages/components/filter-bar/pipe.directive.ts","../../../packages/components/filter-bar/filter-bar.module.ts","../../../packages/components/filter-bar/koobiq-components-filter-bar.ts"],"sourcesContent":["import { FocusMonitor, FocusOrigin, InputModalityDetector } from '@angular/cdk/a11y';\nimport { DOCUMENT } from '@angular/common';\nimport {\n afterNextRender,\n AfterViewInit,\n ChangeDetectorRef,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n InjectionToken,\n TemplateRef\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { isMac } from '@koobiq/components/core';\nimport { Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport {\n KBQ_FILTER_BAR_DEFAULT_CONFIGURATION,\n KBQ_FILTER_BAR_HOST,\n KbqFilterBarConfiguration,\n KbqPipeData,\n KbqPipeTemplate,\n KbqPipeType,\n KbqSelectValue\n} from '../filter-bar.types';\n\n/** Injection Token for providing configuration of filter-bar */\nexport const KBQ_PIPE_DATA = new InjectionToken('KBQ_PIPE_DATA');\n\n/** function to get unique identifier of an element */\nexport function getId(item: KbqPipeTemplate): KbqPipeType | string | number {\n return item?.id ?? item?.name;\n}\n\n@Directive({\n host: {\n class: 'kbq-pipe',\n '[class]': '\"kbq-pipe__\" + data.type',\n '[class.kbq-pipe_empty]': 'isEmpty',\n '[class.kbq-pipe_cleanable]': 'data.cleanable',\n '[class.kbq-pipe_removable]': 'data.removable',\n '[class.kbq-pipe_disabled]': 'data.disabled'\n }\n})\nexport abstract class KbqBasePipe<V> implements AfterViewInit {\n /** changes of state */\n readonly stateChanges = new Subject<void>();\n /** pipe data. Provided from subclass */\n readonly data = inject<KbqPipeData<V>>(KBQ_PIPE_DATA);\n\n /** KbqFilterBar instance\n * @docs-private */\n protected readonly filterBar = inject(KBQ_FILTER_BAR_HOST, { optional: true });\n /** @docs-private */\n protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n /** @docs-private */\n protected readonly destroyRef = inject(DestroyRef);\n /** @docs-private */\n protected readonly focusMonitor = inject(FocusMonitor);\n /** @docs-private */\n protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly inputModalityDetector = inject(InputModalityDetector);\n private readonly document = inject(DOCUMENT);\n\n /** Last known focus origin within the pipe. Used to preserve the keyboard focus ring on restore. */\n private focusOrigin: FocusOrigin = null;\n\n /**\n * Whether this pipe has been destroyed. Guards deferred (`setTimeout`) work that could otherwise\n * read view queries or mutate `data` after the pipe was removed or the filter switched.\n * @docs-private\n */\n protected destroyed = false;\n\n /** values to select from the pipe template */\n protected values;\n /** TemplateRef for selecting an option */\n protected valueTemplate?: TemplateRef<any> | string;\n /**\n * Optional equality comparator forwarded from the pipe template to the underlying `kbq-select`.\n * Only consumed by the select / multi-select pipe components; when unset they fall back to their\n * own id-based `compareByValue`.\n */\n protected optionCompareWith?: (\n o1: KbqSelectValue | null | undefined,\n o2: KbqSelectValue | null | undefined\n ) => boolean;\n\n /**\n * Whether the current platform is a Mac.\n *\n * @docs-private\n */\n isMac = false;\n\n /** Data for the pipe.\n * @docs-private */\n $implicit: unknown;\n\n /** Whether the current pipe is empty. Used for apply style modifier */\n get isEmpty(): boolean {\n return this.data.value === null || this.data.value === undefined;\n }\n\n /** Whether the current pipe is removable or cleanable. Used for apply style modifier */\n get showRemoveButton(): boolean {\n return this.data.removable || (this.data.cleanable && !this.isEmpty);\n }\n\n /** localized data\n * @docs-private */\n get localeData(): KbqFilterBarConfiguration {\n return this.filterBar?.configuration ?? KBQ_FILTER_BAR_DEFAULT_CONFIGURATION;\n }\n\n constructor() {\n this.$implicit = this;\n\n this.stateChanges.pipe(takeUntilDestroyed()).subscribe(() => {\n this.changeDetectorRef.markForCheck();\n });\n\n this.filterBar?.internalTemplatesChanges.pipe(takeUntilDestroyed()).subscribe(this.updateTemplates);\n\n // Track the focus origin so the trigger's keyboard focus ring can be restored after\n // a value is chosen. `checkChildren` captures focus on the inner trigger button.\n this.focusMonitor\n .monitor(this.elementRef, true)\n .pipe(\n filter((origin) => !!origin),\n takeUntilDestroyed()\n )\n .subscribe((origin) => (this.focusOrigin = origin));\n\n this.destroyRef.onDestroy(() => {\n this.destroyed = true;\n this.focusMonitor.stopMonitoring(this.elementRef);\n });\n\n afterNextRender(() => {\n this.isMac = isMac();\n });\n }\n\n ngAfterViewInit(): void {\n if (this.data.openOnAdd) {\n delete this.data.openOnAdd;\n\n this.open();\n }\n\n this.filterBar?.openPipe.pipe(filter(Boolean), takeUntilDestroyed(this.destroyRef)).subscribe((id) => {\n if (getId(this.data) === id) {\n this.open();\n }\n });\n\n if (this.data.openOnReset) {\n this.filterBar?.onResetFilter.pipe(filter(Boolean), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.open();\n });\n }\n }\n\n /** templateRef checker utility */\n isTemplateRef(value: unknown): boolean {\n return value instanceof TemplateRef;\n }\n\n /** updates values for selection and value template */\n updateTemplates = (templates: KbqPipeTemplate[] | null) => {\n const template = templates?.find((template) => getId(template) === getId(this.data));\n\n if (template?.values) {\n this.values = template.values;\n this.valueTemplate = template.valueTemplate;\n }\n\n // Sync the comparator whenever a matching template is present, independently of `values`, so a\n // template that sets/updates/removes `compareWith` (or omits `values`) is never left with a stale\n // comparator. Absent `compareWith` resets to the pipe's default id-based `compareByValue`.\n if (template) {\n this.optionCompareWith = template.compareWith;\n }\n };\n\n /** removes pipe from filter-bar and triggers changes */\n onRemove() {\n this.filterBar?.removePipe(this.data);\n\n this.stateChanges.next();\n }\n\n /** clears the pipe and triggers changes */\n onClear() {\n this.data.value = null;\n\n this.stateChanges.next();\n\n this.filterBar?.onClearPipe.emit(this.data);\n this.filterBar?.onChangePipe.emit(this.data);\n }\n\n /**\n * Restores focus to the pipe's trigger button after a value is chosen or the panel closes.\n * Focuses via {@link FocusMonitor} with the captured origin so a keyboard-driven interaction\n * keeps its focus ring, while a mouse-driven one does not.\n *\n * @docs-private\n */\n protected restoreTriggerFocus(): void {\n const active = this.document.activeElement;\n\n // The panel may have been closed by moving focus to another interactive element\n // (e.g. an outside click) — stealing focus back would break the user's intent.\n // Focus inside the pipe or inside a not-yet-detached overlay is fine to take over.\n if (\n active &&\n active !== this.document.body &&\n !this.elementRef.nativeElement.contains(active) &&\n !active.closest('.cdk-overlay-container')\n ) {\n return;\n }\n\n const trigger = this.elementRef.nativeElement.querySelector<HTMLElement>(\n 'button:not(.kbq-pipe__remove-button)'\n );\n\n // A pipe opened right after being added from pipe-add never received focus itself,\n // so `focusOrigin` is unknown there — fall back to the detected input modality.\n const origin = this.focusOrigin ?? this.inputModalityDetector.mostRecentModality ?? 'program';\n\n if (trigger) {\n this.focusMonitor.focusVia(trigger, origin);\n }\n }\n\n /** @docs-private */\n abstract open(): void;\n}\n\n@Directive({\n selector: '[kbqPipeMinWidth]',\n host: {\n '[style.min-width]': 'minWidth'\n }\n})\nexport class KbqPipeMinWidth {\n /** KbqFilterBar instance */\n protected readonly filterBar = inject(KBQ_FILTER_BAR_HOST, { optional: true });\n\n /** @docs-private */\n protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n /** @docs-private */\n protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n /** @docs-private */\n protected minWidth: string;\n /** maximal symbols for apply fit-content to min-width */\n maxSymbolsForFitContent: number = 20;\n\n /** current length of text */\n get textLength(): number {\n return this.elementRef.nativeElement.innerText?.length || 0;\n }\n\n constructor() {\n // Recompute the min-width whenever the filter changes. The pipe's text content updates during CD,\n // so defer the read to the next macrotask (mirrors the old `changes.pipe(delay(0))`). Passing the\n // `filterBar.filter` read into the scheduler subscribes the effect, replacing the `changes` bus.\n effect((onCleanup) => onCleanup(this.scheduleMinWidthUpdate(this.filterBar?.filter())));\n\n afterNextRender({ read: this.update });\n }\n\n update = () => {\n this.minWidth = this.textLength < this.maxSymbolsForFitContent ? 'fit-content' : 'unset';\n this.changeDetectorRef.markForCheck();\n };\n\n /** Schedules a deferred min-width recompute and returns the effect-cleanup that cancels it. */\n private scheduleMinWidthUpdate(_filter: unknown): () => void {\n const timerId = setTimeout(this.update);\n\n return () => clearTimeout(timerId);\n }\n}\n","import { Directive, effect, inject, input } from '@angular/core';\nimport { KbqButton, KbqButtonStyles } from '@koobiq/components/button';\nimport { KbqComponentColors } from '@koobiq/components/core';\nimport { KBQ_FILTER_BAR_HOST } from '../filter-bar.types';\nimport { KbqBasePipe } from './base-pipe';\n\n@Directive({\n selector: '[kbqPipeState]'\n})\nexport class KbqPipeState<T> {\n /** @docs-private */\n private readonly button = inject(KbqButton);\n /** @docs-private */\n private readonly pipe = inject(KbqBasePipe);\n /** KbqFilterBar instance\n * @docs-private */\n private readonly filterBar = inject(KBQ_FILTER_BAR_HOST);\n\n /** Pipe state used to calculate/update the button style. */\n readonly state = input<T | null>(null, { alias: 'kbqPipeState' });\n\n constructor() {\n // Re-derive the button style whenever the filter OR the pipe state changes (a pipe's emptiness may\n // change with either). Passing both reads into `updateState` subscribes this effect to both signals;\n // the style itself derives from `pipe.isEmpty`.\n effect(() => this.updateState(this.filterBar.filter(), this.state()));\n }\n\n private updateState = (_filter?: unknown, _state?: unknown) => {\n this.button.kbqStyle = KbqButtonStyles.Outline;\n this.button.color = KbqComponentColors.ContrastFade;\n\n if (!this.pipe.isEmpty) {\n this.button.kbqStyle = KbqButtonStyles.Filled;\n this.button.color = KbqComponentColors.ContrastFade;\n }\n };\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n effect,\n inject,\n input,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { KBQ_FILTER_BAR_HOST } from '../filter-bar.types';\nimport { KbqBasePipe } from './base-pipe';\nimport { KbqPipeState } from './pipe-state';\n\n@Component({\n selector: 'kbq-pipe-button',\n imports: [\n KbqIconModule,\n KbqButtonModule,\n KbqPipeState,\n KbqTooltipTrigger\n ],\n template: `\n <button\n kbqTooltip=\"{{ pipe.data.cleanable ? localeData.clearButtonTooltip : localeData.removeButtonTooltip }}\"\n class=\"kbq-pipe__remove-button\"\n kbq-button\n [attr.aria-label]=\"pipe.data.cleanable ? localeData.clearButtonTooltip : localeData.removeButtonTooltip\"\n [disabled]=\"pipe.data.disabled\"\n [kbqPipeState]=\"pipe.data\"\n [kbqTooltipDisabled]=\"pipe.data.disabled\"\n (click)=\"pipe.data.cleanable ? pipe.onClear() : pipe.onRemove()\"\n >\n <i kbq-icon=\"kbq-xmark-s_16\" aria-hidden=\"true\" [color]=\"pipe.data.disabled ? 'empty' : 'contrast'\"></i>\n </button>\n `,\n styleUrl: 'pipe-button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-pipe-button'\n }\n})\nexport class KbqPipeButton {\n /** KbqPipe instance */\n protected readonly pipe = inject(KbqBasePipe);\n /** KbqFilterBar instance */\n protected readonly filterBar = inject(KBQ_FILTER_BAR_HOST);\n /** @docs-private */\n protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n /** enables/disables read-only state */\n readonly readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** localized data\n * @docs-private */\n get localeData() {\n return this.filterBar?.configuration.pipe;\n }\n\n constructor() {\n this.pipe.stateChanges.pipe(takeUntilDestroyed()).subscribe(() => this.changeDetectorRef.markForCheck());\n\n // Reading the filter signal subscribes this effect; the pipe template renders plain `data`\n // (not signals), so mark it for check whenever the filter changes — replaces the retired `changes` bus.\n effect(() => {\n this.filterBar.filter();\n this.changeDetectorRef.markForCheck();\n });\n }\n}\n","import { AfterViewInit, Directive, inject, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { KbqButton, KbqButtonStyles } from '@koobiq/components/button';\nimport { DateAdapter, DateFormatter, ENTER, KbqComponentColors, PopUpPlacements } from '@koobiq/components/core';\nimport { KbqListSelection } from '@koobiq/components/list';\nimport { KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { KbqDateTimeValue } from '../filter-bar.types';\nimport { KbqBasePipe } from './base-pipe';\n\n/**\n * Shared implementation for the `date` and `datetime` pipes. The two pipes differ only in how a range\n * is formatted and in their default start/end values, exposed here as the {@link formatRange},\n * {@link getDefaultStart} and {@link getDefaultEnd} hooks. Everything else — the period list / custom\n * period flow, calendar handling and form group — is common.\n */\n@Directive()\nexport abstract class KbqPipeDateBaseComponent<D> extends KbqBasePipe<KbqDateTimeValue> implements AfterViewInit {\n // The concrete date type `D` is unconstrained, so the adapter/formatter are used loosely here,\n // matching the behaviour the `date`/`datetime` pipes had before this base class was extracted.\n protected readonly adapter: DateAdapter<any> = inject(DateAdapter);\n protected readonly formatter: DateFormatter<any> = inject(DateFormatter);\n\n /** @docs-private */\n protected readonly placements = PopUpPlacements;\n /** @docs-private */\n protected readonly styles = KbqButtonStyles;\n /** @docs-private */\n protected readonly colors = KbqComponentColors;\n\n /** Whether the current state is list of periods. When false will displayed control for set custom period */\n protected isListMode = true;\n\n /** @docs-private */\n protected formGroup: FormGroup;\n\n /** @docs-private */\n protected showStartCalendar: boolean = false;\n /** @docs-private */\n protected showEndCalendar: boolean = false;\n\n /** @docs-private */\n readonly popover = viewChild.required<KbqPopoverTrigger>('popover');\n /** @docs-private */\n // Optional: the list only exists while the popover is open in list mode, and it is read\n // in deferred callbacks that may fire after the popover has already closed.\n readonly listSelection = viewChild('listSelection', { read: KbqListSelection });\n /** @docs-private */\n readonly returnButton = viewChild.required('returnButton', { read: KbqButton });\n\n /** formatted value for period */\n get formattedValue(): string {\n if (this.start && this.end) {\n return this.formatRange(this.start, this.end);\n }\n\n return this.data.value?.name ?? '';\n }\n\n /** Whether the current pipe is disabled. */\n get disabled(): boolean {\n return (\n !this.adapter.isDateInstance(this.formGroup.controls.start.value) ||\n !this.adapter.isDateInstance(this.formGroup.controls.end.value) ||\n this.formGroup.controls.start.invalid\n );\n }\n\n /** parsed start */\n get start(): D {\n return this.adapter.parse(this.data.value?.start, '');\n }\n\n /** default object for start */\n get defaultStart(): D {\n if (this.data.value?.start) {\n return this.adapter.today().plus(this.data.value?.start);\n }\n\n return this.getDefaultStart();\n }\n\n /** parsed end */\n get end(): D {\n return this.adapter.parse(this.data.value?.end, '');\n }\n\n /** default object for end */\n get defaultEnd(): D {\n if (this.data.value?.start) {\n return this.adapter.today();\n }\n\n return this.getDefaultEnd();\n }\n\n /** Whether the current pipe is empty. */\n override get isEmpty(): boolean {\n if (this.data.value === null) return true;\n\n if (this.data.value?.name) return false;\n\n return !this.adapter.isDateInstance(this.start) || !this.adapter.isDateInstance(this.end);\n }\n\n override ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.popover()\n .visibleChange.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((visible) => {\n if (visible) {\n // Move keyboard focus onto the period list so Enter selects a preset\n // instead of the focus trap landing on the \"custom period\" row.\n if (this.isListMode) {\n setTimeout(() => this.listSelection()?.focus());\n }\n } else {\n this.filterBar?.onClosePipe.emit(this.data);\n }\n });\n }\n\n /** keydown handler\n * @docs-private */\n onKeydown($event: KeyboardEvent) {\n if (($event.ctrlKey || $event.metaKey) && $event.keyCode === ENTER) {\n this.onApplyPeriod();\n }\n\n if ($event.keyCode === ENTER) {\n $event.preventDefault();\n }\n }\n\n onApplyPeriod() {\n this.data.value = {\n start: this.formGroup.controls.start.value.toISO(),\n end: this.formGroup.controls.end.value.toISO()\n };\n this.stateChanges.next();\n\n this.filterBar?.onChangePipe.emit(this.data);\n\n this.popover().hide();\n\n setTimeout(() => this.restoreTriggerFocus());\n }\n\n onSelect(item: KbqDateTimeValue) {\n this.data.value = item;\n this.stateChanges.next();\n\n this.filterBar?.onChangePipe.emit(this.data);\n\n this.popover().hide();\n\n setTimeout(() => this.restoreTriggerFocus());\n }\n\n showPeriod() {\n this.isListMode = false;\n this.showStartCalendar = false;\n this.showEndCalendar = false;\n\n this.initFormGroup();\n\n setTimeout(() => {\n if (this.destroyed) return;\n\n this.popover().updatePosition(true);\n // Focus via FocusMonitor (keyboard origin) so the focus ring is preserved; a native\n // `.focus()` bypasses FocusMonitor and drops the `.cdk-keyboard-focused` ring.\n this.returnButton().focusViaKeyboard();\n });\n }\n\n showList() {\n this.isListMode = true;\n\n setTimeout(() => this.listSelection()?.focus());\n this.popover().updatePosition(true);\n }\n\n /** opens popover */\n override open() {\n this.popover().show();\n }\n\n onSelectStartDate(value: D) {\n this.formGroup.controls.start.setValue(value);\n }\n\n onSelectEndDate(value: D) {\n this.formGroup.controls.end.setValue(value);\n }\n\n onFocusStartInput() {\n this.showStartCalendar = true;\n this.showEndCalendar = false;\n\n this.popover().updatePosition(true);\n }\n\n onFocusEndInput() {\n this.showEndCalendar = true;\n this.showStartCalendar = false;\n }\n\n hideCalendars() {\n this.showStartCalendar = false;\n this.showEndCalendar = false;\n }\n\n /** Formats the selected range for display. */\n protected abstract formatRange(start: D, end: D): string;\n\n /** Default start value used when the pipe has no stored `start`. */\n protected abstract getDefaultStart(): D;\n\n /** Default end value used when the pipe has no stored `start`. */\n protected abstract getDefaultEnd(): D;\n\n private initFormGroup() {\n this.formGroup = new FormGroup({\n start: new FormControl(this.start || this.defaultStart),\n end: new FormControl(this.end || this.defaultEnd)\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqFormattersModule } from '@koobiq/components/core';\nimport { KbqDatepickerModule } from '@koobiq/components/datepicker';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqListModule } from '@koobiq/components/list';\nimport { KbqPopoverModule } from '@koobiq/components/popover';\nimport { KbqTimepickerModule } from '@koobiq/components/timepicker';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqBasePipe } from './base-pipe';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeDateBaseComponent } from './pipe-date-base';\nimport { KbqPipeState } from './pipe-state';\n\n@Component({\n selector: 'kbq-pipe-date',\n imports: [\n ReactiveFormsModule,\n KbqIconModule,\n KbqInputModule,\n KbqDividerModule,\n KbqPopoverModule,\n KbqButtonModule,\n KbqListModule,\n KbqDatepickerModule,\n KbqTimepickerModule,\n KbqPipeState,\n KbqFormattersModule,\n KbqPipeButton,\n KbqTitleModule,\n FormsModule\n ],\n templateUrl: 'pipe-date.html',\n styleUrls: ['base-pipe.scss', 'pipe-date.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeDateComponent<D> extends KbqPipeDateBaseComponent<D> {\n protected formatRange(start: D, end: D): string {\n return this.formatter.rangeShortDate(start, end);\n }\n\n protected getDefaultStart(): D {\n return this.adapter.today();\n }\n\n protected getDefaultEnd(): D {\n return this.adapter.today().plus({ days: 1 });\n }\n}\n","<button\n #popover=\"kbqPopover\"\n kbq-button\n kbqPopover\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [kbq-title]=\"pipeTooltip\"\n [kbqPopoverArrow]=\"false\"\n [kbqPopoverSize]=\"'custom'\"\n [kbqPopoverClass]=\"'kbq-pipe-date__popover'\"\n [kbqPopoverContent]=\"content\"\n [kbqPopoverOffset]=\"4\"\n [defaultPaddings]=\"false\"\n [kbqPopoverPlacement]=\"placements.BottomLeft\"\n [kbqPopoverPlacementPriority]=\"[placements.BottomLeft, placements.TopLeft]\"\n (kbqPopoverVisibleChange)=\"isListMode = true\"\n>\n <span #kbqTitleText class=\"kbq-pipe__name\">{{ data.name }}</span>\n <span #kbqTitleText class=\"kbq-pipe__value\" [class.kbq-pipe__value_empty]=\"!formattedValue\">\n {{ formattedValue }}\n </span>\n</button>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #content>\n @if (isListMode) {\n <div class=\"kbq-date-list\">\n <kbq-list-selection #listSelection [autoSelect]=\"false\" [ngModel]=\"data.value?.name\">\n <kbq-list-option (click)=\"showPeriod()\" (keydown.enter)=\"showPeriod()\">\n {{ localeData.datePipe?.customPeriod }}\n <!-- prevents [kbq-icon] from matching icon slot in kbq-list-option, keeping chevron after label text -->\n <ng-container>\n <i kbq-icon=\"kbq-chevron-right_16\" color=\"contrast-fade\"></i>\n </ng-container>\n </kbq-list-option>\n\n @for (item of values; track item) {\n <kbq-list-option [value]=\"item.name\" (click)=\"onSelect(item)\" (keydown.enter)=\"onSelect(item)\">\n {{ item.name }}\n </kbq-list-option>\n }\n </kbq-list-selection>\n </div>\n } @else {\n <div class=\"kbq-date-period kbq-datepicker__content\" (keydown)=\"onKeydown($event)\">\n <div class=\"kbq-date-period__header\">\n <button\n #returnButton\n kbq-button\n [color]=\"colors.Theme\"\n [kbqStyle]=\"styles.Transparent\"\n (click)=\"showList()\"\n >\n <i kbq-icon=\"kbq-chevron-left_16\"></i>\n {{ localeData.datePipe.backToPeriodSelection }}\n </button>\n </div>\n\n <form class=\"kbq-date-period__content kbq-form-horizontal\" [formGroup]=\"formGroup\">\n <label class=\"kbq-form__label\">{{ localeData.datePipe.customPeriodFrom }}</label>\n\n <kbq-form-field class=\"kbq-date-period__date kbq-form__control\" [class.kbq-focused]=\"showStartCalendar\">\n <input\n formControlName=\"start\"\n [kbqCalendar]=\"startDateCalendar\"\n [max]=\"formGroup.controls.end.value\"\n (focusin)=\"onFocusStartInput()\"\n (keydown.tab)=\"hideCalendars()\"\n />\n <i kbq-icon=\"kbq-calendar-o_16\" kbqSuffix></i>\n </kbq-form-field>\n\n <kbq-calendar\n #startDateCalendar\n [class.kbq-calendar_hidden]=\"!showStartCalendar\"\n (selectedChange)=\"onSelectStartDate($event)\"\n />\n\n <label class=\"kbq-form__label\">{{ localeData.datePipe.customPeriodTo }}</label>\n\n <kbq-form-field class=\"kbq-date-period__date kbq-form__control\" [class.kbq-focused]=\"showEndCalendar\">\n <input\n formControlName=\"end\"\n [kbqCalendar]=\"endDateCalendar\"\n (focusin)=\"onFocusEndInput()\"\n (keydown.tab)=\"hideCalendars()\"\n />\n <i kbq-icon=\"kbq-calendar-o_16\" kbqSuffix></i>\n </kbq-form-field>\n\n @if (formGroup.controls.start.invalid) {\n <kbq-hint class=\"kbq-date-period__hint\" [color]=\"'error'\">\n {{ localeData.datePipe.customPeriodErrorHint }}\n </kbq-hint>\n }\n\n <kbq-calendar\n #endDateCalendar\n [class.kbq-calendar_hidden]=\"!showEndCalendar\"\n (selectedChange)=\"onSelectEndDate($event)\"\n />\n </form>\n\n <div class=\"kbq-date-period__footer\">\n <button\n kbq-button\n [color]=\"'theme'\"\n [disabled]=\"disabled\"\n [kbqStyle]=\"'transparent'\"\n (click)=\"onApplyPeriod()\"\n >\n <span>{{ localeData.pipe.applyButton }}</span>\n &nbsp;\n <span class=\"kbq-button_hot-key\">{{ isMac ? '⌘ ' : 'Ctrl + ' }}Enter</span>\n </button>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ formattedValue }}</div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqFormattersModule } from '@koobiq/components/core';\nimport { KbqDatepickerModule } from '@koobiq/components/datepicker';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqListModule } from '@koobiq/components/list';\nimport { KbqPopoverModule } from '@koobiq/components/popover';\nimport { KbqTimepickerModule } from '@koobiq/components/timepicker';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqBasePipe } from './base-pipe';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeDateBaseComponent } from './pipe-date-base';\nimport { KbqPipeState } from './pipe-state';\n\n@Component({\n selector: 'kbq-pipe-datetime',\n imports: [\n ReactiveFormsModule,\n KbqIconModule,\n KbqInputModule,\n KbqDividerModule,\n KbqPopoverModule,\n KbqButtonModule,\n KbqListModule,\n KbqDatepickerModule,\n KbqTimepickerModule,\n KbqPipeState,\n KbqFormattersModule,\n KbqPipeButton,\n KbqTitleModule,\n FormsModule\n ],\n templateUrl: 'pipe-datetime.html',\n styleUrls: ['base-pipe.scss', 'pipe-date.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeDatetimeComponent<D> extends KbqPipeDateBaseComponent<D> {\n protected formatRange(start: D, end: D): string {\n return this.formatter.rangeShortDateTime(start, end);\n }\n\n protected getDefaultStart(): D {\n return this.adapter.today().startOf('day');\n }\n\n protected getDefaultEnd(): D {\n return this.adapter.today().endOf('day');\n }\n}\n","<button\n #popover=\"kbqPopover\"\n kbq-button\n kbqPopover\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [kbq-title]=\"pipeTooltip\"\n [kbqPopoverArrow]=\"false\"\n [kbqPopoverSize]=\"'custom'\"\n [kbqPopoverClass]=\"'kbq-pipe-date__popover'\"\n [kbqPopoverContent]=\"content\"\n [kbqPopoverOffset]=\"4\"\n [defaultPaddings]=\"false\"\n [kbqPopoverPlacement]=\"placements.BottomLeft\"\n [kbqPopoverPlacementPriority]=\"[placements.BottomLeft, placements.TopLeft]\"\n (kbqPopoverVisibleChange)=\"isListMode = true\"\n>\n <span #kbqTitleText class=\"kbq-pipe__name\">{{ data.name }}</span>\n <span #kbqTitleText class=\"kbq-pipe__value\" [class.kbq-pipe__value_empty]=\"!formattedValue\">\n {{ formattedValue }}\n </span>\n</button>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #content>\n @if (isListMode) {\n <div class=\"kbq-date-list\">\n <kbq-list-selection #listSelection [autoSelect]=\"false\" [ngModel]=\"data.value?.name\">\n <kbq-list-option (click)=\"showPeriod()\" (keydown.enter)=\"showPeriod()\">\n {{ localeData.datePipe?.customPeriod }}\n <!-- prevents [kbq-icon] from matching icon slot in kbq-list-option, keeping chevron after label text -->\n <ng-container>\n <i kbq-icon=\"kbq-chevron-right_16\" color=\"contrast-fade\"></i>\n </ng-container>\n </kbq-list-option>\n\n @for (item of values; track item) {\n <kbq-list-option [value]=\"item.name\" (click)=\"onSelect(item)\" (keydown.enter)=\"onSelect(item)\">\n {{ item.name }}\n </kbq-list-option>\n }\n </kbq-list-selection>\n </div>\n } @else {\n <div class=\"kbq-date-period kbq-datepicker__content\" (keydown)=\"onKeydown($event)\">\n <div class=\"kbq-date-period__header\">\n <button\n #returnButton\n kbq-button\n [color]=\"colors.Theme\"\n [kbqStyle]=\"styles.Transparent\"\n (click)=\"showList()\"\n >\n <i kbq-icon=\"kbq-chevron-left_16\"></i>\n {{ localeData.datePipe.backToPeriodSelection }}\n </button>\n </div>\n\n <form class=\"kbq-date-period__content kbq-form-horizontal\" [formGroup]=\"formGroup\">\n <label class=\"kbq-form__label\">{{ localeData.datePipe.customPeriodFrom }}</label>\n\n <div class=\"kbq-form__row_with-time kbq-form__control\">\n <kbq-form-field class=\"kbq-date-period__date\" [class.kbq-focused]=\"showStartCalendar\">\n <input\n formControlName=\"start\"\n [kbqCalendar]=\"startDateCalendar\"\n [max]=\"formGroup.controls.end.value\"\n (focusin)=\"onFocusStartInput()\"\n (keydown.tab)=\"hideCalendars()\"\n />\n <i kbq-icon=\"kbq-calendar-o_16\" kbqSuffix></i>\n </kbq-form-field>\n\n <kbq-form-field class=\"kbq-date-period__time\">\n <i kbq-icon=\"kbq-clock_16\" kbqPrefix></i>\n <input formControlName=\"start\" kbqTimepicker (focusin)=\"hideCalendars()\" />\n </kbq-form-field>\n </div>\n\n <kbq-calendar\n #startDateCalendar\n [class.kbq-calendar_hidden]=\"!showStartCalendar\"\n (selectedChange)=\"onSelectStartDate($event)\"\n />\n\n <label class=\"kbq-form__label\">{{ localeData.datePipe.customPeriodTo }}</label>\n\n <div class=\"kbq-form__row_with-time kbq-form__control\">\n <kbq-form-field class=\"kbq-date-period__date\" [class.kbq-focused]=\"showEndCalendar\">\n <input\n formControlName=\"end\"\n [kbqCalendar]=\"endDateCalendar\"\n (focusin)=\"onFocusEndInput()\"\n (keydown.tab)=\"hideCalendars()\"\n />\n <i kbq-icon=\"kbq-calendar-o_16\" kbqSuffix></i>\n </kbq-form-field>\n\n <kbq-form-field class=\"kbq-date-period__time\">\n <i kbq-icon=\"kbq-clock_16\" kbqPrefix></i>\n <input formControlName=\"end\" kbqTimepicker (focusin)=\"hideCalendars()\" />\n </kbq-form-field>\n </div>\n\n @if (formGroup.controls.start.invalid) {\n <kbq-hint class=\"kbq-date-period__hint\" [color]=\"'error'\">\n {{ localeData.datePipe.customPeriodErrorHint }}\n </kbq-hint>\n }\n\n <kbq-calendar\n #endDateCalendar\n [class.kbq-calendar_hidden]=\"!showEndCalendar\"\n (selectedChange)=\"onSelectEndDate($event)\"\n />\n </form>\n\n <div class=\"kbq-date-period__footer\">\n <button\n kbq-button\n [color]=\"'theme'\"\n [disabled]=\"disabled\"\n [kbqStyle]=\"'transparent'\"\n (click)=\"onApplyPeriod()\"\n >\n <span>{{ localeData.pipe.applyButton }}</span>\n &nbsp;\n <span class=\"kbq-button_hot-key\">{{ isMac ? '⌘ ' : 'Ctrl + ' }}Enter</span>\n </button>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ formattedValue }}</div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, OnInit, ViewEncapsulation, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { KbqInput, KbqInputModule } from '@koobiq/components/input';\nimport { Subject, timer } from 'rxjs';\nimport { distinctUntilChanged, filter, map, switchMap, takeUntil } from 'rxjs/operators';\nimport { KbqBasePipe } from './base-pipe';\n\n@Component({\n selector: 'kbq-pipe-input',\n // KbqInputModule re-exports KbqFormFieldModule (KbqFormField, KbqCleaner, KbqTrim).\n imports: [KbqInputModule, ReactiveFormsModule],\n template: `\n <kbq-form-field>\n <input\n autocomplete=\"off\"\n kbqInput\n [attr.aria-label]=\"data.name\"\n [formControl]=\"control\"\n [placeholder]=\"data.name\"\n />\n\n <!-- Must stay a single root element: the compiler copies its tag name onto the block's template\n so it still matches <ng-content select=\"kbq-cleaner\">. A sibling node here (element or text)\n silently reroutes the cleaner to the form-field's wildcard slot. -->\n @if (data.cleanable) {\n <kbq-cleaner />\n }\n </kbq-form-field>\n `,\n styleUrls: ['base-pipe.scss', 'pipe-input.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeInputComponent extends KbqBasePipe<string | null> implements OnInit {\n /** @docs-private */\n protected readonly input = viewChild.required(KbqInput);\n\n /**\n * Input control.\n *\n * Must stay nullable: `reset()` — all `KbqFormField.clearValue()` and its Escape handler ever call —\n * resolves to `defaultValue`, which is `null` only while `nonNullable` is unset. `{ nonNullable: true }`\n * would make `reset()` yield `''` and silently break the cleaner bridge below.\n */\n readonly control = new FormControl<string | null>('');\n\n /**\n * Debounce in milliseconds between the last keystroke and the typed value being applied to the filter.\n * Matches `defaultEmitValueTimeout` of `kbq-search-expandable`, so both search fields of a bar feel the\n * same. `Enter` and blur apply immediately and cancel a pending apply.\n */\n debounceTime = 200;\n\n /**\n * Minimum number of characters before typing applies the value to the filter. Anything shorter —\n * including an emptied field — is applied as `null`, so the filter never keeps text the user has\n * already erased. `Enter` and blur ignore the threshold. Set to `0` to apply every keystroke.\n */\n minLength = 1;\n\n /** Cancels a pending debounced apply once the value has been applied (or cleared) through another path. */\n private readonly cancelPendingApply = new Subject<void>();\n\n /** Whether the current pipe is empty. Used for apply style modifier */\n override get isEmpty(): boolean {\n // The base checks null/undefined only, so a consumer-seeded `value: ''` would read as non-empty.\n return !this.data.value;\n }\n\n ngOnInit(): void {\n this.control.setValue(this.data.value ?? '', { emitEvent: false });\n\n if (this.data.disabled) {\n // `emitEvent: false` is load-bearing: `disable()` re-emits valueChanges with the current value —\n // `null` for an empty pipe — which would trip the bridge below and fire a bogus onClearPipe.\n this.control.disable({ emitEvent: false });\n }\n\n // Cleaner and Escape bridge. Both `KbqFormField.clearValue()` and its Escape handler only call\n // `ngControl.reset()`, which nulls the control but never touches `data.value`. `reset()` yields null\n // while the view can only ever push a string, so `=== null` isolates those two paths from typing.\n this.control.valueChanges\n .pipe(\n filter((value) => value === null),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => this.onClear());\n\n // Auto-apply while typing. Seeding above and `disable()` both pass `emitEvent: false`, so a stored\n // value shorter than `minLength` is never wiped just by rendering the pipe.\n this.control.valueChanges\n .pipe(\n // Ahead of the `null` filter on purpose: a `reset()` clears the operator's memory too, so\n // retyping the very same text right after a clear still counts as a change.\n distinctUntilChanged(),\n // Only the view pushes strings; `null` belongs to the clear path handled above.\n filter((value): value is string => value !== null),\n // `switchMap` over a `timer` rather than `debounceTime`: `takeUntil` lets an explicit apply\n // (Enter, blur, clear) drop the pending emission, which would otherwise land afterwards and\n // overwrite the value that was just applied.\n switchMap((value) =>\n timer(this.debounceTime).pipe(\n map(() => value),\n takeUntil(this.cancelPendingApply)\n )\n ),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((value) => this.commit(value.length >= this.minLength ? value : null));\n }\n\n /** clears the pipe and triggers changes */\n override onClear(): void {\n // A debounce scheduled by the keystrokes that preceded the clear would put the discarded text\n // straight back into the filter.\n this.cancelPendingApply.next();\n\n super.onClear();\n\n // `emitEvent: false` prevents re-entering the bridge above. The value accessor's onChange still\n // runs, so the native input clears on this programmatic path too.\n this.control.reset(null, { emitEvent: false });\n }\n\n /** focuses the input */\n override open(): void {\n this.input().focus();\n }\n\n /** Commits a value to `data` and notifies the filter-bar. */\n private commit(next: string | null): void {\n const value = next || null;\n\n // `?? null` rather than a plain `===`: a pipe added from a template has no `value` key at all\n // (pipe-add spreads a KbqPipeTemplate = Omit<KbqPipe, 'value'>), so `data.value` is undefined and\n // `undefined === null` is false — letting an untouched blur emit onChangePipe and mark the filter\n // changed.\n if ((this.data.value ?? null) === value) return;\n\n this.data.value = value;\n\n this.stateChanges.next();\n\n this.filterBar?.onChangePipe.emit(this.data);\n }\n}\n","import { KbqFilterBarHost, KbqPipeData, KbqSelectValue } from '../filter-bar.types';\n\n/** The pieces {@link KbqMultiSelectPipeState} reads from its owning multi-select pipe. */\nexport interface KbqMultiSelectPipeStateHost {\n readonly data: KbqPipeData<KbqSelectValue[]>;\n readonly filterBar: KbqFilterBarHost | null;\n /** Whether every selectable option is currently selected (pipe-specific). */\n allOptionsSelected(): boolean;\n}\n\n/**\n * Shared \"select all = select nothing\" state for the multi-select pipes (`kbq-pipe-multi-select`,\n * `kbq-pipe-multi-tree-select`). Extracted as a plain composition helper — not a base class — because the\n * two pipes have different bases (`KbqBasePipe` vs `KbqTreeSelectPipeBase`) and cannot share a single\n * `@Directive()` base (the diamond), while a mixin would risk breaking AOT view-query inheritance.\n */\nexport class KbqMultiSelectPipeState {\n /** Snapshot of the committed selection, preserved across the \"all selected → []\" collapse. */\n internalSelected: KbqSelectValue[] | null = null;\n\n constructor(private readonly host: KbqMultiSelectPipeStateHost) {}\n\n /** Whether selecting every option is treated as selecting nothing. */\n get selectedAllEqualsSelectedNothing(): boolean {\n return (\n this.host.data.selectedAllEqualsSelectedNothing ??\n this.host.filterBar?.selectedAllEqualsSelectedNothing() ??\n true\n );\n }\n\n /** Value to display: the preserved snapshot under \"all = nothing\", otherwise the raw value. */\n get selected(): KbqSelectValue[] | null {\n return this.selectedAllEqualsSelectedNothing ? this.internalSelected : this.host.data.value;\n }\n\n /** Refreshes the snapshot from the current value (only under \"all = nothing\"). */\n updateInternalSelected(): void {\n if (this.selectedAllEqualsSelectedNothing) {\n this.internalSelected = this.host.data.value?.slice() || [];\n }\n }\n\n /** Emits the change, collapsing the value to `[]` when everything is selected under \"all = nothing\". */\n emitChangePipeEvent(): void {\n if (this.selectedAllEqualsSelectedNothing && this.host.allOptionsSelected()) {\n this.host.filterBar?.onChangePipe.emit({ ...this.host.data, value: [] });\n } else {\n this.host.filterBar?.onChangePipe.emit(this.host.data);\n }\n }\n\n /** Whether the pipe reads as empty, given the base pipe's own emptiness. */\n isEmpty(baseIsEmpty: boolean): boolean {\n return (\n baseIsEmpty ||\n (Array.isArray(this.host.data.value) && !this.host.data.value.length) ||\n (this.selectedAllEqualsSelectedNothing && this.host.allOptionsSelected())\n );\n }\n}\n","import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n OnInit,\n viewChild,\n viewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqBadgeModule } from '@koobiq/components/badge';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqOption, KbqPseudoCheckboxModule, KbqPseudoCheckboxState } from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqSelect, KbqSelectModule } from '@koobiq/components/select';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { merge, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { KbqSelectValue } from '../filter-bar.types';\nimport { KbqBasePipe } from './base-pipe';\nimport { KbqMultiSelectPipeState } from './multi-select-pipe-state';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeState } from './pipe-state';\n\n@Component({\n selector: 'kbq-pipe-multi-select',\n imports: [\n FormsModule,\n KbqButtonModule,\n KbqDividerModule,\n KbqSelectModule,\n KbqPipeState,\n KbqBadgeModule,\n KbqPipeButton,\n KbqTitleModule,\n NgTemplateOutlet,\n KbqIconModule,\n KbqInputModule,\n ReactiveFormsModule,\n AsyncPipe,\n KbqPseudoCheckboxModule\n ],\n templateUrl: 'pipe-multi-select.html',\n styleUrls: ['base-pipe.scss', 'pipe-multiselect.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeMultiSelectComponent extends KbqBasePipe<KbqSelectValue[]> implements AfterViewInit, OnInit {\n /** control for search options */\n readonly searchControl = new FormControl<string | null>(null);\n /** filtered by search options */\n filteredOptions: Observable<KbqSelectValue[]>;\n\n /** @docs-private */\n readonly select = viewChild.required(KbqSelect);\n\n /** @docs-private */\n readonly options = viewChildren(KbqOption);\n\n /** selected value */\n get selected() {\n return this.multiSelect.selected;\n }\n\n /** Whether the current pipe is empty. */\n get isEmpty(): boolean {\n return this.multiSelect.isEmpty(super.isEmpty);\n }\n\n /** state for checkbox 'select all'. */\n get checkboxState(): KbqPseudoCheckboxState {\n if (!this.options()) return 'unchecked';\n\n const select = this.select();\n\n if (!select?.selectionModel) return 'unchecked';\n\n if (select.selectionModel.selected.length === this.values.length) {\n return 'checked';\n } else if (!select.selectionModel.selected.length) {\n return 'unchecked';\n }\n\n return 'indeterminate';\n }\n\n /** true if all visible options selected */\n get allVisibleOptionsSelected(): boolean {\n return this.visibleOptions?.every((option) => option.selected);\n }\n\n /** true if all options selected */\n get allOptionsSelected(): boolean {\n const select = this.select();\n\n if (!select?.selectionModel) return false;\n\n return select.triggerValues.length === this.values?.length;\n }\n\n get selectedAllEqualsSelectedNothing(): boolean {\n return this.multiSelect.selectedAllEqualsSelectedNothing;\n }\n\n private get visibleOptions(): KbqOption[] {\n return this.options()?.filter((option) => option.selectable());\n }\n\n private selectionAllInProgress = false;\n private readonly multiSelect = new KbqMultiSelectPipeState({\n data: this.data,\n filterBar: this.filterBar,\n allOptionsSelected: () => this.allOptionsSelected\n });\n\n /** @docs-private */\n ngOnInit(): void {\n this.multiSelect.updateInternalSelected();\n\n this.filteredOptions = merge(this.filterBar!.internalTemplatesChanges, this.searchControl.valueChanges).pipe(\n map(this.getFilteredOptions),\n takeUntilDestroyed(this.destroyRef)\n );\n }\n\n override ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.select()\n .closedStream.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.filterBar?.onClosePipe.emit(this.data));\n }\n\n /** @docs-private */\n onSelect(item: KbqSelectValue[]) {\n if (this.selectionAllInProgress) return;\n\n if (this.selectedAllEqualsSelectedNothing && this.allOptionsSelected) {\n this.data.value = [];\n } else {\n this.data.value = item;\n }\n\n this.multiSelect.emitChangePipeEvent();\n\n this.stateChanges.next();\n }\n\n /** @docs-private */\n onClear() {\n this.data.value = [];\n\n this.multiSelect.updateInternalSelected();\n\n this.filterBar?.onClearPipe.emit(this.data);\n this.filterBar?.onChangePipe.emit(this.data);\n this.stateChanges.next();\n }\n\n /** @docs-private */\n toggleSelectionAllByEnterKey() {\n if (this.data.selectAll && this.select().keyManager.activeItemIndex === 0) {\n this.toggleSelectionAll();\n }\n }\n\n /** @docs-private */\n toggleSelectionAll(emitEvent: boolean = true) {\n this.selectionAllInProgress = true;\n\n if (this.allVisibleOptionsSelected) {\n this.visibleOptions.forEach((option) => option.deselect());\n } else {\n this.visibleOptions.forEach((option) => option.select());\n }\n\n this.selectionAllInProgress = false;\n\n if (this.selectedAllEqualsSelectedNothing && this.allOptionsSelected) {\n this.data.value = [];\n } else {\n this.data.value = [...this.select().value];\n }\n\n if (emitEvent) {\n this.multiSelect.emitChangePipeEvent();\n }\n\n this.stateChanges.next();\n }\n\n /** Comparator of selected options. Two null/absent values never match (aligned with the select pipe). */\n compareByValue = (o1: Pick<KbqSelectValue, 'id'> | null, o2: Pick<KbqSelectValue, 'id'> | null): boolean =>\n !!o1 && !!o2 && o1.id === o2.id;\n\n /** handler for select all options in select */\n selectAllHandler = (event: KeyboardEvent) => {\n event.preventDefault();\n\n this.toggleSelectionAll();\n };\n\n /** @docs-private */\n onClose() {\n if (this.allOptionsSelected) {\n this.multiSelect.updateInternalSelected();\n }\n\n setTimeout(() => this.restoreTriggerFocus());\n }\n\n /** opens select */\n override open() {\n this.select().open();\n }\n\n private getFilteredOptions = (): KbqSelectValue[] => {\n const search = this.searchControl.value;\n\n return search\n ? this.values.filter((item: KbqSelectValue) => item.name.toLowerCase().includes(search.toLowerCase()))\n : this.values;\n };\n}\n","<kbq-select\n #select=\"kbqSelect\"\n multiple\n [compareWith]=\"optionCompareWith ?? compareByValue\"\n [disabled]=\"data.disabled\"\n [kbq-title]=\"pipeTooltip\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n [panelClass]=\"'kbq-pipe-multiselect__panel'\"\n [selectAllHandler]=\"selectAllHandler\"\n [tabIndex]=\"-1\"\n [value]=\"selected\"\n (closed)=\"onClose()\"\n (selectionChange)=\"onSelect($event.value)\"\n>\n <button\n kbq-button\n kbq-select-matcher\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n >\n <span #kbqTitleText class=\"kbq-pipe__name\">{{ data.name }}</span>\n @if (select.triggerValues.length === 1) {\n <span #kbqTitleText class=\"kbq-pipe__value\" [class.kbq-pipe__value_empty]=\"!select.triggerValue\">\n {{ select.triggerValue }}\n </span>\n } @else if (\n select.triggerValues.length > 1 &&\n (!selectedAllEqualsSelectedNothing || (selectedAllEqualsSelectedNothing && !allOptionsSelected))\n ) {\n <kbq-badge [badgeColor]=\"'contrast'\" [compact]=\"true\">\n {{ select.triggerValues.length }}\n </kbq-badge>\n }\n </button>\n @if (data.search) {\n <kbq-form-field noBorders kbqSelectSearch>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n placeholder=\"{{ localeData.search.placeholder }}\"\n autocomplete=\"off\"\n kbqInput\n type=\"text\"\n [attr.aria-label]=\"localeData.search.placeholder\"\n [formControl]=\"searchControl\"\n (keydown.enter)=\"toggleSelectionAllByEnterKey()\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n }\n\n <div kbq-select-search-empty-result>{{ localeData.pipe.emptySearchResult }}</div>\n\n @if (data.selectAll && !select.isEmptySearchResult) {\n <kbq-option\n [class.kbq-selected]=\"allVisibleOptionsSelected\"\n [selectable]=\"false\"\n (click)=\"toggleSelectionAll()\"\n (keydown.enter)=\"toggleSelectionAll()\"\n >\n <kbq-pseudo-checkbox [state]=\"checkboxState\" />\n {{ localeData.pipe.selectAll }}\n </kbq-option>\n }\n\n @for (item of filteredOptions | async; track item) {\n <kbq-option [value]=\"item\">\n @if (isTemplateRef(valueTemplate)) {\n <ng-container\n [ngTemplateOutlet]=\"$any(valueTemplate)\"\n [ngTemplateOutletContext]=\"{ $implicit, option: item }\"\n />\n } @else {\n {{ item.name }}\n }\n </kbq-option>\n }\n</kbq-select>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ select.triggerValue }}</div>\n</ng-template>\n","import { AfterViewInit, Directive, OnInit, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl } from '@angular/forms';\nimport { FlatTreeControl, KbqTreeFlatDataSource, KbqTreeFlattener } from '@koobiq/components/tree';\nimport { KbqTreeSelect } from '@koobiq/components/tree-select';\nimport { KbqTreeSelectFlatNode, KbqTreeSelectNode } from '../filter-bar.types';\nimport { KbqBasePipe } from './base-pipe';\n\n/**\n * Shared scaffolding for the tree-based select pipes (`kbq-pipe-tree-select`,\n * `kbq-pipe-multi-tree-select`): the flat-tree control / flattener / data source, the node accessors,\n * search-driven filtering and open handling. Subclasses provide the value-specific pieces (`selected`,\n * `isEmpty`, `onSelect`, `updateTemplates`).\n *\n * The `internalTemplatesChanges` subscription is intentionally left in each subclass constructor: it must\n * be set up after the subclass's `updateTemplates` field initializer runs, so the initial `BehaviorSubject`\n * replay dispatches to the subclass override (which writes `dataSource.data`) rather than the base one.\n */\n@Directive()\nexport abstract class KbqTreeSelectPipeBase<V> extends KbqBasePipe<V> implements OnInit, AfterViewInit {\n /** control for search options */\n readonly searchControl = new FormControl<string | null>(null);\n\n treeControl: FlatTreeControl<KbqTreeSelectFlatNode>;\n treeFlattener: KbqTreeFlattener<KbqTreeSelectNode, KbqTreeSelectFlatNode>;\n dataSource: KbqTreeFlatDataSource<KbqTreeSelectNode, KbqTreeSelectFlatNode>;\n\n /** @docs-private */\n readonly select = viewChild.required(KbqTreeSelect);\n\n constructor() {\n super();\n\n this.treeFlattener = new KbqTreeFlattener(this.transformer, this.getLevel, this.isExpandable, this.getChildren);\n\n this.treeControl = new FlatTreeControl<KbqTreeSelectFlatNode>(\n this.getLevel,\n this.isExpandable,\n this.getValue,\n this.getViewValue\n );\n\n this.dataSource = new KbqTreeFlatDataSource(this.treeControl, this.treeFlattener);\n }\n\n ngOnInit(): void {\n this.searchControl.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => this.treeControl.filterNodes(value));\n }\n\n override ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.select()\n .closedStream.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.filterBar?.onClosePipe.emit(this.data));\n }\n\n /** tree-node predicate: whether the node has children */\n hasChild(_: number, nodeData: KbqTreeSelectFlatNode) {\n return nodeData.expandable;\n }\n\n /** opens the tree-select panel */\n override open() {\n setTimeout(() => {\n if (this.destroyed) return;\n\n this.select().open();\n });\n }\n\n /** @docs-private */\n onOpen() {\n this.treeControl.expandAll();\n }\n\n protected transformer = (node: KbqTreeSelectNode, level: number, parent: KbqTreeSelectFlatNode | null) => {\n const flatNode = new KbqTreeSelectFlatNode();\n\n flatNode.name = node.name;\n flatNode.value = node.value;\n flatNode.parent = parent ?? undefined;\n flatNode.level = level;\n flatNode.expandable = !!node.children;\n\n return flatNode;\n };\n\n protected getLevel = (node: KbqTreeSelectFlatNode) => node.level;\n\n protected isExpandable = (node: KbqTreeSelectFlatNode) => node.expandable;\n\n protected getChildren = (node: KbqTreeSelectNode): KbqTreeSelectNode[] | null => node.children;\n\n protected getValue = (node: KbqTreeSelectFlatNode): unknown => node.value;\n\n protected getViewValue = (node: KbqTreeSelectFlatNode): string => node.name;\n}\n","import { ChangeDetectionStrategy, Component, OnInit, viewChild, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqBadgeModule } from '@koobiq/components/badge';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqHighlightModule, KbqPseudoCheckboxModule, KbqPseudoCheckboxState } from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqTreeModule, kbqTreeSelectAllValue, KbqTreeSelection } from '@koobiq/components/tree';\nimport { KbqTreeSelectModule } from '@koobiq/components/tree-select';\nimport { KbqPipeTemplate, KbqSelectValue, KbqTreeSelectFlatNode, KbqTreeSelectNode } from '../filter-bar.types';\nimport { getId, KbqBasePipe, KbqPipeMinWidth } from './base-pipe';\nimport { KbqMultiSelectPipeState } from './multi-select-pipe-state';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeState } from './pipe-state';\nimport { KbqTreeSelectPipeBase } from './tree-select-pipe-base';\n\n@Component({\n selector: 'kbq-pipe-multi-tree-select',\n imports: [\n KbqButtonModule,\n KbqDividerModule,\n KbqPipeState,\n KbqPipeButton,\n KbqTitleModule,\n KbqPipeMinWidth,\n KbqIconModule,\n KbqInputModule,\n ReactiveFormsModule,\n KbqHighlightModule,\n KbqTreeModule,\n KbqTreeSelectModule,\n FormsModule,\n KbqBadgeModule,\n KbqPseudoCheckboxModule\n ],\n templateUrl: 'pipe-multi-tree-select.html',\n styleUrls: ['base-pipe.scss', 'pipe-multi-tree-select.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeMultiTreeSelectComponent extends KbqTreeSelectPipeBase<KbqSelectValue[]> implements OnInit {\n /** @docs-private */\n readonly tree = viewChild.required(KbqTreeSelection);\n\n /** selected value */\n get selected() {\n return this.multiSelect.selected;\n }\n\n /** Whether the current pipe is empty. */\n get isEmpty(): boolean {\n return this.multiSelect.isEmpty(super.isEmpty);\n }\n\n get selectAllCheckboxState(): KbqPseudoCheckboxState {\n const select = this.select();\n\n if (!select) return 'unchecked';\n\n if (this.allOptionsSelected) {\n return 'checked';\n } else if (select.selected?.length > 0) {\n return 'indeterminate';\n }\n\n return 'unchecked';\n }\n\n get numberOfSelectedLeaves(): number {\n return this.select().selected.filter(({ value }) => value !== kbqTreeSelectAllValue).length;\n }\n\n /** true if all options selected */\n get allOptionsSelected(): boolean {\n const dataNodesLength = this.treeControl?.dataNodes?.length;\n const dataNodesForSelect = this.data.selectAll ? dataNodesLength - 1 : dataNodesLength;\n\n return this.select()?.triggerValues?.length === dataNodesForSelect;\n }\n\n get selectedAllEqualsSelectedNothing(): boolean {\n return this.multiSelect.selectedAllEqualsSelectedNothing;\n }\n\n /** true if all visible options selected */\n get allVisibleOptionsSelected(): boolean {\n return this.tree()\n .renderedOptions.filter((option) => option.value !== kbqTreeSelectAllValue)\n .every((option) => option.selected);\n }\n\n private readonly multiSelect = new KbqMultiSelectPipeState({\n data: this.data,\n filterBar: this.filterBar,\n allOptionsSelected: () => this.allOptionsSelected\n });\n\n constructor() {\n super();\n\n // Resolve the select-all node's label on every read instead of the value baked into `name` by\n // `updateTemplates`, which only re-runs on `pipeTemplates` changes and so goes stale on a locale\n // change. The template calls `treeControl.getViewValue(node)` directly, so reading `localeData`\n // here registers this view as a consumer of the filter-bar's `configuration` signal.\n // `FlatTreeControl` captures the accessor by reference in `KbqTreeSelectPipeBase`'s constructor,\n // before this subclass's field initializers run — hence patching the instance, not overriding\n // the inherited `getViewValue` field, which the tree would never see.\n this.treeControl.getViewValue = (node: KbqTreeSelectFlatNode): string => {\n return node.value === kbqTreeSelectAllValue ? this.localeData.pipe.selectAll : node.name;\n };\n\n // See the field-init note in `KbqTreeSelectPipeBase`: subscribing here (after this class's\n // `updateTemplates` initializer) ensures the initial replay writes `dataSource.data`.\n this.filterBar?.internalTemplatesChanges.pipe(takeUntilDestroyed()).subscribe(this.updateTemplates);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n\n this.multiSelect.updateInternalSelected();\n }\n\n isNodeSelectAll(_: number, nodeData: KbqTreeSelectFlatNode) {\n return nodeData.value === kbqTreeSelectAllValue;\n }\n\n onSelect({ value: option }) {\n if (!option) return;\n\n const tree = this.tree();\n\n if (tree.treeControl.isExpandable(option.data)) {\n tree.setStateChildren(option, !option.selected);\n }\n\n this.toggleParents(option.data.parent);\n\n setTimeout(() => {\n if (this.destroyed) return;\n\n if (this.selectedAllEqualsSelectedNothing && this.allOptionsSelected) {\n this.data.value = [];\n } else {\n this.data.value = this.select().selectedValues;\n }\n\n this.multiSelect.emitChangePipeEvent();\n\n this.stateChanges.next();\n });\n }\n\n searchKeydownHandler() {\n if (this.data.selectAll && this.tree().keyManager.activeItemIndex === 0) {\n this.toggleSelectAllNode();\n }\n }\n\n toggleSelectAllNode(emitEvent: boolean = true) {\n if (this.select().search()?.ngControl.value) {\n const renderedOptions = this.tree().renderedOptions.filter(({ value }) => value !== kbqTreeSelectAllValue);\n\n if (this.allVisibleOptionsSelected) {\n renderedOptions.forEach((option) => option.setSelected(false));\n } else {\n renderedOptions.forEach((option) => option.setSelected(true));\n }\n } else {\n if (this.allOptionsSelected) {\n this.tree().selectionModel.clear();\n } else {\n const [, ...dataNodesForSelect] = this.treeControl.dataNodes;\n\n // @todo DS-3827\n this.tree().selectionModel.select(...(dataNodesForSelect as any));\n }\n }\n\n setTimeout(() => {\n if (this.destroyed) return;\n\n if (this.selectedAllEqualsSelectedNothing && this.allOptionsSelected) {\n this.data.value = [];\n } else {\n this.data.value = [...this.select().selectedValues];\n }\n\n if (emitEvent) {\n this.multiSelect.emitChangePipeEvent();\n }\n\n this.stateChanges.next();\n });\n }\n\n /**\n * Populates the tree data source from the pipe template. The shared `values`/`valueTemplate`\n * assignment is already performed by the base subscription, so this override only does the\n * tree-specific work and avoids a redundant double assignment.\n */\n override updateTemplates = (templates: KbqPipeTemplate[] | null) => {\n const template = templates?.find((item) => getId(item) === getId(this.data));\n\n if (template?.values) {\n const values = [...(template.values as KbqTreeSelectNode[])];\n\n if (this.data.selectAll) {\n values.unshift({\n name: this.localeData.pipe.selectAll,\n value: kbqTreeSelectAllValue,\n children: null\n });\n }\n\n this.dataSource.data = values;\n }\n };\n\n override onClear() {\n super.onClear();\n\n this.multiSelect.updateInternalSelected();\n }\n\n /** @docs-private */\n onClose() {\n if (this.allOptionsSelected) {\n this.multiSelect.updateInternalSelected();\n }\n\n setTimeout(() => this.restoreTriggerFocus());\n }\n\n /** handler for select all options in select */\n selectAllHandler = (event: KeyboardEvent) => {\n event.preventDefault();\n\n this.toggleSelectAllNode();\n };\n\n private toggleParents(parent: KbqTreeSelectFlatNode | undefined) {\n if (!parent) {\n return;\n }\n\n const descendants = this.treeControl.getDescendants(parent);\n const isParentSelected = this.select().selectionModel.selected.includes(parent);\n\n if (\n !isParentSelected &&\n descendants.every((d: KbqTreeSelectFlatNode) => this.select().selectionModel.selected.includes(d))\n ) {\n this.select().selectionModel.select(parent);\n this.toggleParents(parent.parent);\n } else if (isParentSelected) {\n this.select().selectionModel.deselect(parent);\n this.toggleParents(parent.parent);\n }\n }\n}\n","<kbq-tree-select\n #select\n [autoSelect]=\"false\"\n [disabled]=\"data.disabled\"\n [kbq-title]=\"pipeTooltip\"\n [multiple]=\"true\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n [ngModel]=\"selected\"\n [panelClass]=\"'kbq-pipe-multi-tree-select__panel'\"\n [selectAllHandler]=\"selectAllHandler\"\n [tabIndex]=\"-1\"\n (closed)=\"onClose()\"\n (opened)=\"onOpen()\"\n (selectionChange)=\"onSelect($event)\"\n>\n @if (data.search) {\n <kbq-form-field noBorders kbqSelectSearch>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n placeholder=\"{{ localeData.search.placeholder }}\"\n autocomplete=\"off\"\n kbqInput\n type=\"text\"\n [attr.aria-label]=\"localeData.search.placeholder\"\n [formControl]=\"searchControl\"\n (keydown.enter)=\"searchKeydownHandler()\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n }\n\n <div kbq-select-search-empty-result>{{ localeData.pipe.emptySearchResult }}</div>\n\n <kbq-cleaner #kbqSelectCleaner />\n\n <button\n kbq-button\n kbq-select-matcher\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n >\n <span #kbqTitleText kbqPipeMinWidth class=\"kbq-pipe__name\">{{ data.name }}</span>\n\n @if (select.selected?.length === 1) {\n <span #kbqTitleText class=\"kbq-pipe__value\" [class.kbq-pipe__value_empty]=\"!select.triggerValue\">\n {{ select.selected[0].name }}\n </span>\n } @else if (\n select.selected?.length > 1 &&\n (!selectedAllEqualsSelectedNothing || (selectedAllEqualsSelectedNothing && !allOptionsSelected))\n ) {\n <kbq-badge [badgeColor]=\"'contrast'\" [compact]=\"true\">\n {{ numberOfSelectedLeaves }}\n </kbq-badge>\n }\n </button>\n\n <kbq-tree-selection [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <kbq-tree-option\n *kbqTreeNodeDef=\"let node; when: isNodeSelectAll\"\n kbqTreeNodePadding\n [class.kbq-selected]=\"allOptionsSelected\"\n [selectable]=\"false\"\n (click)=\"toggleSelectAllNode()\"\n >\n <kbq-pseudo-checkbox [state]=\"selectAllCheckboxState\" />\n <span [innerHTML]=\"treeControl.getViewValue(node) | mcHighlight: treeControl.filterValue.value\"></span>\n </kbq-tree-option>\n\n <kbq-tree-option *kbqTreeNodeDef=\"let node\" kbqTreeNodePadding [checkboxThirdState]=\"true\">\n <span [innerHTML]=\"treeControl.getViewValue(node) | mcHighlight: treeControl.filterValue.value\"></span>\n </kbq-tree-option>\n\n <kbq-tree-option *kbqTreeNodeDef=\"let node; when: hasChild\" kbqTreeNodePadding [checkboxThirdState]=\"true\">\n <kbq-tree-node-toggle [node]=\"node\" />\n <span [innerHTML]=\"treeControl.getViewValue(node) | mcHighlight: treeControl.filterValue.value\"></span>\n </kbq-tree-option>\n </kbq-tree-selection>\n</kbq-tree-select>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ select.triggerValue }}</div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqBasePipe, KbqPipeMinWidth } from './base-pipe';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeState } from './pipe-state';\n\n@Component({\n selector: 'kbq-pipe-readonly',\n imports: [\n KbqButtonModule,\n KbqTitleModule,\n KbqPipeState,\n KbqPipeMinWidth,\n KbqPipeButton\n ],\n template: `\n <button kbq-button [disabled]=\"data.disabled\" [kbqPipeState]=\"data\" [kbq-title]=\"pipeTooltip\">\n <span #kbqTitleText class=\"kbq-pipe__name\" kbqPipeMinWidth>{{ data.name }}</span>\n <span #kbqTitleText class=\"kbq-pipe__value\" kbqPipeMinWidth [class.kbq-pipe__value_empty]=\"!data.value\">\n {{ data.value }}\n </span>\n </button>\n\n @if (showRemoveButton) {\n <kbq-pipe-button />\n }\n\n <ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ data.value }}</div>\n </ng-template>\n `,\n styleUrls: ['base-pipe.scss', 'pipe-readonly.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeReadonlyComponent extends KbqBasePipe<string | null> {\n open(): void {}\n}\n","import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, OnInit, viewChild, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqSelect, KbqSelectModule } from '@koobiq/components/select';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { merge, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { KbqSelectValue } from '../filter-bar.types';\nimport { KbqBasePipe, KbqPipeMinWidth } from './base-pipe';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeState } from './pipe-state';\n\n@Component({\n selector: 'kbq-pipe-select',\n imports: [\n KbqButtonModule,\n KbqDividerModule,\n KbqSelectModule,\n KbqPipeState,\n KbqPipeButton,\n KbqTitleModule,\n KbqPipeMinWidth,\n NgTemplateOutlet,\n KbqIcon,\n KbqInputModule,\n ReactiveFormsModule,\n AsyncPipe\n ],\n templateUrl: 'pipe-select.html',\n styleUrls: ['base-pipe.scss', 'pipe-select.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeSelectComponent extends KbqBasePipe<KbqSelectValue> implements AfterViewInit, OnInit {\n /** control for search options */\n readonly searchControl = new FormControl<string | null>(null);\n /** filtered by search options */\n filteredOptions: Observable<KbqSelectValue[]>;\n\n /** @docs-private */\n readonly select = viewChild.required(KbqSelect);\n\n /** selected value */\n get selected() {\n return this.data.value;\n }\n\n /** Whether the current pipe is empty. */\n get isEmpty(): boolean {\n return !this.data.value;\n }\n\n /** @docs-private */\n ngOnInit(): void {\n // Merge the live template stream (re-emits when `pipeTemplates` changes after init) with the\n // search input, so options render on first open even when templates are supplied late\n // (e.g. a parent assigning `pipeTemplates` in ngAfterViewInit for a viewChild valueTemplate).\n this.filteredOptions = merge(this.filterBar!.internalTemplatesChanges, this.searchControl.valueChanges).pipe(\n map(this.getFilteredOptions),\n takeUntilDestroyed(this.destroyRef)\n );\n }\n\n override ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.select()\n .closedStream.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.filterBar?.onClosePipe.emit(this.data));\n }\n\n onSelect(item: KbqSelectValue) {\n this.data.value = item;\n this.filterBar?.onChangePipe.emit(this.data);\n this.stateChanges.next();\n\n setTimeout(() => this.restoreTriggerFocus());\n }\n\n /** Comparator of selected options */\n compareByValue = (o1: Pick<KbqSelectValue, 'id'> | null, o2: Pick<KbqSelectValue, 'id'> | null): boolean =>\n !!o1 && !!o2 && o1.id === o2.id;\n\n /** opens select */\n override open() {\n this.select().open();\n }\n\n private getFilteredOptions = (): KbqSelectValue[] => {\n const search = this.searchControl.value;\n\n return search\n ? this.values.filter((item: KbqSelectValue) => item.name.toLowerCase().includes(search.toLowerCase()))\n : this.values;\n };\n}\n","<kbq-select\n #select\n [compareWith]=\"optionCompareWith ?? compareByValue\"\n [disabled]=\"data.disabled\"\n [kbq-title]=\"pipeTooltip\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n [panelClass]=\"'kbq-pipe-select__panel'\"\n [tabIndex]=\"-1\"\n [value]=\"selected\"\n (selectionChange)=\"onSelect($event.value)\"\n>\n <button\n kbq-button\n kbq-select-matcher\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n >\n <span #kbqTitleText kbqPipeMinWidth class=\"kbq-pipe__name\">{{ data.name }}</span>\n <span\n #kbqTitleText\n kbqPipeMinWidth\n class=\"kbq-pipe__value\"\n [class.kbq-pipe__value_empty]=\"!select.triggerValue\"\n >\n {{ select.triggerValue }}\n </span>\n </button>\n\n @if (data.search) {\n <kbq-form-field noBorders kbqSelectSearch>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n placeholder=\"{{ localeData.search.placeholder }}\"\n kbqInput\n type=\"text\"\n [attr.aria-label]=\"localeData.search.placeholder\"\n [formControl]=\"searchControl\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n }\n\n <div kbq-select-search-empty-result>{{ localeData.pipe.emptySearchResult }}</div>\n\n @for (item of filteredOptions | async; track item) {\n <kbq-option [value]=\"item\">\n @if (isTemplateRef(valueTemplate)) {\n <ng-container\n [ngTemplateOutlet]=\"$any(valueTemplate)\"\n [ngTemplateOutletContext]=\"{ $implicit, option: item }\"\n />\n } @else {\n {{ item.name }}\n }\n </kbq-option>\n }\n</kbq-select>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ select.triggerValue }}</div>\n</ng-template>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, OnInit, ViewEncapsulation, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { ENTER, PopUpPlacements } from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqPopoverModule, KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { KbqTextareaModule } from '@koobiq/components/textarea';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqBasePipe, KbqPipeMinWidth } from './base-pipe';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeState } from './pipe-state';\n\n@Component({\n selector: 'kbq-pipe-text',\n imports: [\n KbqButtonModule,\n KbqPopoverModule,\n KbqInputModule,\n KbqDividerModule,\n FormsModule,\n KbqTextareaModule,\n KbqPipeButton,\n ReactiveFormsModule,\n KbqTitleModule,\n KbqPipeState,\n KbqPipeMinWidth\n ],\n templateUrl: 'pipe-text.html',\n styleUrls: ['base-pipe.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeTextComponent extends KbqBasePipe<string | null> implements AfterViewInit, OnInit {\n readonly placements = PopUpPlacements;\n\n /** @docs-private */\n readonly popover = viewChild.required(KbqPopoverTrigger);\n\n /** Whether the current pipe is disabled. */\n get disabled(): boolean {\n return !this.control.value;\n }\n\n /** textarea control */\n control = new FormControl<typeof this.data.value>('');\n\n ngOnInit(): void {\n this.control.setValue(this.data.value);\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.popover()\n .visibleChange.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((visible) => {\n this.stateChanges.next();\n\n if (!visible) {\n this.filterBar?.onClosePipe.emit(this.data);\n }\n });\n }\n\n onApply() {\n this.data.value = this.control.value;\n this.stateChanges.next();\n\n this.control.markAsPristine();\n this.popover().hide();\n\n this.filterBar?.onChangePipe.emit(this.data);\n\n setTimeout(() => this.restoreTriggerFocus());\n }\n\n /** @docs-private */\n onKeydown($event: KeyboardEvent) {\n if (!this.disabled && ($event.ctrlKey || $event.metaKey) && $event.keyCode === ENTER) {\n this.onApply();\n }\n }\n\n /** clears the pipe and triggers changes */\n override onClear() {\n super.onClear();\n\n this.control.reset();\n }\n\n /** opens popover */\n override open() {\n this.popover().show();\n }\n}\n","<button\n kbq-button\n kbqPopover\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [kbq-title]=\"pipeTooltip\"\n [kbqPopoverArrow]=\"false\"\n [kbqPopoverSize]=\"'custom'\"\n [kbqPopoverClass]=\"'kbq-pipe__popover'\"\n [kbqPopoverContent]=\"content\"\n [kbqPopoverFooter]=\"footer\"\n [kbqPopoverOffset]=\"4\"\n [defaultPaddings]=\"false\"\n [kbqPopoverPlacement]=\"placements.BottomLeft\"\n [class]=\"{ 'kbq-active': popover()?.isOpen }\"\n>\n <span #kbqTitleText kbqPipeMinWidth class=\"kbq-pipe__name\">{{ data.name }}</span>\n <span #kbqTitleText kbqPipeMinWidth class=\"kbq-pipe__value\" [class.kbq-pipe__value_empty]=\"!data.value\">\n {{ data.value }}\n </span>\n</button>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #content>\n <kbq-form-field (keydown)=\"onKeydown($event)\">\n <textarea kbqTextarea rows=\"1\" [formControl]=\"control\" [freeRowsHeight]=\"0\" [maxRows]=\"5\"></textarea>\n </kbq-form-field>\n</ng-template>\n\n<ng-template #footer>\n <button kbq-button [color]=\"'theme'\" [disabled]=\"disabled\" [kbqStyle]=\"'transparent'\" (click)=\"onApply()\">\n <span>{{ localeData.pipe.applyButton }}</span>\n &nbsp;\n <span class=\"kbq-button_hot-key\">{{ isMac ? '⌘ ' : 'Ctrl + ' }}Enter</span>\n </button>\n</ng-template>\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ data.value }}</div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqHighlightModule } from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqTreeModule, KbqTreeOption } from '@koobiq/components/tree';\nimport { KbqTreeSelectModule } from '@koobiq/components/tree-select';\nimport { KbqPipeTemplate, KbqSelectValue, KbqTreeSelectNode } from '../filter-bar.types';\nimport { getId, KbqBasePipe, KbqPipeMinWidth } from './base-pipe';\nimport { KbqPipeButton } from './pipe-button';\nimport { KbqPipeState } from './pipe-state';\nimport { KbqTreeSelectPipeBase } from './tree-select-pipe-base';\n\n@Component({\n selector: 'kbq-pipe-tree-select',\n imports: [\n KbqButtonModule,\n KbqDividerModule,\n KbqPipeState,\n KbqPipeButton,\n KbqTitleModule,\n KbqPipeMinWidth,\n KbqIconModule,\n KbqInputModule,\n ReactiveFormsModule,\n KbqHighlightModule,\n KbqTreeModule,\n KbqTreeSelectModule,\n FormsModule\n ],\n templateUrl: 'pipe-tree-select.html',\n styleUrls: ['base-pipe.scss', 'pipe-tree-select.scss'],\n providers: [\n {\n provide: KbqBasePipe,\n useExisting: this\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqPipeTreeSelectComponent extends KbqTreeSelectPipeBase<KbqSelectValue> {\n /** selected value */\n get selected() {\n return this.data.value;\n }\n\n /** Whether the current pipe is empty. */\n get isEmpty(): boolean {\n return !this.data.value;\n }\n\n constructor() {\n super();\n\n // See the field-init note in `KbqTreeSelectPipeBase`: subscribing here (after this class's\n // `updateTemplates` initializer) ensures the initial replay writes `dataSource.data`.\n this.filterBar?.internalTemplatesChanges.pipe(takeUntilDestroyed()).subscribe(this.updateTemplates);\n }\n\n onSelect(item: KbqTreeOption) {\n this.data.value = item.value;\n this.filterBar?.onChangePipe.emit(this.data);\n this.select().close();\n setTimeout(() => this.restoreTriggerFocus());\n this.stateChanges.next();\n }\n\n /**\n * Populates the tree data source from the pipe template. The shared `values`/`valueTemplate`\n * assignment is already performed by the base subscription, so this override only does the\n * tree-specific work and avoids a redundant double assignment.\n */\n override updateTemplates = (templates: KbqPipeTemplate[] | null) => {\n const template = templates?.find((item) => getId(item) === getId(this.data));\n\n if (template?.values) {\n this.dataSource.data = template.values as KbqTreeSelectNode[];\n }\n };\n}\n","<kbq-tree-select\n #select\n [autoSelect]=\"false\"\n [disabled]=\"data.disabled\"\n [kbq-title]=\"pipeTooltip\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n [ngModel]=\"selected\"\n [panelClass]=\"'kbq-pipe-tree-select__panel'\"\n [tabIndex]=\"-1\"\n (opened)=\"onOpen()\"\n (selectionChange)=\"onSelect($event.value)\"\n>\n @if (data.search) {\n <kbq-form-field noBorders kbqSelectSearch>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n placeholder=\"{{ localeData.search.placeholder }}\"\n autocomplete=\"off\"\n kbqInput\n type=\"text\"\n [attr.aria-label]=\"localeData.search.placeholder\"\n [formControl]=\"searchControl\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n }\n\n <div kbq-select-search-empty-result>{{ localeData.pipe.emptySearchResult }}</div>\n\n <kbq-cleaner #kbqSelectCleaner />\n\n <button\n kbq-button\n kbq-select-matcher\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n >\n <span #kbqTitleText kbqPipeMinWidth class=\"kbq-pipe__name\">{{ data.name }}</span>\n <span\n #kbqTitleText\n kbqPipeMinWidth\n class=\"kbq-pipe__value\"\n [class.kbq-pipe__value_empty]=\"!select.triggerValue\"\n >\n {{ select.triggerValue }}\n </span>\n </button>\n\n <kbq-tree-selection [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <kbq-tree-option *kbqTreeNodeDef=\"let node\" kbqTreeNodePadding>\n <span [innerHTML]=\"treeControl.getViewValue(node) | mcHighlight: treeControl.filterValue.value\"></span>\n </kbq-tree-option>\n\n <kbq-tree-option *kbqTreeNodeDef=\"let node; when: hasChild\" kbqTreeNodePadding [selectable]=\"false\">\n <kbq-tree-node-toggle [node]=\"node\" />\n <span [innerHTML]=\"treeControl.getViewValue(node) | mcHighlight: treeControl.filterValue.value\"></span>\n </kbq-tree-option>\n </kbq-tree-selection>\n</kbq-tree-select>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ select.triggerValue }}</div>\n</ng-template>\n","import { InjectionToken, ModelSignal, OutputEmitterRef, Provider, Signal, TemplateRef, Type } from '@angular/core';\nimport { ruRULocaleData } from '@koobiq/components/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { KbqFilterBar } from './filter-bar';\nimport type { KbqBasePipe } from './pipes/base-pipe';\nimport { KbqPipeDateComponent } from './pipes/pipe-date';\nimport { KbqPipeDatetimeComponent } from './pipes/pipe-datetime';\nimport { KbqPipeInputComponent } from './pipes/pipe-input';\nimport { KbqPipeMultiSelectComponent } from './pipes/pipe-multi-select';\nimport { KbqPipeMultiTreeSelectComponent } from './pipes/pipe-multi-tree-select';\nimport { KbqPipeReadonlyComponent } from './pipes/pipe-readonly';\nimport { KbqPipeSelectComponent } from './pipes/pipe-select';\nimport { KbqPipeTextComponent } from './pipes/pipe-text';\nimport { KbqPipeTreeSelectComponent } from './pipes/pipe-tree-select';\n\n/**\n * Default localized strings for the filter-bar, used when no `KBQ_LOCALE_SERVICE` (nor an explicit\n * `KBQ_FILTER_BAR_CONFIGURATION`) is provided. These are the Russian (`ru-RU`) strings, matching the\n * library-wide default-locale convention (every `KBQ_*_DEFAULT_CONFIGURATION` resolves to `ruRULocaleData`).\n * Provide `KBQ_LOCALE_SERVICE` at the application root to localize the filter-bar for other locales.\n */\nexport const KBQ_FILTER_BAR_DEFAULT_CONFIGURATION = ruRULocaleData.filterBar;\n\n/** Shape of the localized strings consumed by the filter-bar and its pipes. */\nexport type KbqFilterBarConfiguration = typeof KBQ_FILTER_BAR_DEFAULT_CONFIGURATION;\n\n/** Injection Token for providing configuration of filter-bar */\nexport const KBQ_FILTER_BAR_CONFIGURATION = new InjectionToken<KbqFilterBarConfiguration>('KbqFilterBarConfiguration');\n\n/**\n * Contract a pipe (or filter-bar sub-component) depends on instead of the concrete `KbqFilterBar`.\n * `KbqFilterBar` provides itself as {@link KBQ_FILTER_BAR_HOST}, so a pipe can be unit-tested against a\n * lightweight mock of this seam rather than a full bar. Members mirror the current `KbqFilterBar` surface;\n * they are expected to slim down once the state model moves to signals.\n */\nexport interface KbqFilterBarHost {\n /** Localized strings and configuration for the filter-bar and its pipes. */\n configuration: KbqFilterBarConfiguration;\n\n /** Currently selected filter. A two-way-bindable `model()`: read via `filter()`, write via `filter.set()`. */\n readonly filter: ModelSignal<KbqFilter | null>;\n\n /** Templates used when adding a pipe (also hold the option lists). Read via `pipeTemplates()`. */\n readonly pipeTemplates: Signal<KbqPipeTemplate[]>;\n\n /** Whether selecting all options counts as selecting nothing. */\n readonly selectedAllEqualsSelectedNothing: Signal<boolean>;\n\n /** Whether the current filter is saved. */\n readonly isSaved: Signal<boolean>;\n /** Whether the current filter is changed. */\n readonly isChanged: Signal<boolean>;\n /** Whether the current filter is both saved and changed. */\n readonly isSavedAndChanged: Signal<boolean>;\n /** Whether the current filter is readonly. */\n readonly isReadOnly: Signal<boolean>;\n\n /**\n * Emits whenever a pipe value changes.\n * (The two-way-bound `filter` value is emitted by the `filter` model's `filterChange` output.)\n */\n readonly onChangePipe: OutputEmitterRef<KbqPipe>;\n /** Emits whenever a pipe is cleared. */\n readonly onClearPipe: OutputEmitterRef<KbqPipe>;\n /** Emits whenever a select/multiselect pipe closes. */\n readonly onClosePipe: OutputEmitterRef<KbqPipe>;\n\n /** Internal filter changes. */\n readonly internalFilterChanges: BehaviorSubject<KbqFilter | null>;\n /** Internal pipe-template changes. */\n readonly internalTemplatesChanges: BehaviorSubject<KbqPipeTemplate[] | null>;\n /** Requests opening a pipe after it is added. */\n readonly openPipe: BehaviorSubject<string | number | null>;\n /** Emits when the filter is reset. */\n readonly onResetFilter: BehaviorSubject<boolean>;\n\n /** Removes a pipe from the current filter and emits the change. */\n removePipe(pipe: KbqPipe): void;\n\n /** Clears the current filter's \"changed\" flag. */\n resetFilterChangedState(): void;\n}\n\n/**\n * Injection token exposing the {@link KbqFilterBarHost} seam. `KbqFilterBar` provides itself via\n * `useExisting`, so pipes `inject(KBQ_FILTER_BAR_HOST)` instead of depending on the concrete bar.\n */\nexport const KBQ_FILTER_BAR_HOST = new InjectionToken<KbqFilterBarHost>('KBQ_FILTER_BAR_HOST');\n\n/** Injection Token for providing pipes in filter-bar */\nexport const KBQ_FILTER_BAR_PIPES = new InjectionToken<Map<KbqPipeType, Type<KbqBasePipe<unknown>>>>(\n 'kbq-filter-bar-pipes'\n);\n\n/** Utility provider for `KBQ_FILTER_BAR_PIPES`. */\nexport const kbqFilterBarPipesProvider = (): Provider => {\n return {\n provide: KBQ_FILTER_BAR_PIPES,\n useValue: new Map<KbqPipeType, Type<KbqBasePipe<unknown>>>(defaultFilterBarPipes)\n };\n};\n\n/** list of pipe types available out of the box */\nexport enum KbqPipeTypes {\n ReadOnly = 'readonly',\n Text = 'text',\n /** Renders a bare input: no popover, never opens. Commits while typing (debounced), on Enter and on blur. */\n Input = 'input',\n Select = 'select',\n TreeSelect = 'tree-select',\n MultiSelect = 'multiselect',\n MultiTreeSelect = 'multi-tree-select',\n Date = 'date',\n Datetime = 'datetime'\n}\n\n// `string & {}` keeps the literal union members visible to autocomplete while still allowing custom pipe types.\nexport type KbqPipeType = `${KbqPipeTypes}` | (string & {});\n\n/** list of pipes available out of the box. */\nexport const defaultFilterBarPipes: [KbqPipeType, Type<KbqBasePipe<unknown>>][] = [\n [KbqPipeTypes.ReadOnly, KbqPipeReadonlyComponent],\n [KbqPipeTypes.Text, KbqPipeTextComponent],\n [KbqPipeTypes.Input, KbqPipeInputComponent],\n [KbqPipeTypes.Select, KbqPipeSelectComponent],\n [KbqPipeTypes.TreeSelect, KbqPipeTreeSelectComponent],\n [KbqPipeTypes.MultiSelect, KbqPipeMultiSelectComponent],\n [KbqPipeTypes.MultiTreeSelect, KbqPipeMultiTreeSelectComponent],\n [KbqPipeTypes.Date, KbqPipeDateComponent],\n [KbqPipeTypes.Datetime, KbqPipeDatetimeComponent]\n];\n\nexport interface KbqDateTimeValue {\n name?: string;\n start?: string;\n end?: string;\n}\n\nexport interface KbqSelectValue {\n name: string;\n value: unknown;\n /** Optional stable identifier used by the select/multi-select pipe comparators. */\n id?: string | number;\n}\n\nexport interface KbqFilter {\n name: string;\n\n pipes: KbqPipe[];\n\n readonly: boolean;\n disabled: boolean;\n changed: boolean;\n // this is business logic state (like a flag)\n saved: boolean;\n}\n\nexport interface KbqPipe {\n name: string;\n id?: string | number;\n type: KbqPipeType;\n value: unknown | null;\n\n search?: boolean;\n selectAll?: boolean;\n\n openOnAdd?: boolean;\n openOnReset?: boolean;\n\n /**\n * This is special logic that unselect all items when all selected because \"all selected = nothing selected\".\n * Default is true\n * */\n selectedAllEqualsSelectedNothing?: boolean;\n\n /** @deprecated use cleanable = false and removable = false instead */\n required?: boolean;\n cleanable: boolean;\n removable: boolean;\n disabled: boolean;\n}\n\nexport interface KbqPipeData<V> extends KbqPipe {\n value: V | null;\n}\n\nexport interface KbqPipeTemplate extends Omit<KbqPipe, 'value'> {\n values?: unknown[];\n valueTemplate?: TemplateRef<any> | string;\n /**\n * Custom equality comparator forwarded to the underlying `kbq-select` of the `select` /\n * `multiselect` pipes. When omitted, the pipe's default id-based comparator (`compareByValue`)\n * is used. Ignored by other pipe types.\n */\n compareWith?: (o1: KbqSelectValue | null | undefined, o2: KbqSelectValue | null | undefined) => boolean;\n}\n\nexport interface KbqSaveFilterError {\n text?: string;\n nameAlreadyExists?: boolean;\n}\n\n/** saving statuses for KbqSaveFilterEvent */\nexport enum KbqSaveFilterStatuses {\n OnlyChanges = 'onlyChanges',\n NewName = 'newName',\n NewFilter = 'newFilter'\n}\n\nexport interface KbqSaveFilterEvent {\n filter: KbqFilter;\n filterBar: KbqFilterBar;\n status?: KbqSaveFilterStatuses;\n}\n\n/** Flattened node */\nexport class KbqTreeSelectFlatNode {\n name: string;\n value: unknown;\n level: number;\n expandable: boolean;\n parent?: KbqTreeSelectFlatNode;\n}\n\nexport interface KbqTreeSelectNode {\n children: KbqTreeSelectNode[] | null;\n name: string;\n value: unknown;\n}\n\n/**\n * Build the file structure tree. The `value` is the Json object, or a sub-tree of a Json object.\n * The return value is the list of extends `KbqTreeSelectNode`.\n */\nexport function kbqBuildTree<T extends KbqTreeSelectNode>(value: Record<string, unknown>, level: number): T[] {\n const data: T[] = [];\n\n for (const [k, v] of Object.entries(value)) {\n const isBranch = typeof v === 'object' && v !== null && !(v as Record<string, unknown>)['value'];\n\n data.push({\n name: k.toString(),\n value: v,\n children: isBranch ? kbqBuildTree(v as Record<string, unknown>, level + 1) : null\n } as T);\n }\n\n return data;\n}\n","import { ChangeDetectionStrategy, Component, inject, output } from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KBQ_FILTER_BAR_HOST, KbqFilter } from './filter-bar.types';\n\n@Component({\n selector: 'kbq-filter-reset',\n imports: [KbqButtonModule],\n template: `\n <button kbq-button [color]=\"'theme'\" [kbqStyle]=\"'transparent'\" (click)=\"resetFilter()\">\n <ng-content>{{ localeData }}</ng-content>\n </button>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'kbq-filter-reset'\n }\n})\nexport class KbqFilterReset {\n /** KbqFilterBar host seam */\n private readonly filterBar = inject(KBQ_FILTER_BAR_HOST);\n\n /** Event that is generated whenever the user reset a filter. */\n readonly onResetFilter = output<KbqFilter | null>();\n\n /** localized data\n * @docs-private */\n get localeData() {\n return this.filterBar.configuration.reset.buttonName;\n }\n\n protected resetFilter() {\n this.onResetFilter.emit(this.filterBar.filter()!);\n\n this.filterBar.onResetFilter.next(true);\n }\n}\n","import { Directive, effect, inject } from '@angular/core';\nimport { KbqButton, KbqButtonStyles } from '@koobiq/components/button';\nimport { KbqComponentColors } from '@koobiq/components/core';\nimport { KBQ_FILTER_BAR_HOST } from './filter-bar.types';\nimport { KbqFilters } from './filters';\n\n@Directive({\n selector: '[kbqFilterBarButton]',\n host: {\n '(click)': 'saveFocusedElement()',\n '(keydown)': 'saveFocusedElement()'\n }\n})\nexport class KbqFilterBarButton {\n private readonly button = inject(KbqButton);\n /** KbqFilterBar host seam */\n private readonly filterBar = inject(KBQ_FILTER_BAR_HOST);\n /** KbqFilters instance */\n protected readonly filters = inject(KbqFilters);\n\n constructor() {\n // Reflect the current filter's saved/changed state in the button style. Reading `filterBar.filter`\n // (a signal-backed accessor) subscribes this effect, replacing the retired `changes` bus.\n effect(() => {\n const filter = this.filterBar.filter();\n\n this.button.kbqStyle = KbqButtonStyles.Outline;\n this.button.color = KbqComponentColors.ContrastFade;\n\n if (filter?.changed || filter?.saved) {\n this.button.kbqStyle = 'changed-filter';\n this.button.color = KbqComponentColors.Empty;\n }\n });\n }\n\n /** @docs-private */\n saveFocusedElement() {\n this.filters.saveFocusedElement(this.button);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n input,\n output,\n TemplateRef,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { KbqAlertModule } from '@koobiq/components/alert';\nimport { KbqButton, KbqButtonModule } from '@koobiq/components/button';\nimport { KbqFormsModule } from '@koobiq/components/core';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { merge } from 'rxjs';\nimport { distinctUntilChanged, filter } from 'rxjs/operators';\nimport { KbqFilterBar } from './filter-bar';\nimport { KbqFilter, KbqSaveFilterError, KbqSaveFilterEvent, KbqSaveFilterStatuses } from './filter-bar.types';\n\n/**\n * The \"save / rename filter\" popover, extracted from `KbqFilters` (SRP). Owns the save form state, the\n * name control, validation/error display and the save/rename flow. It declares the popover's header,\n * content and footer templates and pushes them imperatively onto the trigger it is given (via the\n * `popoverTrigger` input), so there is no cross-component template binding on the parent (which would\n * otherwise risk `ExpressionChangedAfterItHasBeenCheckedError`). `KbqFilters` keeps the trigger (on its\n * main button), focus management and the public `filterSavedSuccessfully`/`filterSavedUnsuccessfully` API,\n * delegating to this component.\n *\n * @docs-private\n */\n@Component({\n selector: 'kbq-filter-save-popover',\n imports: [ReactiveFormsModule, KbqButtonModule, KbqFormsModule, KbqInputModule, KbqAlertModule],\n template: `\n <ng-template #header>{{ popoverHeader }}</ng-template>\n\n <ng-template #content>\n @if (showFilterSavingError) {\n <kbq-alert\n class=\"layout-margin-bottom-m\"\n role=\"alert\"\n [alertColor]=\"'error'\"\n [alertStyle]=\"'colored'\"\n [compact]=\"true\"\n >\n {{ filterSavingErrorText }}\n </kbq-alert>\n }\n <div class=\"kbq-form-vertical\">\n <div class=\"kbq-form__row\">\n <label class=\"kbq-form__label\">{{ localeData.name }}</label>\n\n <kbq-form-field class=\"kbq-form__control\">\n <input\n #newFilterName\n kbqInput\n type=\"text\"\n [attr.aria-label]=\"localeData.name\"\n [formControl]=\"filterName\"\n (keydown.enter)=\"saveAsNew($event)\"\n />\n\n @if (filterName.hasError('filterNameAlreadyExist')) {\n <kbq-error>{{ localeData.error }}</kbq-error>\n }\n </kbq-form-field>\n </div>\n </div>\n </ng-template>\n\n <ng-template #footer>\n <button\n #saveFilterButton\n kbq-button\n class=\"layout-margin-right-l\"\n [class.kbq-progress]=\"isSaving\"\n [disabled]=\"isSaving\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'filled'\"\n (click)=\"saveAsNew()\"\n >\n {{ localeData.saveButton }}\n </button>\n <button\n kbq-button\n [color]=\"'contrast-fade'\"\n [kbqStyle]=\"'filled'\"\n [disabled]=\"isSaving\"\n (click)=\"close(true)\"\n >\n {{ localeData.cancelButton }}\n </button>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqFilterSavePopover implements AfterViewInit {\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n /** Popover trigger owned by the parent (`KbqFilters` main button). */\n readonly popoverTrigger = input.required<KbqPopoverTrigger>();\n /** Filter bar, used for the save payload, the current filter and localized strings. */\n readonly filterBar = input.required<KbqFilterBar>();\n\n /** Emits when the user saves/renames a filter. */\n readonly save = output<KbqSaveFilterEvent>();\n /** Emits when the popover closes; the boolean requests focus restoration by the parent. */\n readonly closed = output<boolean>();\n\n /** @docs-private */\n readonly headerTemplate = viewChild.required<TemplateRef<unknown>>('header');\n /** @docs-private */\n readonly contentTemplate = viewChild.required<TemplateRef<unknown>>('content');\n /** @docs-private */\n readonly footerTemplate = viewChild.required<TemplateRef<unknown>>('footer');\n\n private readonly newFilterName = viewChild.required<ElementRef>('newFilterName');\n private readonly saveFilterButton = viewChild.required<KbqButton>('saveFilterButton');\n\n /** new filter name for saving */\n filterName: FormControl<string | null> = new FormControl<string | null>(null);\n\n /** true if saving a new filter, false if saving changes in filter */\n saveNewFilter: boolean = false;\n\n showFilterSavingError: boolean = false;\n\n /** Custom error text passed to `showError()`; `null` when the locale-derived default should be used. */\n private customErrorText: string | null = null;\n\n isSaving: boolean = false;\n\n /** localized data\n * @docs-private */\n get localeData() {\n return this.filterBar().configuration.filters;\n }\n\n /** Filter saving error text (custom or locale-derived).\n * @docs-private */\n get filterSavingErrorText(): string {\n return this.customErrorText ?? this.localeData.errorHint;\n }\n\n /** header of popover. Depends on the mode */\n get popoverHeader(): string {\n return this.saveNewFilter ? this.localeData.saveAsNew : this.localeData.saveChanges;\n }\n\n ngAfterViewInit(): void {\n // Push the templates onto the parent's trigger imperatively (no parent-side binding).\n const trigger = this.popoverTrigger();\n\n trigger.header = this.headerTemplate();\n trigger.content = this.contentTemplate();\n trigger.footer = this.footerTemplate();\n }\n\n openSaveAsNewFilterPopover() {\n this.saveNewFilter = true;\n\n this.preparePopover();\n }\n\n openChangeFilterNamePopover() {\n this.saveNewFilter = false;\n\n this.preparePopover();\n }\n\n saveAsNew(event?: Event) {\n if (this.filterName.invalid) return;\n\n const name = this.filterName.value || '';\n\n // @todo default filter\n // Shallow structural copy (new filter + new pipes array + per-pipe shallow copy), mirroring\n // `KbqFilters.selectFilter`. Avoids `structuredClone` so non-cloneable custom pipe `value`\n // payloads survive a save; every pipe writes `value` by reassignment, never in place.\n const current = this.filterBar().filter();\n const filter: KbqFilter = current\n ? { ...current, pipes: current.pipes.map((pipe) => ({ ...pipe })) }\n : ({ pipes: [] } as unknown as KbqFilter);\n\n filter.name = name;\n filter.saved = true;\n filter.changed = false;\n\n this.isSaving = true;\n this.popoverTrigger().preventClose = true;\n this.filterName.disable();\n\n if (this.saveNewFilter) {\n this.save.emit({ filter, filterBar: this.filterBar(), status: KbqSaveFilterStatuses.NewFilter });\n } else {\n this.save.emit({ filter, filterBar: this.filterBar(), status: KbqSaveFilterStatuses.NewName });\n }\n\n event?.preventDefault();\n }\n\n showError(error?: KbqSaveFilterError) {\n if (error?.nameAlreadyExists) {\n this.filterName.setErrors({ filterNameAlreadyExist: true });\n }\n\n this.showFilterSavingError = true;\n\n this.customErrorText = error?.text ?? null;\n }\n\n close = (restoreFocus: boolean = true) => {\n this.popoverTrigger().hide();\n\n this.closed.emit(restoreFocus);\n\n setTimeout(() => this.changeDetectorRef.detectChanges());\n\n this.showFilterSavingError = false;\n };\n\n /** Hide the popover on a successful save. Focus restoration is handled by the parent. */\n savedSuccessfully() {\n this.isSaving = false;\n this.popoverTrigger().preventClose = false;\n\n this.popoverTrigger().hide();\n\n this.changeDetectorRef.markForCheck();\n }\n\n /** Release the saving state after a failed save (the error itself is shown by the host via `showError`). */\n savedUnsuccessfully() {\n this.isSaving = false;\n this.popoverTrigger().preventClose = false;\n\n this.filterName.enable();\n // Focus via FocusMonitor (keyboard origin) so the focus ring is preserved on the retry path.\n setTimeout(() => this.saveFilterButton().focusViaKeyboard());\n\n this.changeDetectorRef.markForCheck();\n }\n\n private preparePopover() {\n this.filterName = new FormControl<string>(this.filterBar().filter()?.name || '', Validators.required);\n\n const trigger = this.popoverTrigger();\n\n trigger.show();\n\n // Tie to the popover instance (recreated each open) so this per-open control's subscription\n // doesn't accumulate across open/close cycles.\n this.filterName.valueChanges\n .pipe(distinctUntilChanged(), takeUntilDestroyed(trigger.instanceDestroyRef))\n .subscribe(() => (this.showFilterSavingError = false));\n\n merge(...trigger.defaultClosingActions())\n .pipe(\n filter(() => !this.isSaving),\n takeUntilDestroyed(trigger.instanceDestroyRef)\n )\n .subscribe(() => this.close(false));\n\n trigger.visibleChange\n .pipe(\n filter((state) => !state),\n takeUntilDestroyed(trigger.instanceDestroyRef)\n )\n .subscribe(this.close);\n\n setTimeout(() => {\n this.newFilterName().nativeElement.focus();\n this.filterName.setErrors(null);\n });\n }\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n inject,\n input,\n OnInit,\n output,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButton, KbqButtonModule, KbqButtonStyles } from '@koobiq/components/button';\nimport { KbqComponentColors, KbqFormsModule, PopUpPlacements, PopUpSizes } from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqDropdownModule, KbqDropdownTrigger } from '@koobiq/components/dropdown';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqInputModule } from '@koobiq/components/input';\nimport { KbqPopoverModule, KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { merge, Observable, of } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { KbqFilterBar } from './filter-bar';\nimport { KbqFilterBarButton } from './filter-bar-button';\nimport { KbqFilter, KbqSaveFilterError, KbqSaveFilterEvent, KbqSaveFilterStatuses } from './filter-bar.types';\nimport { KbqFilterSavePopover } from './filter-save-popover';\n\n@Component({\n selector: 'kbq-filters',\n imports: [\n ReactiveFormsModule,\n KbqButtonModule,\n KbqDropdownModule,\n KbqDividerModule,\n KbqIcon,\n KbqTitleModule,\n KbqInputModule,\n KbqFilterBarButton,\n AsyncPipe,\n KbqTooltipTrigger,\n KbqPopoverModule,\n FormsModule,\n KbqFormsModule,\n KbqFilterSavePopover\n ],\n templateUrl: 'filters.html',\n styleUrls: ['filters.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-filters'\n },\n exportAs: 'kbqFilters'\n})\nexport class KbqFilters implements OnInit {\n /** @docs-private */\n protected readonly elementRef = inject(ElementRef);\n /** @docs-private */\n protected readonly destroyRef = inject(DestroyRef);\n /** @docs-private */\n protected readonly focusMonitor = inject(FocusMonitor);\n /** @docs-private */\n protected readonly placements = PopUpPlacements;\n /** @docs-private */\n protected readonly styles = KbqButtonStyles;\n /** @docs-private */\n protected readonly colors = KbqComponentColors;\n\n /** KbqFilterBar instance */\n protected readonly filterBar = inject(KbqFilterBar);\n\n /** @docs-private */\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n /** @docs-private */\n protected readonly mainButton = viewChild.required<KbqButton>('mainButton');\n /** @docs-private */\n protected readonly saveNewFilterButton = viewChild.required<KbqButton>('saveNewFilterButton');\n /** @docs-private */\n protected readonly filterActionsButton = viewChild.required<KbqButton>('filterActionsButton');\n\n /** @docs-private */\n protected readonly popover = viewChild.required(KbqPopoverTrigger);\n /** @docs-private */\n protected readonly dropdown = viewChild.required(KbqDropdownTrigger);\n /** @docs-private */\n protected readonly filterActionsDropdown = viewChild<KbqDropdownTrigger>('filterActionsButton');\n\n /** @docs-private */\n protected readonly savePopover = viewChild.required(KbqFilterSavePopover);\n\n private readonly search = viewChild.required<ElementRef>('search');\n\n /** control for search filter */\n readonly searchControl = new FormControl<string | null>(null);\n /** filtered by search filters */\n filteredOptions: Observable<KbqFilter[]>;\n\n /** @docs-private */\n protected readonly popoverSize = PopUpSizes.Medium;\n /** @docs-private */\n protected readonly popoverOffset: number = 4;\n\n readonly filters = input.required<KbqFilter[]>();\n\n /** Event that is generated whenever the user selects a filter. */\n readonly onSelectFilter = output<KbqFilter>();\n /**\n * Event that is generated whenever the user save a filter.\n *\n * The emitted `filter` shares its pipe objects with the live filter by design (so the rendered pipes keep\n * their identity across a save instead of being destroyed and recreated). Consumers that persist\n * `event.filter` as an immutable record should snapshot it first (e.g. via `KbqFilterBar.saveFilterState`\n * or a structural copy) — otherwise later in-place pipe edits will mutate the stored reference.\n */\n readonly onSave = output<KbqSaveFilterEvent>();\n /** Event that is generated whenever the user change a filter. */\n readonly onChangeFilter = output<KbqSaveFilterEvent>();\n /** Event that is generated whenever the user remove a filter. */\n readonly onRemoveFilter = output<KbqFilter>();\n /** Event that is generated whenever the user reset a filter changes. */\n readonly onResetFilterChanges = output<KbqFilter | null>();\n\n /** Component state. true if opened dropdown or popup */\n get opened(): boolean {\n return !!(this.popover()?.isOpen || this.dropdown()?.opened);\n }\n\n /** Component state. true if opened dropdown or popup of filterActions */\n get filterActionsOpened(): boolean {\n return !!(this.popover()?.isOpen || this.filterActionsDropdown()?.opened);\n }\n\n /** Selected filter. Kept as a plain getter facade over the bar's `filter` model. */\n get filter(): KbqFilter | null {\n return this.filterBar.filter();\n }\n\n /** Component state. True if 'filters' input contains no elements. */\n get isEmpty(): boolean {\n return this.filters().length === 0;\n }\n\n /** localized data\n * @docs-private */\n get localeData() {\n return this.filterBar.configuration.filters;\n }\n\n /** Current focus origin state.\n * @docs-private */\n get focusOrigin(): FocusOrigin {\n return this._focusOrigin;\n }\n\n private _focusOrigin: FocusOrigin = null;\n\n private focusedElementBeforeOpen: KbqButton | null;\n\n ngOnInit(): void {\n this.filteredOptions = merge(\n of(this.filters()),\n this.searchControl.valueChanges.pipe(map((value) => this.getFilteredOptions(value)))\n );\n\n this.focusMonitor\n .monitor(this.elementRef, true)\n .pipe(\n filter((origin) => !!origin),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((origin) => (this._focusOrigin = origin));\n }\n\n /** @docs-private */\n focusedElementBeforeIs(button: KbqButton): boolean {\n return this.focusedElementBeforeOpen === button;\n }\n\n selectFilter(filter: KbqFilter) {\n // Isolate the active filter from the saved source with a shallow structural copy (new filter object\n // + new pipes array + per-pipe shallow copy) instead of a deep `structuredClone`. Every pipe writes\n // its `value` by reassignment (never in-place mutation), so this fully isolates subsequent edits\n // while preserving any non-cloneable payload inside `value`. `structuredClone` (P2-20) is reserved\n // for the explicit save/restore boundary (`KbqFilterBar.saveFilterState`/`restoreFilterState`).\n this.filterBar.internalFilterChanges.next({ ...filter, pipes: filter.pipes.map((pipe) => ({ ...pipe })) });\n\n this.onSelectFilter.emit(filter);\n }\n\n saveChanges() {\n const current = this.filterBar.filter();\n\n if (!current) return;\n\n // Immutable update (new reference) so the `filter` signal reacts; `internalFilterChanges` sets the\n // signal and emits `filterChange`.\n const updated = { ...current, saved: true, changed: false };\n\n this.filterBar.internalFilterChanges.next(updated);\n\n this.onSave.emit({\n filter: updated,\n filterBar: this.filterBar,\n status: KbqSaveFilterStatuses.OnlyChanges\n });\n }\n\n restoreFocus() {\n // The popover can be opened from the dropdown item or programmatically, paths that never\n // capture a trigger via `saveFocusedElement`. Fall back to the main button so focus returns\n // to the filters control instead of being dropped on `<body>` (WCAG 2.4.3).\n const target = this.focusedElementBeforeOpen ?? this.mainButton();\n\n if (target && !target.disabled) {\n this.focusMonitor.focusVia(target.elementRef, this.focusOrigin);\n }\n\n this.focusedElementBeforeOpen = null;\n }\n\n /** @docs-private */\n saveFocusedElement(button?: KbqButton) {\n this.focusedElementBeforeOpen = button || null;\n }\n\n /** Restore focus when the save popover reports it closed. @docs-private */\n onSavePopoverClosed(restoreFocus: boolean) {\n if (restoreFocus) this.restoreFocus();\n\n this.changeDetectorRef.markForCheck();\n }\n\n /** @docs-private */\n stopEventPropagation(event: Event) {\n event.stopPropagation();\n }\n\n /** @docs-private */\n searchKeydownHandler(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.closePopover();\n } else {\n this.stopEventPropagation(event);\n }\n }\n\n /** @docs-private */\n onDropdownOpen() {\n this.searchControl.setValue(null);\n setTimeout(() => this.search().nativeElement.focus());\n }\n\n resetFilterChanges() {\n this.filterBar.resetFilterChangedState();\n\n this.onResetFilterChanges.emit(this.filter!);\n }\n\n removeFilter() {\n this.onRemoveFilter.emit(this.filter!);\n\n setTimeout(() => this.focusMonitor.focusVia(this.mainButton().elementRef, this.focusOrigin), 0);\n }\n\n /** Hide the popup and restore focus.\n * Use this method in the onSave or onChangeFilter events after the data has been successfully saved. */\n filterSavedSuccessfully() {\n this.savePopover().savedSuccessfully();\n\n setTimeout(() => this.restoreFocus(), 0);\n\n this.changeDetectorRef.markForCheck();\n }\n\n /** Shows an error. Use this method in the onSave or onChangeFilter events if saving data failed. */\n filterSavedUnsuccessfully(error?: KbqSaveFilterError) {\n // Re-enable the name control FIRST: `enable()` re-runs the control's validators and would wipe a\n // custom `filterNameAlreadyExist` error set beforehand, so apply the error AFTER re-enabling —\n // otherwise the inline \"name already exists\" message never renders.\n this.savePopover().savedUnsuccessfully();\n\n this.showError(error);\n\n this.changeDetectorRef.markForCheck();\n }\n\n // Delegating facade to the extracted `KbqFilterSavePopover`: the save-popover state, templates and\n // logic live in that child; these members keep `KbqFilters`' public surface for callers and the template.\n\n /** @docs-private */\n get filterName(): FormControl<string | null> {\n return this.savePopover().filterName;\n }\n\n /** @docs-private */\n get saveNewFilter(): boolean {\n return this.savePopover().saveNewFilter;\n }\n\n /** @docs-private */\n set saveNewFilter(value: boolean) {\n this.savePopover().saveNewFilter = value;\n }\n\n /** @docs-private */\n get isSaving(): boolean {\n return this.savePopover().isSaving;\n }\n\n /** @docs-private */\n set isSaving(value: boolean) {\n this.savePopover().isSaving = value;\n }\n\n /** @docs-private */\n get showFilterSavingError(): boolean {\n return this.savePopover().showFilterSavingError;\n }\n\n /** @docs-private */\n set showFilterSavingError(value: boolean) {\n this.savePopover().showFilterSavingError = value;\n }\n\n /** @docs-private */\n get filterSavingErrorText(): string {\n return this.savePopover().filterSavingErrorText;\n }\n\n /** header of popover. Depends on the mode\n * @docs-private */\n get popoverHeader(): string {\n return this.savePopover().popoverHeader;\n }\n\n /** @docs-private */\n openSaveAsNewFilterPopover() {\n this.savePopover().openSaveAsNewFilterPopover();\n }\n\n /** @docs-private */\n openChangeFilterNamePopover() {\n this.savePopover().openChangeFilterNamePopover();\n }\n\n /** @docs-private */\n saveAsNew(event?: Event) {\n this.savePopover().saveAsNew(event);\n }\n\n /** @docs-private */\n showError(error?: KbqSaveFilterError) {\n this.savePopover().showError(error);\n }\n\n /** @docs-private */\n closePopover(restoreFocus: boolean = true) {\n this.savePopover().close(restoreFocus);\n }\n\n private getFilteredOptions(value: string | null): KbqFilter[] {\n return value\n ? this.filters().filter((filter) => filter.name.toLowerCase().includes(value.toLowerCase()))\n : this.filters();\n }\n}\n","<button\n #mainButton\n #popoverRef=\"kbqPopover\"\n kbq-button\n kbq-title\n kbqFilterBarButton\n kbqPopover\n [kbqDropdownTriggerFor]=\"savedFilters\"\n [kbqPopoverArrow]=\"false\"\n [kbqPopoverOffset]=\"popoverOffset\"\n [kbqPopoverClass]=\"'kbq-filters__save-as-new-filter-popover'\"\n [kbqPopoverPlacement]=\"placements.BottomLeft\"\n [kbqPopoverPlacementPriority]=\"[placements.BottomLeft, placements.TopLeft]\"\n [kbqPopoverSize]=\"popoverSize\"\n [kbqTrigger]=\"'manual'\"\n [disabled]=\"savePopover.isSaving\"\n [class.kbq-active]=\"focusedElementBeforeIs(mainButton) && opened\"\n (dropdownClosed)=\"searchControl.setValue('')\"\n (dropdownOpened)=\"onDropdownOpen()\"\n>\n <span #kbqTitleText class=\"kbq-filters__filter-name\">\n @if (filter?.name) {\n {{ filter!.name }}\n } @else {\n <ng-content>\n <i kbq-icon=\"kbq-list_16\"></i>\n {{ localeData.defaultName }}\n </ng-content>\n }\n </span>\n</button>\n\n@if (filterBar.isChanged() && !filterBar.isSaved()) {\n <button\n #saveNewFilterButton\n kbqTooltip=\"{{ localeData.saveNewFilterTooltip }}\"\n kbq-button\n kbqFilterBarButton\n class=\"kbq-button_action\"\n [attr.aria-label]=\"localeData.saveNewFilterTooltip\"\n [class.kbq-active]=\"focusedElementBeforeIs(saveNewFilterButton) && opened\"\n [color]=\"colors.Empty\"\n [disabled]=\"savePopover.isSaving\"\n (click)=\"savePopover.openSaveAsNewFilterPopover()\"\n >\n <i kbq-icon=\"kbq-floppy-disk_16\" aria-hidden=\"true\"></i>\n </button>\n}\n\n@if (filterBar.isSaved()) {\n <button\n #filterActionsButton\n kbq-button\n kbqFilterBarButton\n class=\"kbq-button_action\"\n [attr.aria-label]=\"localeData.actionsTooltip\"\n [color]=\"colors.Empty\"\n [kbqDropdownTriggerFor]=\"filterActions\"\n [disabled]=\"savePopover.isSaving\"\n [class.kbq-active]=\"focusedElementBeforeIs(filterActionsButton) && filterActionsOpened\"\n [class]=\"{ 'kbq-button_changed-saved-filter': filterBar.isSavedAndChanged() }\"\n >\n <i kbq-icon=\"kbq-ellipsis-vertical_16\" aria-hidden=\"true\"></i>\n </button>\n\n <i kbq-icon=\"kbq-chevron-right-s_16\" class=\"kbq-filter-bar__arrow\" [color]=\"'theme'\"></i>\n} @else {\n <kbq-divider class=\"kbq-filter-bar__separator\" [vertical]=\"true\" />\n}\n\n<kbq-dropdown #savedFilters=\"kbqDropdown\" [class]=\"'kbq-filters__dropdown'\">\n <div [style.display]=\"isEmpty ? 'none' : 'initial'\">\n <kbq-form-field noBorders>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n\n <input\n #search\n placeholder=\"{{ localeData.searchPlaceholder }}\"\n autocomplete=\"off\"\n kbqInput\n [attr.aria-label]=\"localeData.searchPlaceholder\"\n [formControl]=\"searchControl\"\n (click)=\"stopEventPropagation($event)\"\n (keydown)=\"searchKeydownHandler($event)\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n\n <kbq-divider />\n\n @for (filter of filteredOptions | async; track filter) {\n <button\n kbq-dropdown-item\n kbq-title\n [class.kbq-selected]=\"filterBar.filter()?.name === filter.name\"\n (click)=\"selectFilter(filter)\"\n >\n {{ filter.name }}\n </button>\n } @empty {\n <button kbq-dropdown-item [disabled]=\"true\">\n {{ localeData.searchEmptyResult }}\n </button>\n }\n\n <kbq-divider />\n </div>\n\n <button kbq-dropdown-item (click)=\"savePopover.openSaveAsNewFilterPopover()\">\n <i kbq-icon=\"kbq-plus_16\"></i>\n {{ localeData.saveAsNewFilter }}\n </button>\n</kbq-dropdown>\n\n<kbq-dropdown #filterActions=\"kbqDropdown\" [class]=\"'kbq-filters__dropdown'\">\n @if (filterBar.isSavedAndChanged() && !filterBar.isReadOnly()) {\n <button\n kbq-dropdown-item\n [class]=\"{ 'kbq-button_changed-saved-filter': filterBar.isSavedAndChanged() }\"\n (click)=\"saveChanges()\"\n >\n <i kbq-icon=\"kbq-floppy-disk_16\"></i>\n {{ localeData.saveChanges }}\n @if (filterBar.isSavedAndChanged()) {\n <i class=\"kbq kbq-icon kbq-icon-button kbq-warning layout-margin-left-xs kbq-circle-xs_16\"></i>\n }\n </button>\n }\n <button kbq-dropdown-item (click)=\"savePopover.openSaveAsNewFilterPopover()\">\n <i kbq-icon=\"kbq-plus_16\"></i>\n {{ localeData.saveAsNew }}\n </button>\n\n @if (!filterBar.isReadOnly()) {\n <button kbq-dropdown-item (click)=\"savePopover.openChangeFilterNamePopover()\">\n <i kbq-icon=\"kbq-pencil_16\"></i>\n {{ localeData.change }}\n </button>\n }\n\n @if (filterBar.isSavedAndChanged() || !filterBar.isReadOnly()) {\n <kbq-divider />\n }\n\n @if (filterBar.isSavedAndChanged()) {\n <button kbq-dropdown-item (click)=\"resetFilterChanges()\">\n <i kbq-icon=\"kbq-circle-xmark_16\"></i>\n {{ localeData.resetChanges }}\n </button>\n }\n @if (!filterBar.isReadOnly()) {\n <button kbq-dropdown-item (click)=\"removeFilter()\">\n <i kbq-icon=\"kbq-trash_16\"></i>\n {{ localeData.remove }}\n </button>\n }\n</kbq-dropdown>\n\n<kbq-filter-save-popover\n #savePopover\n [popoverTrigger]=\"popoverRef\"\n [filterBar]=\"filterBar\"\n (save)=\"onSave.emit($event)\"\n (closed)=\"onSavePopoverClosed($event)\"\n/>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n contentChild,\n effect,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n ViewEncapsulation\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KBQ_LOCALE_SERVICE } from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n KBQ_FILTER_BAR_CONFIGURATION,\n KBQ_FILTER_BAR_DEFAULT_CONFIGURATION,\n KBQ_FILTER_BAR_HOST,\n KbqFilter,\n KbqFilterBarConfiguration,\n KbqFilterBarHost,\n KbqPipe,\n KbqPipeTemplate\n} from './filter-bar.types';\nimport { KbqFilterReset } from './filter-reset';\nimport { KbqFilters } from './filters';\n\n@Component({\n selector: 'kbq-filter-bar, [kbq-filter-bar]',\n imports: [KbqDividerModule],\n template: `\n <div class=\"kbq-filter-bar__left\">\n <ng-content select=\"kbq-filters\" />\n\n <ng-content />\n\n <ng-content select=\"kbq-pipe-add\" />\n\n <ng-content select=\"kbq-filter-reset\" />\n </div>\n\n <div class=\"kbq-filter-bar__right\">\n <ng-content select=\"kbq-search-expandable\" />\n\n <ng-content select=\"kbq-filter-refresher, [kbq-filter-refresher]\" />\n </div>\n `,\n styleUrls: ['filter-bar-tokens.scss', 'filter-bar.scss'],\n providers: [{ provide: KBQ_FILTER_BAR_HOST, useExisting: forwardRef(() => KbqFilterBar) }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-filter-bar'\n }\n})\nexport class KbqFilterBar implements KbqFilterBarHost {\n /** @docs-private */\n protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n /** @docs-private */\n protected readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n\n readonly externalConfiguration = inject(KBQ_FILTER_BAR_CONFIGURATION, { optional: true });\n\n /** Localized strings and configuration for the filter-bar and its pipes. */\n get configuration(): KbqFilterBarConfiguration {\n return this._configuration();\n }\n\n set configuration(value: KbqFilterBarConfiguration) {\n this._configuration.set(value);\n }\n\n private readonly _configuration = signal(KBQ_FILTER_BAR_DEFAULT_CONFIGURATION);\n\n /** @docs-private */\n readonly filters = contentChild(KbqFilters);\n /** @docs-private */\n readonly filterReset = contentChild(KbqFilterReset);\n\n /**\n * This is special logic that unselect all items when all selected because \"all selected = nothing selected\".\n * Default is true\n * */\n readonly selectedAllEqualsSelectedNothing = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /**\n * Filter that is currently selected. A two-way-bindable `model()`: derived state (`isSaved`/`isChanged`/…)\n * is exposed via `computed()` off it and change detection is driven by signal reactivity. `model()`\n * auto-provides the `filterChange` output for `[(filter)]` two-way binding.\n */\n readonly filter = model<KbqFilter | null>(null);\n\n /** An array of templates that are used when adding a pipe. Also contains lists of options to select (values). */\n readonly pipeTemplates = input<KbqPipeTemplate[]>([]);\n\n /** Event that emits whenever the value of the pipe changes. */\n readonly onChangePipe = output<KbqPipe>();\n /** Event that emits whenever the pipe deleted. */\n readonly onRemovePipe = output<KbqPipe>();\n /** Event that emits whenever the pipe cleared. */\n readonly onClearPipe = output<KbqPipe>();\n /** Event that emits whenever the select or multiselect pipe closed. */\n readonly onClosePipe = output<KbqPipe>();\n\n /** Whether the current filter is saved */\n readonly isSaved = computed(() => !!this.filter()?.saved);\n\n /** Whether the current filter is changed */\n readonly isChanged = computed(() => !!this.filter()?.changed);\n\n /** Whether the current filter is saved and changed */\n readonly isSavedAndChanged = computed(() => this.isSaved() && this.isChanged());\n\n /** Whether the current filter is readonly */\n readonly isReadOnly = computed(() => !!this.filter()?.readonly);\n\n /** Whether the current filter is disabled */\n readonly isDisabled = computed(() => !!this.filter()?.disabled);\n\n private savedFilter: KbqFilter | null = null;\n\n /**\n * All changes.\n * @deprecated noop. Reactivity is driven by the `filter` signal now; this never emits and will be\n * removed in the next major.\n */\n readonly changes = new BehaviorSubject<void>(undefined);\n\n /** Event that emits whenever the filter is reset. */\n readonly onResetFilter = new BehaviorSubject<boolean>(false);\n /** internal filter changes */\n readonly internalFilterChanges = new BehaviorSubject<KbqFilter | null>(null);\n /** internal changes in templates */\n readonly internalTemplatesChanges = new BehaviorSubject<KbqPipeTemplate[] | null>(null);\n /** this subject need for opens pipe after adding\n * @docs-private */\n readonly openPipe = new BehaviorSubject<string | number | null>(null);\n\n constructor() {\n // Push template changes into the internal stream — replaces the retired `pipeTemplates` accessor\n // setter side effect now that `pipeTemplates` is a signal `input()`.\n effect(() => this.internalTemplatesChanges.next(this.pipeTemplates()));\n\n this.internalFilterChanges.pipe(takeUntilDestroyed()).subscribe((filter) => {\n // `model.set(...)` auto-emits `filterChange` for the two-way binding.\n this.filter.set(filter);\n });\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n\n if (!this.localeService) {\n this.initDefaultParams();\n }\n\n // A pipe value change marks the current filter as \"changed\". Produce a new filter reference (not an\n // in-place mutation) so the `filter` model — and every `computed()`/`effect()` reading it — reacts.\n // `removePipe` owns its own `changed` flag in a single `set` (one `filterChange` emission), so only\n // `onChangePipe` feeds this subscriber. `model.set(...)` auto-emits `filterChange` for the binding.\n outputToObservable(this.onChangePipe)\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n const current = this.filter();\n\n if (current) {\n this.filter.set({ ...current, changed: true });\n }\n });\n }\n\n /** Remove pipe from current filter and emit event */\n removePipe(pipe: KbqPipe) {\n const current = this.filter();\n\n if (!current?.pipes.includes(pipe)) return;\n\n // Replace the filter (and its `pipes` array) with new references instead of mutating in place, so the\n // `filter` signal reacts; unknown pipes are left untouched. Fold in `changed: true` here — the removal\n // IS the change — so it happens in a single `set` (one `filterChange` emission) rather than relying on\n // `onRemovePipe` to trigger a second update.\n this.filter.set({ ...current, changed: true, pipes: current.pipes.filter((item) => item !== pipe) });\n\n this.onRemovePipe.emit(pipe);\n }\n\n /**\n * Save current state of filter.\n *\n * Deep-clones the filter via `structuredClone`, so any pipe `value` payload handed to save/restore must be\n * structured-cloneable (plain data — no functions, DOM nodes, class instances or `TemplateRef`s), otherwise\n * `structuredClone` throws `DataCloneError`. All built-in pipes produce cloneable values.\n */\n saveFilterState(filter?: KbqFilter) {\n this.savedFilter = structuredClone(filter ?? this.filter());\n }\n\n /**\n * Restore previously saved filter state.\n *\n * @see `saveFilterState` — pipe `value` payloads must be structured-cloneable.\n */\n restoreFilterState(filter?: KbqFilter) {\n const state = filter ?? this.savedFilter;\n\n // Nothing to restore — bail out instead of wiping the current filter with `structuredClone(null)`.\n if (!state) return;\n\n this.filter.set(structuredClone(state));\n }\n\n /** Set the filter state \"changed\" to false */\n resetFilterChangedState() {\n const current = this.filter();\n\n if (!current) return;\n\n this.filter.set({ ...current, changed: false });\n }\n\n private updateLocaleParams = () => {\n this.configuration = this.externalConfiguration || this.localeService?.getParams('filterBar');\n\n this.changeDetectorRef.markForCheck();\n };\n\n private initDefaultParams() {\n this.configuration = KBQ_FILTER_BAR_DEFAULT_CONFIGURATION;\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KBQ_FILTER_BAR_DEFAULT_CONFIGURATION, KBQ_FILTER_BAR_HOST } from './filter-bar.types';\n\n@Component({\n selector: 'kbq-filter-refresher, [kbq-filter-refresher]',\n imports: [\n KbqButtonModule,\n KbqIconModule\n ],\n template: `\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [attr.aria-label]=\"localeData.refresher.refresh\"\n >\n <i kbq-icon=\"kbq-arrow-rotate-right_16\" aria-hidden=\"true\"></i>\n </button>\n <button\n kbq-button\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n [attr.aria-label]=\"localeData.refresher.settings\"\n >\n <i kbq-icon=\"kbq-chevron-down_16\" aria-hidden=\"true\"></i>\n </button>\n `,\n styleUrls: ['filter-refresher.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-filter-refresher'\n }\n})\nexport class KbqFilterRefresher {\n /** KbqFilterBar host seam */\n private readonly filterBar = inject(KBQ_FILTER_BAR_HOST, { optional: true });\n\n /** localized data\n * @docs-private */\n protected get localeData() {\n return this.filterBar?.configuration ?? KBQ_FILTER_BAR_DEFAULT_CONFIGURATION;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqOption, KbqOptionModule } from '@koobiq/components/core';\nimport { KbqDropdownModule } from '@koobiq/components/dropdown';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqSelect, KbqSelectModule } from '@koobiq/components/select';\nimport { KbqToolTipModule } from '@koobiq/components/tooltip';\nimport { KBQ_FILTER_BAR_HOST, KbqFilter, KbqPipe, KbqPipeTemplate } from './filter-bar.types';\nimport { getId } from './pipes/base-pipe';\n\n@Component({\n selector: 'kbq-pipe-add',\n imports: [\n KbqDropdownModule,\n KbqToolTipModule,\n KbqButtonModule,\n KbqIcon,\n KbqOptionModule,\n KbqSelectModule\n ],\n template: `\n <kbq-select #select [tabIndex]=\"-1\" [multiple]=\"true\" [value]=\"addedPipes()\" [compareWith]=\"compareWith\">\n <button\n kbqTooltip=\"{{ filterBar.configuration.add.tooltip }}\"\n kbq-button\n kbq-select-matcher\n [attr.aria-label]=\"filterBar.configuration.add.tooltip\"\n [color]=\"'contrast-fade'\"\n [kbqStyle]=\"'outline'\"\n [class]=\"{ 'kbq-active': select.panelOpen }\"\n >\n <i kbq-icon=\"kbq-plus_16\" aria-hidden=\"true\"></i>\n </button>\n\n @for (template of filterBar.pipeTemplates(); track template) {\n <kbq-option\n #option\n [userSelect]=\"true\"\n [value]=\"template\"\n [showCheckbox]=\"false\"\n (click)=\"addPipeFromTemplate(option)\"\n (keydown.enter)=\"addPipeFromTemplate(option)\"\n (keydown.space)=\"addPipeFromTemplate(option)\"\n >\n {{ template.name }}\n </kbq-option>\n }\n </kbq-select>\n\n <!-- Announces a newly-added pipe to assistive tech (WCAG 4.1.3). -->\n <div class=\"cdk-visually-hidden\" aria-live=\"polite\" aria-atomic=\"true\">{{ announcement() }}</div>\n `,\n styleUrl: 'pipe-add.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-pipe-add'\n }\n})\nexport class KbqPipeAdd {\n /** KbqFilterBar instance */\n protected readonly filterBar = inject(KBQ_FILTER_BAR_HOST);\n\n /** @docs-private */\n readonly select = viewChild.required(KbqSelect);\n\n /** Event that is generated after add pipe. */\n readonly onAddPipe = output<KbqPipeTemplate>();\n\n /** template of filter */\n readonly filterTemplate = input<KbqFilter>({\n name: '',\n pipes: [],\n readonly: false,\n disabled: false,\n changed: false,\n saved: false\n });\n\n /**\n * Ids of the pipes already added to the current filter. Used to open an already-added pipe.\n * Derived from the `filter` signal so it stays in sync without the retired `changes` bus.\n */\n readonly addedPipes = computed(() => this.filterBar.filter()?.pipes.map((pipe: KbqPipe) => getId(pipe)) ?? []);\n\n /**\n * Visually-hidden live-region text announcing a newly-added pipe to assistive tech (WCAG 4.1.3).\n * @docs-private\n */\n protected readonly announcement = signal('');\n\n addPipeFromTemplate(option: KbqOption) {\n if (option.selected) {\n this.filterBar.openPipe.next(getId(option.value));\n } else {\n option.select();\n\n const current = this.filterBar.filter() ?? structuredClone(this.filterTemplate());\n\n // Build a new filter reference (immutable add) so the `filter` model reacts; keep `pipes` on a\n // new-reference-on-change model instead of an in-place push. `model.set(...)` auto-emits\n // `filterChange` for the two-way binding.\n this.filterBar.filter.set({\n ...current,\n changed: true,\n pipes: [\n ...current.pipes,\n Object.assign({}, option.value, { values: undefined, valueTemplate: undefined, openOnAdd: true })\n ]\n });\n\n this.onAddPipe.emit(option.value);\n\n const message = this.filterBar.configuration.add.addedAnnouncement.replace('{{ name }}', option.value.name);\n\n // Empty then re-fill on the next tick so an identical consecutive message still changes the\n // live-region text node and is re-announced (a same-string `set` would be an `Object.is` no-op\n // that assistive tech never picks up).\n this.announcement.set('');\n setTimeout(() => this.announcement.set(message));\n }\n\n this.select().close();\n }\n\n /**\n * Function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n */\n compareWith(o1: KbqPipe, o2: string): boolean {\n return getId(o1) === o2;\n }\n}\n","import { AfterContentInit, Directive, inject, Injector, input, ViewContainerRef } from '@angular/core';\nimport { KBQ_FILTER_BAR_PIPES, KbqPipe } from './filter-bar.types';\nimport { KBQ_PIPE_DATA } from './pipes/base-pipe';\n\n@Directive({\n selector: '[kbqPipe]'\n})\nexport class KbqPipeDirective<T extends KbqPipe> implements AfterContentInit {\n private injector = inject(Injector);\n private pipes = inject(KBQ_FILTER_BAR_PIPES);\n private viewContainerRef = inject(ViewContainerRef);\n\n readonly pipe = input<T>(undefined!, { alias: 'kbqPipe' });\n\n ngAfterContentInit(): void {\n const component = this.pipes.get(this.pipe().type);\n\n if (!component) {\n throw new Error(`Can't find component for this type: ${this.pipe().type}`);\n }\n\n this.viewContainerRef.createComponent(component, { injector: this.getInjector(this.pipe()) });\n }\n\n private getInjector(pipe: T): Injector {\n return Injector.create({\n providers: [{ provide: KBQ_PIPE_DATA, useValue: pipe }],\n parent: this.injector\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqFilterBar } from './filter-bar';\nimport { KbqFilterBarButton } from './filter-bar-button';\nimport { kbqFilterBarPipesProvider } from './filter-bar.types';\nimport { KbqFilterRefresher } from './filter-refresher';\nimport { KbqFilterReset } from './filter-reset';\nimport { KbqFilters } from './filters';\nimport { KbqPipeAdd } from './pipe-add';\nimport { KbqPipeDirective } from './pipe.directive';\nimport { KbqPipeButton } from './pipes/pipe-button';\nimport { KbqPipeState } from './pipes/pipe-state';\n\nconst COMPONENTS = [\n KbqFilterBar,\n KbqFilters,\n KbqFilterRefresher,\n KbqFilterBarButton,\n KbqFilterReset,\n KbqPipeAdd,\n KbqPipeDirective,\n KbqPipeButton,\n KbqPipeState\n];\n\n@NgModule({\n imports: COMPONENTS,\n providers: [kbqFilterBarPipesProvider()],\n exports: COMPONENTS\n})\nexport class KbqFilterBarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","i5","i6","i9","this","i10","i7","i8"],"mappings":"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"}