@koobiq/components 20.1.0 → 20.3.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.
- package/accordion/_accordion-theme.scss +6 -2
- package/accordion/accordion-tokens.scss +3 -0
- package/accordion/{accordion-trigger.component.scss → accordion-trigger.scss} +10 -0
- package/accordion/accordion.scss +71 -0
- package/accordion/index.d.ts +264 -121
- package/actions-panel/index.d.ts +25 -13
- package/alert/_alert-theme.scss +14 -0
- package/alert/alert.component.scss +24 -13
- package/alert/index.d.ts +63 -29
- package/app-switcher/app-switcher-dropdown-app.scss +7 -5
- package/app-switcher/app-switcher-dropdown-site.scss +6 -4
- package/app-switcher/index.d.ts +41 -4
- package/app-switcher/kbq-app-switcher-list-item.scss +6 -8
- package/autocomplete/autocomplete.scss +2 -1
- package/autocomplete/index.d.ts +58 -37
- package/badge/index.d.ts +2 -3
- package/breadcrumbs/index.d.ts +1 -1
- package/button/index.d.ts +2 -2
- package/button-toggle/button-toggle-tokens.scss +2 -0
- package/button-toggle/button-toggle.scss +9 -0
- package/button-toggle/index.d.ts +5 -0
- package/checkbox/index.d.ts +33 -29
- package/clamped-text/index.d.ts +3 -2
- package/code-block/index.d.ts +24 -19
- package/content-panel/index.d.ts +1 -1
- package/core/index.d.ts +1217 -186
- package/core/option/_action-container-mixins.scss +28 -0
- package/core/option/_option-theme.scss +24 -0
- package/core/option/action.scss +7 -0
- package/core/styles/_core.scss +2 -0
- package/core/styles/_koobiq-theme.scss +2 -0
- package/core/styles/_tokens.scss +1 -0
- package/core/styles/common/_animation.scss +31 -24
- package/core/styles/common/_connected-overlay.scss +39 -0
- package/core/styles/common/_select.scss +19 -2
- package/core/styles/common/_tokens.scss +0 -9
- package/core/styles/theming/_index.scss +0 -1
- package/core/styles/theming/_theming.scss +34 -5
- package/datepicker/index.d.ts +46 -15
- package/dl/dl.scss +26 -0
- package/dl/index.d.ts +8 -1
- package/dropdown/_dropdown-theme.scss +28 -2
- package/dropdown/dropdown-item.scss +29 -0
- package/dropdown/dropdown-tokens.scss +2 -1
- package/dropdown/dropdown.scss +16 -1
- package/dropdown/index.d.ts +331 -17
- package/dynamic-translation/index.d.ts +1 -1
- package/fesm2022/koobiq-components-accordion.mjs +480 -317
- package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
- package/fesm2022/koobiq-components-actions-panel.mjs +57 -46
- package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-alert.mjs +98 -58
- package/fesm2022/koobiq-components-alert.mjs.map +1 -1
- package/fesm2022/koobiq-components-app-switcher.mjs +233 -38
- package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
- package/fesm2022/koobiq-components-autocomplete.mjs +89 -52
- package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
- package/fesm2022/koobiq-components-badge.mjs +18 -17
- package/fesm2022/koobiq-components-badge.mjs.map +1 -1
- package/fesm2022/koobiq-components-breadcrumbs.mjs +25 -25
- package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/koobiq-components-button-toggle.mjs +17 -12
- package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-button.mjs +25 -25
- package/fesm2022/koobiq-components-checkbox.mjs +69 -92
- package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
- package/fesm2022/koobiq-components-clamped-text.mjs +18 -13
- package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
- package/fesm2022/koobiq-components-code-block.mjs +56 -69
- package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
- package/fesm2022/koobiq-components-content-panel.mjs +29 -29
- package/fesm2022/koobiq-components-core.mjs +2485 -735
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs +168 -126
- package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-divider.mjs +7 -7
- package/fesm2022/koobiq-components-dl.mjs +23 -15
- package/fesm2022/koobiq-components-dl.mjs.map +1 -1
- package/fesm2022/koobiq-components-dropdown.mjs +814 -136
- package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
- package/fesm2022/koobiq-components-ellipsis-center.mjs +7 -7
- package/fesm2022/koobiq-components-empty-state.mjs +19 -19
- package/fesm2022/koobiq-components-file-upload.mjs +74 -42
- package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +783 -199
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-flag.mjs +7 -7
- package/fesm2022/koobiq-components-form-field.mjs +350 -162
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-icon.mjs +52 -25
- package/fesm2022/koobiq-components-icon.mjs.map +1 -1
- package/fesm2022/koobiq-components-inline-edit.mjs +175 -28
- package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
- package/fesm2022/koobiq-components-input.mjs +41 -24
- package/fesm2022/koobiq-components-input.mjs.map +1 -1
- package/fesm2022/koobiq-components-link.mjs +8 -8
- package/fesm2022/koobiq-components-list.mjs +657 -143
- package/fesm2022/koobiq-components-list.mjs.map +1 -1
- package/fesm2022/koobiq-components-loader-overlay.mjs +16 -16
- package/fesm2022/koobiq-components-markdown.mjs +14 -11
- package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-modal.mjs +59 -35
- package/fesm2022/koobiq-components-modal.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar.mjs +177 -67
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-notification-center.mjs +40 -24
- package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-overflow-items.mjs +16 -17
- package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
- package/fesm2022/koobiq-components-popover.mjs +31 -21
- package/fesm2022/koobiq-components-popover.mjs.map +1 -1
- package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
- package/fesm2022/koobiq-components-progress-spinner.mjs +13 -13
- package/fesm2022/koobiq-components-radio.mjs +10 -10
- package/fesm2022/koobiq-components-resizer.mjs +33 -14
- package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
- package/fesm2022/koobiq-components-scrollbar.mjs +10 -10
- package/fesm2022/koobiq-components-search-expandable.mjs +49 -14
- package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +450 -146
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidebar.mjs +14 -14
- package/fesm2022/koobiq-components-sidepanel.mjs +26 -26
- package/fesm2022/koobiq-components-skeleton.mjs +10 -10
- package/fesm2022/koobiq-components-split-button.mjs +10 -17
- package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
- package/fesm2022/koobiq-components-splitter.mjs +17 -17
- package/fesm2022/koobiq-components-table.mjs +15 -13
- package/fesm2022/koobiq-components-table.mjs.map +1 -1
- package/fesm2022/koobiq-components-tabs.mjs +80 -68
- package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
- package/fesm2022/koobiq-components-tags.mjs +283 -122
- package/fesm2022/koobiq-components-tags.mjs.map +1 -1
- package/fesm2022/koobiq-components-textarea.mjs +13 -8
- package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
- package/fesm2022/koobiq-components-time-range.mjs +29 -24
- package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
- package/fesm2022/koobiq-components-timepicker.mjs +61 -30
- package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-timezone.mjs +77 -42
- package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
- package/fesm2022/koobiq-components-title.mjs +7 -7
- package/fesm2022/koobiq-components-toast.mjs +51 -26
- package/fesm2022/koobiq-components-toast.mjs.map +1 -1
- package/fesm2022/koobiq-components-toggle.mjs +72 -64
- package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-tooltip.mjs +219 -28
- package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
- package/fesm2022/koobiq-components-top-bar.mjs +13 -13
- package/fesm2022/koobiq-components-tree-select.mjs +222 -80
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree.mjs +302 -81
- package/fesm2022/koobiq-components-tree.mjs.map +1 -1
- package/fesm2022/koobiq-components-username.mjs +27 -27
- package/file-upload/index.d.ts +25 -6
- package/file-upload/multiple-file-upload.component.scss +14 -0
- package/filter-bar/_filter-bar-theme.scss +0 -10
- package/filter-bar/filter-bar-tokens.scss +3 -0
- package/filter-bar/filters.scss +3 -2
- package/filter-bar/index.d.ts +281 -9
- package/filter-bar/pipes/base-pipe.scss +0 -11
- package/filter-bar/pipes/pipe-input.scss +10 -0
- package/filter-bar/pipes/pipe-multi-tree-select.scss +0 -6
- package/filter-bar/pipes/pipe-multiselect.scss +0 -6
- package/filter-bar/pipes/pipe-tree-select.scss +0 -6
- package/form-field/_form-field-theme.scss +76 -20
- package/form-field/fieldset.scss +10 -0
- package/form-field/form-field-tokens.scss +15 -1
- package/form-field/form-field.scss +15 -19
- package/form-field/index.d.ts +147 -65
- package/icon/icon-button.scss +3 -1
- package/icon/index.d.ts +45 -7
- package/inline-edit/index.d.ts +57 -4
- package/inline-edit/inline-edit.scss +10 -0
- package/input/index.d.ts +17 -2
- package/list/_list-theme.scss +42 -10
- package/list/index.d.ts +326 -79
- package/list/list-tokens.scss +43 -8
- package/list/list.scss +186 -12
- package/markdown/index.d.ts +1 -1
- package/modal/index.d.ts +21 -4
- package/modal/modal-tokens.scss +1 -1
- package/navbar/_navbar-item_vertical.scss +7 -5
- package/navbar/index.d.ts +54 -5
- package/navbar/navbar-brand.scss +23 -7
- package/navbar/vertical-navbar.scss +6 -0
- package/notification-center/index.d.ts +2 -1
- package/notification-center/notification-item.scss +6 -0
- package/package.json +3 -6
- package/popover/index.d.ts +2 -2
- package/prebuilt-themes/dark-theme.css +1 -1
- package/prebuilt-themes/light-theme.css +1 -1
- package/prebuilt-themes/theme.css +1 -1
- package/resizer/index.d.ts +12 -0
- package/schematics/collection.json +10 -0
- package/schematics/migrations/alert-signals/README.md +64 -0
- package/schematics/migrations/alert-signals/data.js +70 -0
- package/schematics/migrations/alert-signals/index.js +350 -0
- package/schematics/migrations/alert-signals/schema.json +20 -0
- package/schematics/migrations/autocomplete-panel-width-auto/README.md +68 -0
- package/schematics/migrations/autocomplete-panel-width-auto/index.js +70 -0
- package/schematics/migrations/autocomplete-panel-width-auto/schema.json +15 -0
- package/schematics/migrations/deprecated-icons/README.md +29 -4
- package/schematics/migrations/deprecated-icons/data.js +7 -0
- package/schematics/migrations/deprecated-icons/index.js +62 -35
- package/schematics/migrations/filter-bar-signals/README.md +1 -1
- package/schematics/migrations/new-icons-pack/README.md +37 -2
- package/schematics/migrations/new-icons-pack/data.js +8 -0
- package/schematics/migrations/new-icons-pack/index.js +144 -53
- package/schematics/migrations.json +11 -1
- package/schematics/ng-add/index.js +3 -3
- package/schematics/utils/angular-parsing.js +41 -14
- package/schematics/utils/ast.js +31 -0
- package/schematics/utils/icon-migration.js +530 -0
- package/schematics/utils/typescript.js +44 -0
- package/scrollbar/index.d.ts +1 -1
- package/search-expandable/index.d.ts +3 -0
- package/select/index.d.ts +212 -40
- package/select/select-tokens.scss +0 -1
- package/select/select.scss +0 -2
- package/splitter/index.d.ts +1 -1
- package/table/_table-theme.scss +4 -0
- package/table/index.d.ts +2 -1
- package/table/table.scss +8 -0
- package/tabs/_tabs-common.scss +60 -31
- package/tabs/_tabs-theme.scss +12 -0
- package/tabs/index.d.ts +2 -2
- package/tabs/tab-header.scss +14 -0
- package/tabs/tab-nav-bar.scss +4 -0
- package/tabs/tabs-tokens.scss +1 -0
- package/tags/index.d.ts +128 -29
- package/textarea/index.d.ts +5 -0
- package/time-range/index.d.ts +1 -1
- package/timepicker/index.d.ts +4 -0
- package/timezone/index.d.ts +10 -8
- package/toast/index.d.ts +26 -3
- package/toggle/index.d.ts +34 -14
- package/tooltip/index.d.ts +119 -7
- package/tree/_tree-theme.scss +25 -5
- package/tree/index.d.ts +71 -3
- package/tree/tree-option.scss +2 -8
- package/tree-select/_tree-select-theme.scss +22 -0
- package/tree-select/index.d.ts +127 -36
- package/accordion/accordion.component.scss +0 -50
- package/core/styles/_tokens.kbq.import.scss +0 -4
- package/core/styles/theming/_components-theming.scss +0 -1927
- package/filter-bar/pipes/pipe-select.scss +0 -5
- package/overflow-items/overflow-items.scss +0 -20
|
@@ -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 \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 \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 \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, KbqPanelMaxHeight } 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 /**\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 * Values forwarded from the pipe template whose selection the user cannot remove. Only consumed by\n * the multi-select pipe components; other pipe types ignore it.\n */\n protected lockedValues?: unknown[];\n /**\n * Maximum height of the dropdown panel's scrollable list, forwarded from the pipe template to the\n * underlying `kbq-select` / `kbq-tree-select`. Only consumed by the select-family pipe components;\n * `undefined` leaves the list at the select-family default of 256px.\n */\n protected panelMaxHeight?: KbqPanelMaxHeight;\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 this.destroyRef.onDestroy(() => {\n this.destroyed = true;\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 // `lockedValues` and `panelMaxHeight` are synced on the same terms, and for the same reason.\n if (template) {\n this.optionCompareWith = template.compareWith;\n this.lockedValues = template.lockedValues;\n this.panelMaxHeight = template.panelMaxHeight;\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 = this.clearedValue();\n\n this.stateChanges.next();\n\n this.filterBar?.onClearPipe.emit(this.data);\n this.filterBar?.onChangePipe.emit(this.data);\n }\n\n /**\n * Value a cleared pipe is left with. Overridden by pipes that keep part of their value across a clear\n * — the multi-select pipes hold on to their locked options.\n *\n * @docs-private\n */\n protected clearedValue(): V | null {\n return null;\n }\n\n /**\n * Focus origin to hand to {@link FocusMonitor} whenever this pipe moves focus programmatically, so the\n * `.cdk-keyboard-focused` ring is painted for keyboard navigation only and never for a mouse-driven one.\n *\n * `InputModalityDetector.mostRecentModality` reflects what the user is doing *right now*, and is the\n * only source that stays correct while a panel is open: panel content lives in the CDK overlay\n * container, which is not a DOM descendant of the pipe host, so a focus origin captured on the host\n * itself would freeze at \"how the trigger was focused\" and couldn't tell a click inside the panel apart\n * from the keypress that opened it. The detector reacts only to `keydown`/`mousedown`/`touchstart`\n * (never to hover or scroll), so merely moving the mouse cannot strip a keyboard user's ring, and it\n * maps a screen reader's synthetic mousedown to `keyboard`. It falls back to `'program'` only before any\n * such interaction has ever occurred on the page — at which point no ring should be shown anyway.\n *\n * @docs-private\n */\n protected get currentFocusOrigin(): NonNullable<FocusOrigin> {\n return this.inputModalityDetector.mostRecentModality ?? 'program';\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 `currentFocusOrigin` so a keyboard-driven interaction keeps\n * 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 if (trigger) {\n this.focusMonitor.focusVia(trigger, this.currentFocusOrigin);\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, ValidatorFn } 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, KbqPipeTemplate } from '../filter-bar.types';\nimport { getId, 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 // Loosely typed (`any`) so the values bind cleanly to the generic date directives: on a native\n // `<input>`, `[min]`/`[max]` resolve to the DOM property (`string | number`), which a concrete `D`\n // could not satisfy inside this generic component (matching the existing `any` date handling here).\n // The runtime values are adapter-deserialized dates.\n /**\n * Lower bound instant applied to the calendars, date inputs and (datetime) timepickers.\n * @docs-private\n */\n protected min: any;\n /**\n * Upper bound instant applied to the calendars, date inputs and (datetime) timepickers.\n * @docs-private\n */\n protected max: any;\n\n /** Minimum length of the custom period (`end − start`), resolved from the template as a duration-like object. */\n private minInterval?: unknown;\n /** Maximum length of the custom period (`end − start`), resolved from the template as a duration-like object. */\n private maxInterval?: unknown;\n\n /** Canonical duration units (largest-first) used to render an interval limit faithfully to its config. */\n private static readonly INTERVAL_UNITS = [\n 'years',\n 'quarters',\n 'months',\n 'weeks',\n 'days',\n 'hours',\n 'minutes',\n 'seconds'\n ] as const;\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 /** Resolves the `minDateTime` / `maxDateTime` bounds from the pipe template matching this pipe. */\n private updateDateBounds = (templates: KbqPipeTemplate[] | null) => {\n const template = templates?.find((item) => getId(item) === getId(this.data) && item.type === this.data.type);\n\n // Sticky, like the sibling KbqBasePipe.updateTemplates: an emission where this pipe's own\n // template is momentarily absent must not blank out previously resolved bounds.\n if (!template) return;\n\n const min = this.toValidDate(template.minDateTime);\n const max = this.toValidDate(template.maxDateTime);\n\n // The date pipe has no clock; pin bounds to day edges so a time in the bound can't strand the value\n // invalid. The datetime pipe keeps the full instant (single absolute window). `.startOf`/`.endOf`\n // mirror the DateTime API the concrete subclasses already use (`adapter.today().startOf('day')`).\n this.min = this.usesTime() ? min : min?.startOf('day');\n this.max = this.usesTime() ? max : max?.endOf('day');\n\n this.minInterval = this.toValidInterval(template.minInterval);\n this.maxInterval = this.toValidInterval(template.maxInterval);\n // Re-validate an already open editor if the template (hence the interval limits) changes.\n this.formGroup?.updateValueAndValidity();\n\n this.changeDetectorRef.markForCheck();\n };\n\n /**\n * Deserializes a `minDateTime` / `maxDateTime` template value, treating an unset (`null`/`undefined`)\n * value and an unparseable one alike as \"no bound\", so call sites need no own null-check.\n */\n private toValidDate(value: unknown): any {\n const date = this.adapter.deserialize(value);\n\n return date != null && this.adapter.isValid(date) ? date : undefined;\n }\n\n /**\n * Validates a `minInterval` / `maxInterval` template value, treating anything that isn't a genuine\n * duration-like object — or that resolves to an invalid or sub-second span — as \"no constraint\"\n * instead of letting it crash `validateInterval`/`formatInterval` downstream (both call `.plus()` on\n * it directly). A bare number is rejected too: Luxon would silently read it as milliseconds, which\n * would otherwise disable the constraint without any error (e.g. a `{ days: 5 }` typo'd as `5`).\n */\n private toValidInterval(value: unknown): any {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) return undefined;\n\n try {\n const today = this.adapter.today();\n const probe = today.plus(value);\n\n if (!this.adapter.isValid(probe)) return undefined;\n\n // DurationUnit has no sub-second granularity, so a shorter interval can't be rendered by\n // `durationLong` and would misleadingly show up as \"0 seconds\" — treat it as unset instead.\n const { seconds = 0 } = this.adapter.durationObjectFromDates(today, probe, ['seconds'], true);\n\n return Math.abs(seconds) >= 1 ? value : undefined;\n } catch {\n return undefined;\n }\n }\n\n /** Clamps `value` into the configured `[min, max]` bounds using full-instant comparison. */\n private clampToBounds(value: D): D {\n if (this.min && this.adapter.compareDateTime(value, this.min) < 0) return this.min;\n if (this.max && this.adapter.compareDateTime(value, this.max) > 0) return this.max;\n\n return value;\n }\n\n /**\n * Cross-field validator flagging the custom period when its length (`end − start`) is outside the\n * configured `[minInterval, maxInterval]`. Intervals are applied via `DateTime.plus`, so calendar units\n * (months/years) are respected; unset intervals impose no constraint.\n */\n private validateInterval: ValidatorFn = (group) => {\n const start = (group as FormGroup).controls.start?.value;\n const end = (group as FormGroup).controls.end?.value;\n\n if (!this.adapter.isDateInstance(start) || !this.adapter.isDateInstance(end)) return null;\n\n if (this.minInterval && this.adapter.compareDateTime(end, start.plus(this.minInterval)) < 0) {\n return { kbqDateIntervalMin: true };\n }\n\n if (this.maxInterval && this.adapter.compareDateTime(end, start.plus(this.maxInterval)) > 0) {\n return { kbqDateIntervalMax: true };\n }\n\n return null;\n };\n\n /** Formats a duration-like interval as a locale-aware human string via the formatter, e.g. \"7 дней\". */\n private formatInterval(interval: unknown): string {\n const start = this.adapter.today();\n const units = KbqPipeDateBaseComponent.INTERVAL_UNITS.filter(\n (unit) => (interval as any)?.[unit] != null || (interval as any)?.[unit.slice(0, -1)] != null\n );\n\n return this.formatter.durationLong(start, start.plus(interval), units);\n }\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.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 return this.computeDefaultRange().start;\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 return this.computeDefaultRange().end;\n }\n\n /**\n * Computes the default `start`/`end` pair used when the pipe has no stored value, clamped into\n * `[min, max]` and, unlike a plain clamp, also reconciled against `[minInterval, maxInterval]`: `end`\n * is extended or shrunk to fit, falling back to pulling `start` back when `[min, max]` doesn't leave\n * enough room past `start` to satisfy `minInterval`. If `[min, max]` is itself narrower than\n * `minInterval`, the result may still violate it — that's a contradictory host configuration (the\n * same class of issue as `min` configured later than `max`), not something to further engineer around.\n */\n private computeDefaultRange(): { start: D; end: D } {\n let start: any = this.clampToBounds(\n this.data.value?.start ? this.adapter.today().plus(this.data.value.start) : this.getDefaultStart()\n );\n let end: any = this.clampToBounds(this.data.value?.start ? this.adapter.today() : this.getDefaultEnd());\n\n if (this.minInterval && this.adapter.compareDateTime(end, start.plus(this.minInterval)) < 0) {\n end = this.clampToBounds(start.plus(this.minInterval));\n\n if (this.adapter.compareDateTime(end, start.plus(this.minInterval)) < 0) {\n start = this.clampToBounds(end.minus(this.minInterval));\n }\n }\n\n if (this.maxInterval && this.adapter.compareDateTime(end, start.plus(this.maxInterval)) > 0) {\n end = this.clampToBounds(start.plus(this.maxInterval));\n }\n\n return { start, end };\n }\n\n /**\n * Upper bound for the START date input: the earlier of the END value and the configured `max`.\n * @docs-private\n */\n get startMax(): any {\n const end = this.formGroup.controls.end.value;\n\n if (this.max && this.adapter.isDateInstance(end)) {\n return this.adapter.compareDateTime(this.max, end) <= 0 ? this.max : end;\n }\n\n return this.max ?? end;\n }\n\n /**\n * Whether the period is invalid specifically because it runs backwards (`start` later than `end`) —\n * the one case `customPeriodErrorHint` actually describes. Deliberately compares the values rather\n * than keying off the START control's `kbqDatepickerMax` error: `startMax` is `min(max, end)`, so that\n * error fires both for a backwards period AND for a start beyond the configured `max`, and cannot\n * tell them apart. Everything else that can invalidate a control here — a value outside\n * `[min, max]` (`kbqDatepickerMin`/`kbqDatepickerMax`, `kbqTimepickerLowerThenMin`/\n * `kbqTimepickerHigherThenMax`) or unparseable typed text (`kbqDatepickerParse`/`kbqTimepickerParse`)\n * — is left to the field's own error styling instead of being mislabelled as an ordering problem.\n * @docs-private\n */\n protected get isPeriodInverted(): boolean {\n const start = this.formGroup.controls.start.value;\n const end = this.formGroup.controls.end.value;\n\n return (\n this.adapter.isDateInstance(start) &&\n this.adapter.isDateInstance(end) &&\n this.adapter.compareDateTime(start, end) > 0\n );\n }\n\n /**\n * Localized \"period too short\" hint with the `minInterval` limit interpolated and locale-formatted.\n * @docs-private\n */\n get minIntervalErrorHint(): string {\n return this.localeData.datePipe.customPeriodMinIntervalErrorHint.replace(\n '{{ value }}',\n this.formatInterval(this.minInterval)\n );\n }\n\n /**\n * Localized \"period too long\" hint with the `maxInterval` limit interpolated and locale-formatted.\n * @docs-private\n */\n get maxIntervalErrorHint(): string {\n return this.localeData.datePipe.customPeriodMaxIntervalErrorHint.replace(\n '{{ value }}',\n this.formatInterval(this.maxInterval)\n );\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 // Own subscription — NOT an extension of KbqBasePipe.updateTemplates: bound resolution needs\n // `usesTime()`, which subclasses implement as an override of an abstract method, so it must be\n // safe to call regardless of construction order. Subscribing here (rather than in the\n // constructor) guarantees both this base class's and the leaf subclass's fields are fully\n // initialized first, since ngAfterViewInit only runs once the whole component tree is built.\n this.filterBar?.internalTemplatesChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(this.updateDateBounds);\n\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 // The period list this view replaces is being torn down, so focus has to move or it lands on\n // <body>. Focus via FocusMonitor with the user's *current* input modality — not\n // `KbqButton.focusViaKeyboard()`, which hardcodes `'keyboard'` and paints the ring even for a\n // mouse click on the \"custom period\" row. This also leaves FocusMonitor's last focus origin\n // truthful, so the native focus `showList()` performs on the way back inherits the right origin.\n this.focusMonitor.focusVia(this.returnButton().elementRef, this.currentFocusOrigin);\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 /**\n * Whether this pipe edits the time part (`datetime`) or only the date (`date`). Gates whether the\n * `minDateTime` / `maxDateTime` bounds keep their time or are pinned to day edges.\n */\n protected abstract usesTime(): boolean;\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 // Read the default pair from a single `computeDefaultRange()` call (not the independent\n // `defaultStart`/`defaultEnd` getters) so `start` and `end` are reconciled against each other\n // using the same `today()` snapshot, rather than two separately-computed instants.\n const defaults = this.start && this.end ? null : this.computeDefaultRange();\n\n this.formGroup = new FormGroup(\n {\n start: new FormControl(this.start || defaults!.start),\n end: new FormControl(this.end || defaults!.end)\n },\n { validators: this.validateInterval }\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 usesTime(): boolean {\n return false;\n }\n\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\n #listSelection\n [autoSelect]=\"false\"\n [attr.aria-label]=\"data.name\"\n [ngModel]=\"data.value?.name\"\n >\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 [min]=\"min\"\n [max]=\"startMax\"\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 [minDate]=\"min\"\n [maxDate]=\"startMax\"\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 [min]=\"min\"\n [max]=\"max\"\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 (isPeriodInverted) {\n <kbq-hint class=\"kbq-date-period__hint\" [color]=\"'error'\">\n {{ localeData.datePipe.customPeriodErrorHint }}\n </kbq-hint>\n } @else if (formGroup.errors?.kbqDateIntervalMin) {\n <kbq-hint class=\"kbq-date-period__hint\" [color]=\"'error'\">\n {{ minIntervalErrorHint }}\n </kbq-hint>\n } @else if (formGroup.errors?.kbqDateIntervalMax) {\n <kbq-hint class=\"kbq-date-period__hint\" [color]=\"'error'\">\n {{ maxIntervalErrorHint }}\n </kbq-hint>\n }\n\n <kbq-calendar\n #endDateCalendar\n [class.kbq-calendar_hidden]=\"!showEndCalendar\"\n [minDate]=\"min\"\n [maxDate]=\"max\"\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 \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 usesTime(): boolean {\n return true;\n }\n\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\n #listSelection\n [autoSelect]=\"false\"\n [attr.aria-label]=\"data.name\"\n [ngModel]=\"data.value?.name\"\n >\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 [min]=\"min\"\n [max]=\"startMax\"\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\n formControlName=\"start\"\n kbqTimepicker\n [min]=\"min\"\n [max]=\"startMax\"\n (focusin)=\"hideCalendars()\"\n />\n </kbq-form-field>\n </div>\n\n <kbq-calendar\n #startDateCalendar\n [class.kbq-calendar_hidden]=\"!showStartCalendar\"\n [minDate]=\"min\"\n [maxDate]=\"startMax\"\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 [min]=\"min\"\n [max]=\"max\"\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\n formControlName=\"end\"\n kbqTimepicker\n [min]=\"min\"\n [max]=\"max\"\n (focusin)=\"hideCalendars()\"\n />\n </kbq-form-field>\n </div>\n\n @if (isPeriodInverted) {\n <kbq-hint class=\"kbq-date-period__hint\" [color]=\"'error'\">\n {{ localeData.datePipe.customPeriodErrorHint }}\n </kbq-hint>\n } @else if (formGroup.errors?.kbqDateIntervalMin) {\n <kbq-hint class=\"kbq-date-period__hint\" [color]=\"'error'\">\n {{ minIntervalErrorHint }}\n </kbq-hint>\n } @else if (formGroup.errors?.kbqDateIntervalMax) {\n <kbq-hint class=\"kbq-date-period__hint\" [color]=\"'error'\">\n {{ maxIntervalErrorHint }}\n </kbq-hint>\n }\n\n <kbq-calendar\n #endDateCalendar\n [class.kbq-calendar_hidden]=\"!showEndCalendar\"\n [minDate]=\"min\"\n [maxDate]=\"max\"\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 \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: `KbqCleaner` resets the control, and `reset()` resolves to `defaultValue`, which is\n * `null` only while `nonNullable` is unset. `{ nonNullable: true }` would make `reset()` yield `''` and silently\n * 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. `KbqCleaner` calls `ngControl.reset()`, which nulls the control but never\n // 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 * Template-provided values whose selection the user cannot remove, already resolved into the shape\n * the pipe stores in `data.value` (pipe-specific).\n */\n lockedValues(): unknown[];\n /** Equality of two entries of `data.value` (pipe-specific: id comparator / tree value comparator). */\n isSameValue(first: unknown, second: unknown): boolean;\n /** Value the pipe settles on when nothing at all is selected (pipe-specific: `[]` vs `null`). */\n emptyValue(): KbqSelectValue[] | null;\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 *\n * It also owns the locked-option semantics (`KbqPipeTemplate.lockedValues`): which entries cannot be\n * deselected, how they are folded into an incoming value, and what a cleared pipe is left with.\n */\nexport class KbqMultiSelectPipeState {\n /** Snapshot of the committed selection, preserved across the \"all selected → []\" collapse. */\n internalSelected: KbqSelectValue[] | null = null;\n\n /**\n * Whether the owning pipe's view is live. Until it is, the pipe's view queries cannot be read and no\n * user interaction has happened yet — so the \"all selected\" sentinel cannot exist.\n */\n private viewInitialized = false;\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 /** Values whose selection the user cannot remove. */\n get lockedValues(): unknown[] {\n return this.host.lockedValues();\n }\n\n /** Marks the owning pipe's view live. Called from its `ngAfterViewInit`. */\n markViewInitialized(): void {\n this.viewInitialized = true;\n }\n\n /**\n * Tally over the entries the user can actually toggle, both arrays given as entries of `data.value`.\n * Locked entries are selected no matter what, so counting them would pin the master checkbox to\n * `indeterminate` and put \"select all\" permanently out of reach.\n */\n unlockedTally(all: unknown[], selected: unknown[]): { total: number; selected: number } {\n return {\n total: all.filter((item) => !this.isLocked(item)).length,\n selected: selected.filter((item) => !this.isLocked(item)).length\n };\n }\n\n /**\n * Refreshes the snapshot from the current value (only under \"all = nothing\").\n *\n * The locked values are folded in rather than copied verbatim. The snapshot is what the panel\n * renders, and the value it is taken from may be the \"all selected\" sentinel, which deliberately\n * omits them — so a plain copy would reopen the panel with a locked option unchecked and, being\n * disabled, impossible for the user to put back. Merging into the assigned array rather than into\n * the `selected` getter keeps the reference stable across change detection: the getter feeds the\n * select's `value` binding, which would otherwise be rewritten on every pass.\n */\n updateInternalSelected(): void {\n if (this.selectedAllEqualsSelectedNothing) {\n this.internalSelected = this.mergeLocked(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.hasOnlyLockedValues() ||\n (this.selectedAllEqualsSelectedNothing && this.host.allOptionsSelected())\n );\n }\n\n /** Whether the given entry of the pipe's value is one the user cannot deselect. */\n isLocked(item: unknown): boolean {\n return this.lockedValues.some((locked) => this.host.isSameValue(locked, item));\n }\n\n /**\n * The given value with every locked value it is missing appended. Returns the value unchanged (same\n * reference) when nothing is missing, so a pipe without locked options keeps its own `null` / `[]`\n * representation of \"empty\".\n */\n mergeLocked(value: KbqSelectValue[] | null): KbqSelectValue[] | null {\n const missing = this.lockedValues.filter(\n (locked) => !value?.some((item) => this.host.isSameValue(locked, item))\n );\n\n if (!missing.length) return value;\n\n return [...(value || []), ...missing] as KbqSelectValue[];\n }\n\n /** Value a cleared pipe is left with: the locked values, or the pipe's own empty value. */\n clearedValue(): KbqSelectValue[] | null {\n return this.lockedValues.length ? ([...this.lockedValues] as KbqSelectValue[]) : this.host.emptyValue();\n }\n\n /** Whether the committed value holds nothing beyond the locked entries. */\n hasOnlyLockedValues(): boolean {\n const value = this.host.data.value;\n\n return (\n !!this.lockedValues.length &&\n Array.isArray(value) &&\n value.length > 0 &&\n value.every((item) => this.isLocked(item))\n );\n }\n\n /**\n * Silently folds the missing locked values into the committed value and refreshes the snapshot.\n *\n * Only ever called when a value arrives from outside the pipe (initialization, pipe-template changes)\n * — never from a selection handler, where `[]` is the \"all selected = nothing selected\" sentinel for\n * a full selection rather than an empty one.\n *\n * That sentinel still has to be recognised here: `internalTemplatesChanges` re-emits on every new\n * `pipeTemplates` reference, long after the user may have selected everything. Locked values are\n * deliberately absent from the sentinel — folding them in would silently downgrade \"everything\n * selected\" to \"only the locked values selected\", and without a change event, so the host's filter\n * model and the pipe would drift apart. Before the view is live no interaction has happened yet,\n * so a `[]` there is a genuinely empty value that should receive the locked ones.\n */\n normalizeValue(): void {\n if (this.viewInitialized && this.selectedAllEqualsSelectedNothing && this.host.allOptionsSelected()) return;\n\n const merged = this.mergeLocked(this.host.data.value);\n\n if (merged === this.host.data.value) return;\n\n this.host.data.value = merged;\n\n this.updateInternalSelected();\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 tally = this.unlockedTally;\n\n if (!tally) return 'unchecked';\n\n if (!tally.selected) {\n return 'unchecked';\n } else if (tally.selected === tally.total) {\n return 'checked';\n }\n\n return 'indeterminate';\n }\n\n /** true if all visible options selected */\n get allVisibleOptionsSelected(): boolean {\n const visible = this.visibleOptions;\n\n // `[].every()` is `true`: with every visible option locked there is nothing for \"select all\" to\n // act on, and claiming \"all selected\" would send the toggle down the deselect branch instead.\n return !!visible?.length && visible.every((option) => option.selected);\n }\n\n /** true if all options selected */\n get allOptionsSelected(): boolean {\n const tally = this.unlockedTally;\n\n // A tally of zero is not a full selection: with every option locked there is nothing for \"select\n // all\" to act on, and `0 === 0` would otherwise collapse the value to the \"all selected\"\n // sentinel, dropping the locked values. Same reasoning as `allVisibleOptionsSelected` above.\n return !!tally && tally.total > 0 && tally.selected === tally.total;\n }\n\n /**\n * Selection tally restricted to the options the user can actually toggle — the one place the\n * \"ignore the locked options\" rule of \"select all\" is expressed. `null` while there is nothing to\n * tally: no options came from the pipe template yet, or the view is not up.\n */\n private get unlockedTally(): { total: number; selected: number } | null {\n const select = this.select();\n\n if (!this.values || !select?.selectionModel) return null;\n\n return this.multiSelect.unlockedTally(\n this.values,\n select.selectionModel.selected.map((option) => option.value)\n );\n }\n\n get selectedAllEqualsSelectedNothing(): boolean {\n return this.multiSelect.selectedAllEqualsSelectedNothing;\n }\n\n private get visibleOptions(): KbqOption[] {\n // Excluding the disabled options excludes the locked ones from \"select all\": `KbqOption.select()`\n // and `deselect()` do not consult `disabled`, so filtering has to happen here.\n return this.options()?.filter((option) => option.selectable() && !option.disabled);\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 lockedValues: () => this.lockedValues ?? [],\n isSameValue: (first, second) =>\n (this.optionCompareWith ?? this.compareByValue)(first as KbqSelectValue, second as KbqSelectValue),\n emptyValue: () => []\n });\n\n constructor() {\n super();\n\n // The subscription established by `KbqBasePipe`'s constructor captured the base `updateTemplates`,\n // which refreshes `lockedValues` but knows nothing about the committed value. Subscribing again\n // here folds the locked values in right after — including on the initial replay.\n this.filterBar?.internalTemplatesChanges\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.multiSelect.normalizeValue());\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.multiSelect.markViewInitialized();\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 // Defense in depth. The lock itself is enforced upstream — `disabled` blocks every path in\n // `kbq-select` that could deselect the option — so this merge is expected to be a no-op for\n // anything the user does here. It stays because a selection can also be reshaped by a value\n // arriving from outside a user interaction.\n this.data.value = this.multiSelect.mergeLocked(item);\n }\n\n this.multiSelect.emitChangePipeEvent();\n\n this.stateChanges.next();\n }\n\n /** Whether the option cannot be deselected by the user. Template-only. */\n protected isLocked(item: KbqSelectValue): boolean {\n return this.multiSelect.isLocked(item);\n }\n\n /** @docs-private */\n onClear() {\n this.data.value = this.multiSelect.clearedValue();\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.multiSelect.mergeLocked([...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 [panelMaxHeight]=\"panelMaxHeight\"\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\" [disabled]=\"isLocked(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 if (!this.select()) return 'unchecked';\n\n if (this.allOptionsSelected) {\n return 'checked';\n }\n\n const tally = this.unlockedTally;\n\n return tally && tally.selected > 0 ? 'indeterminate' : '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 tally = this.unlockedTally;\n\n // A tally of zero is not a full selection: with every node locked there is nothing for \"select\n // all\" to act on, and `0 === 0` would otherwise check the master checkbox over a tree the user\n // cannot toggle. Same reasoning as `allVisibleOptionsSelected` below.\n return !!tally && tally.total > 0 && tally.selected === tally.total;\n }\n\n /**\n * Selection tally restricted to the nodes the user can actually toggle — the one place the \"ignore the\n * locked nodes\" rule of \"select all\" is expressed. `null` until the tree data has been built.\n *\n * `triggerValues` is derived from the very same selection model as `selected`, so either would do.\n */\n private get unlockedTally(): { total: number; selected: number } | null {\n const dataNodes = this.treeControl?.dataNodes;\n\n if (!dataNodes) return null;\n\n return this.multiSelect.unlockedTally(\n dataNodes.filter(({ value }) => value !== kbqTreeSelectAllValue).map(({ value }) => value),\n (this.select()?.triggerValues ?? []).map(({ value }) => value)\n );\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 const visible = this.tree().renderedOptions.filter(\n (option) => option.value !== kbqTreeSelectAllValue && !option.disabled\n );\n\n // `[].every()` is `true`: with every visible node locked there is nothing for \"select all\" to act\n // on, and claiming \"all selected\" would send the toggle down the deselect branch instead.\n return visible.length > 0 && visible.every((option) => option.selected);\n }\n\n /** Flat nodes whose selection the user cannot remove, the subtree of a locked branch included. */\n private get lockedDataNodes(): KbqTreeSelectFlatNode[] {\n return this.lockedValues?.length ? (this.treeControl.dataNodes?.filter(this.isLockedNode) ?? []) : [];\n }\n\n /**\n * Values of every locked node, the subtree of a locked branch included. Resolved once per template\n * change rather than on demand — `isEmpty` reads it on every change-detection pass.\n */\n private lockedNodeValues: unknown[] = [];\n\n private readonly multiSelect = new KbqMultiSelectPipeState({\n data: this.data,\n filterBar: this.filterBar,\n allOptionsSelected: () => this.allOptionsSelected,\n lockedValues: () => this.lockedNodeValues,\n isSameValue: (first, second) => this.treeControl.compareValues(first, second),\n emptyValue: () => null\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 // Patched on the instance for the same reason as `getViewValue` above: `KbqTreeSelectPipeBase`\n // builds the control before this subclass's fields exist, so it cannot pass the predicate as the\n // `isDisabled` constructor argument. Routing the locked options through it buys the guards the\n // tree already has — blocked clicks, exclusion from \"select all\", disabled trigger values.\n this.treeControl.isDisabled = this.isLockedNode;\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 override ngAfterViewInit(): void {\n super.ngAfterViewInit();\n\n this.multiSelect.markViewInitialized();\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 // `setStateChildren` and `toggleParents` cascade straight through the selection model, so a\n // locked descendant of a deselected branch has to be put back before the value is read.\n this.enforceLockedNodes();\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 // `KbqTreeOption.setSelected()` does not consult `disabled`, so the locked options are filtered\n // out here rather than relying on the tree's own guards.\n const renderedOptions = this.tree().renderedOptions.filter(\n (option) => option.value !== kbqTreeSelectAllValue && !option.disabled\n );\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 // Same model the tree owns — see the note in `enforceLockedNodes`.\n const { selectionModel } = this.select();\n\n if (this.allOptionsSelected) {\n // `clear()` would drop the locked nodes along with the rest. Matched by value rather than\n // by reference: the last `dataSource.data` assignment rebuilds every flat node, so an\n // identity check would miss the ones the selection model still holds.\n selectionModel.deselect(...selectionModel.selected.filter((node) => !this.isLockedNode(node)));\n } else {\n const [, ...dataNodesForSelect] = this.treeControl.dataNodes;\n\n // The locked nodes are already selected and stay out of \"select all\" either way — leaving\n // them out here keeps them out of the model's `added` payload too.\n // @todo DS-3827\n selectionModel.select(...(dataNodesForSelect.filter((node) => !this.isLockedNode(node)) as any));\n }\n }\n\n setTimeout(() => {\n if (this.destroyed) return;\n\n this.enforceLockedNodes();\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 // Expanded here rather than on demand: the `dataSource.data` assignment above is the only thing\n // that rewrites `treeControl.dataNodes`, so this is the single point where either input changes.\n this.lockedNodeValues = this.lockedDataNodes.map((node) => node.value);\n\n this.multiSelect.normalizeValue();\n };\n\n override onClear() {\n super.onClear();\n\n this.multiSelect.updateInternalSelected();\n }\n\n /** Clearing keeps the locked values; with none configured the pipe resets to `null` as before. */\n protected override clearedValue(): KbqSelectValue[] | null {\n return this.multiSelect.clearedValue();\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 /**\n * Whether the node cannot be deselected: either its own value is locked, or it descends from a locked\n * branch. Locking a branch has to lock its subtree — deselecting a child would otherwise switch the\n * locked parent's own checkbox off.\n */\n private isLockedNode = (node: KbqTreeSelectFlatNode): boolean => {\n let current: KbqTreeSelectFlatNode | undefined = node;\n\n while (current) {\n const { value } = current;\n\n if (this.lockedValues?.some((locked) => this.treeControl.compareValues(locked, value))) return true;\n\n current = current.parent;\n }\n\n return false;\n };\n\n /** Puts back every locked node the tree's own cascades may have deselected. */\n private enforceLockedNodes(): void {\n // The tree-select exposes the very same model the tree owns, but untyped — which is what the\n // surrounding code (`toggleParents`) already relies on to pass flat nodes around.\n const { selectionModel } = this.select();\n const missing = this.lockedDataNodes.filter((node) => !selectionModel.isSelected(node));\n\n if (missing.length) {\n selectionModel.select(...missing);\n }\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 [panelMaxHeight]=\"panelMaxHeight\"\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 <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\n [innerHTML]=\"treeControl.getViewValue(node) | kbqHighlightBackground: treeControl.filterValue.value\"\n ></span>\n </kbq-tree-option>\n\n <kbq-tree-option *kbqTreeNodeDef=\"let node\" kbqTreeNodePadding [checkboxThirdState]=\"true\">\n <span\n [innerHTML]=\"treeControl.getViewValue(node) | kbqHighlightBackground: treeControl.filterValue.value\"\n ></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\n [innerHTML]=\"treeControl.getViewValue(node) | kbqHighlightBackground: treeControl.filterValue.value\"\n ></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'],\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 [panelMaxHeight]=\"panelMaxHeight\"\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 \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 [panelMaxHeight]=\"panelMaxHeight\"\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 />\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\n [innerHTML]=\"treeControl.getViewValue(node) | kbqHighlightBackground: treeControl.filterValue.value\"\n ></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\n [innerHTML]=\"treeControl.getViewValue(node) | kbqHighlightBackground: treeControl.filterValue.value\"\n ></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 { KbqPanelMaxHeight, 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 * Options whose selection cannot be removed by the user: they are always selected, render as\n * `disabled` with a checked checkbox, and survive both \"select all\" toggling and clearing the pipe.\n *\n * Entries have the same shape as the entries of the owning pipe's `value`: `KbqSelectValue` objects\n * for the `multiselect` pipe (matched with `compareWith`, falling back to the pipe's id-based\n * comparator), and raw node values for the `multi-tree-select` pipe. Locking a tree branch locks its\n * whole subtree. Ignored by other pipe types.\n */\n lockedValues?: unknown[];\n /**\n * Maximum height of the dropdown panel's scrollable list, in pixels, forwarded to the underlying\n * `kbq-select` / `kbq-tree-select` of the `select`, `multiselect`, `tree-select` and `multi-tree-select`\n * pipes. Omitting it — or passing `null` — keeps the select-family default of 256px, i.e. exactly eight\n * 32px options.\n *\n * The cap covers the scrollable list only, and the list's own padding is added on top of it, so a\n * multiple of the option height fits without a scrollbar. The pipe's search field is rendered above the\n * list and adds to the panel's total height, while the \"select all\" row scrolls with the options and is\n * counted by the cap. A value taller than the room left in the viewport is clipped by the overlay rather\n * than scrolled. Ignored by other pipe types.\n */\n panelMaxHeight?: KbqPanelMaxHeight;\n /**\n * Earliest selectable instant for the `date` / `datetime` pipe custom period. Accepts any value the\n * configured `DateAdapter` can deserialize (with the default Luxon adapter: an ISO-8601 string, a\n * `Date`, or a `DateTime`). The `date` pipe uses only its day (pinned to the start of day). Ignored by\n * other pipe types.\n */\n minDateTime?: unknown;\n /**\n * Latest selectable instant for the `date` / `datetime` pipe custom period. See\n * {@link KbqPipeTemplate.minDateTime}. The `date` pipe uses only its day (pinned to the end of day).\n * Ignored by other pipe types.\n */\n maxDateTime?: unknown;\n /**\n * Minimum length of the `date` / `datetime` pipe custom period (`end − start`), as a Luxon\n * duration-like object, e.g. `{ days: 1 }` or `{ hours: 2 }`. When the selected period is shorter, the\n * editor shows an error and disables Apply. Ignored by other pipe types.\n *\n * Unlike {@link KbqPipeTemplate.minDateTime}, this value is NOT deserialized through the configured\n * `DateAdapter` — it is applied directly via the date value's own `.plus()`, so this option currently\n * assumes the default Luxon adapter and is not portable to other `DateAdapter` implementations (e.g.\n * the Moment adapter).\n */\n minInterval?: unknown;\n /**\n * Maximum length of the `date` / `datetime` pipe custom period (`end − start`). See\n * {@link KbqPipeTemplate.minInterval}. When the selected period is longer, the editor shows an error and\n * disables Apply. Ignored by other pipe types.\n */\n maxInterval?: unknown;\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 { FocusMonitor, InputModalityDetector } from '@angular/cdk/a11y';\nimport {\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 host: {\n // The whole template is pushed onto the popover trigger imperatively; remove the empty host from\n // layout entirely, since it would otherwise be an inline box in normal flow or a phantom item\n // in the parent's (`.kbq-filters`, flex) layout.\n style: 'display: none'\n }\n})\nexport class KbqFilterSavePopover implements AfterViewInit {\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly inputModalityDetector = inject(InputModalityDetector);\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 // Put focus back on the re-enabled Save button so the retry is reachable, via FocusMonitor with the\n // user's current input modality (same rule as `KbqBasePipe.currentFocusOrigin`, duplicated as a\n // one-line expression here since this component isn't a `KbqBasePipe` subclass and can't reach that\n // protected getter). A hardcoded `'keyboard'` origin (what `focusViaKeyboard()` does) would paint\n // the focus ring even when the save came from a click. The `disabled` guard mirrors\n // `focusViaKeyboard()`'s own early return: it doesn't trigger in the normal single-attempt flow, but\n // protects a retry that re-disables the button before this deferred callback runs.\n setTimeout(() => {\n const button = this.saveFilterButton();\n\n if (button.disabled) return;\n\n this.focusMonitor.focusVia(button.elementRef, this.inputModalityDetector.mostRecentModality ?? 'program');\n });\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","i4","i5","i6","i9","this","i10","i3","i7","i8"],"mappings":"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"}
|