@koobiq/components 20.4.2 → 21.0.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-trigger.scss +3 -10
- package/accordion/accordion.scss +4 -6
- package/actions-panel/actions-panel-container.scss +45 -1
- package/alert/alert.component.scss +3 -2
- package/app-switcher/_app-switcher-theme.scss +0 -4
- package/app-switcher/app-switcher-dropdown-app.scss +3 -2
- package/app-switcher/app-switcher-dropdown-site.scss +2 -1
- package/app-switcher/{kbq-app-switcher-list-item.scss → app-switcher-list-item.scss} +18 -4
- package/app-switcher/app-switcher-tokens.scss +15 -0
- package/app-switcher/app-switcher.scss +14 -4
- package/autocomplete/autocomplete.scss +7 -6
- package/badge/badge.component.scss +5 -8
- package/breadcrumbs/breadcrumbs.scss +25 -10
- package/button/_button-base.scss +30 -7
- package/button/_button-theme.scss +16 -0
- package/button/button-group.scss +7 -0
- package/button/button-tokens.scss +0 -2
- package/button/button.scss +34 -2
- package/button-toggle/_button-toggle-theme.scss +7 -2
- package/button-toggle/button-toggle.scss +65 -15
- package/checkbox/_checkbox-theme.scss +4 -3
- package/checkbox/checkbox.scss +3 -6
- package/clamped-text/clamped-text.scss +6 -2
- package/code-block/code-block-tokens.scss +0 -224
- package/code-block/code-block.scss +20 -9
- package/content-panel/content-panel-aside.scss +3 -2
- package/content-panel/content-panel-container.scss +37 -0
- package/content-panel/content-panel.scss +4 -3
- package/core/highlight/_highlight-theme.scss +3 -1
- package/core/option/action-container.scss +2 -2
- package/core/option/action.scss +2 -1
- package/core/option/option.scss +2 -1
- package/core/pop-up/_pop-up.scss +0 -37
- package/core/selection/pseudo-checkbox/pseudo-checkbox.scss +5 -10
- package/core/styles/_core.scss +3 -0
- package/core/styles/_koobiq-theme.scss +5 -6
- package/core/styles/common/_animation.scss +44 -16
- package/core/styles/common/_groups-mixins.scss +21 -19
- package/core/styles/common/_groups.scss +4 -32
- package/core/styles/common/_index.scss +0 -2
- package/core/styles/common/_link.scss +117 -0
- package/core/styles/common/_list.scss +0 -26
- package/core/styles/common/_overlay.scss +8 -10
- package/core/styles/common/_rtl.scss +0 -14
- package/core/styles/common/_select.scss +33 -15
- package/core/styles/common/_squircle.scss +63 -0
- package/core/styles/common/_tokens.scss +0 -11
- package/core/styles/common/_vendor-prefixes.scss +0 -20
- package/core/styles/functions/_timing.scss +0 -22
- package/core/styles/theming/_scrollbar-theme.scss +6 -1
- package/core/styles/theming/_theming.scss +13 -65
- package/core/styles/typography/_index.scss +0 -1
- package/core/styles/typography/_typography.scss +0 -143
- package/core/styles/visual/_body.scss +1 -6
- package/core/styles/visual/_layout.scss +0 -12
- package/datepicker/calendar-body.scss +3 -1
- package/datepicker/calendar-header.scss +0 -1
- package/datepicker/datepicker-content.scss +33 -1
- package/datepicker/datepicker-toggle.scss +0 -38
- package/dl/dl-tokens.scss +10 -0
- package/dl/dl.scss +113 -13
- package/dropdown/_dropdown-theme.scss +4 -16
- package/dropdown/dropdown-item.scss +4 -10
- package/dropdown/dropdown.scss +2 -1
- package/empty-state/_empty-state-theme.scss +10 -4
- package/empty-state/empty-state-tokens.scss +4 -4
- package/empty-state/empty-state.scss +4 -0
- package/fesm2022/koobiq-components-accordion.mjs +347 -229
- package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
- package/fesm2022/koobiq-components-actions-panel.mjs +302 -187
- package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-alert.mjs +39 -39
- package/fesm2022/koobiq-components-alert.mjs.map +1 -1
- package/fesm2022/koobiq-components-app-switcher.mjs +677 -367
- package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
- package/fesm2022/koobiq-components-autocomplete.mjs +620 -253
- package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
- package/fesm2022/koobiq-components-badge.mjs +46 -48
- package/fesm2022/koobiq-components-badge.mjs.map +1 -1
- package/fesm2022/koobiq-components-breadcrumbs.mjs +221 -169
- package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/koobiq-components-button-toggle.mjs +565 -196
- package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-button.mjs +332 -116
- package/fesm2022/koobiq-components-button.mjs.map +1 -1
- package/fesm2022/koobiq-components-checkbox.mjs +172 -132
- package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
- package/fesm2022/koobiq-components-clamped-text.mjs +165 -158
- package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
- package/fesm2022/koobiq-components-code-block.mjs +755 -601
- package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
- package/fesm2022/koobiq-components-content-panel.mjs +260 -143
- package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-core.mjs +4342 -1595
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs +1713 -1606
- package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-divider.mjs +73 -36
- package/fesm2022/koobiq-components-divider.mjs.map +1 -1
- package/fesm2022/koobiq-components-dl.mjs +447 -89
- package/fesm2022/koobiq-components-dl.mjs.map +1 -1
- package/fesm2022/koobiq-components-dropdown.mjs +703 -599
- package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-dynamic-translation.mjs +20 -20
- package/fesm2022/koobiq-components-dynamic-translation.mjs.map +1 -1
- package/fesm2022/koobiq-components-ellipsis-center.mjs +46 -31
- package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-empty-state.mjs +116 -60
- package/fesm2022/koobiq-components-empty-state.mjs.map +1 -1
- package/fesm2022/koobiq-components-file-upload.mjs +550 -290
- package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +2810 -2538
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-flag.mjs +79 -24
- package/fesm2022/koobiq-components-flag.mjs.map +1 -1
- package/fesm2022/koobiq-components-form-field.mjs +389 -525
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-icon.mjs +366 -136
- package/fesm2022/koobiq-components-icon.mjs.map +1 -1
- package/fesm2022/koobiq-components-inline-edit.mjs +429 -212
- package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
- package/fesm2022/koobiq-components-input.mjs +601 -459
- package/fesm2022/koobiq-components-input.mjs.map +1 -1
- package/fesm2022/koobiq-components-link-deprecated.mjs +196 -0
- package/fesm2022/koobiq-components-link-deprecated.mjs.map +1 -0
- package/fesm2022/koobiq-components-link.mjs +328 -125
- package/fesm2022/koobiq-components-link.mjs.map +1 -1
- package/fesm2022/koobiq-components-list.mjs +583 -433
- package/fesm2022/koobiq-components-list.mjs.map +1 -1
- package/fesm2022/koobiq-components-loader-overlay.mjs +167 -68
- package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
- package/fesm2022/koobiq-components-markdown.mjs +55 -78
- package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-modal.mjs +853 -475
- package/fesm2022/koobiq-components-modal.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar.mjs +895 -556
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-notification-center.mjs +680 -310
- package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-overflow-items.mjs +46 -64
- package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
- package/fesm2022/koobiq-components-popover.mjs +684 -285
- package/fesm2022/koobiq-components-popover.mjs.map +1 -1
- package/fesm2022/koobiq-components-progress-bar.mjs +87 -33
- package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-progress-spinner.mjs +52 -43
- package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
- package/fesm2022/koobiq-components-radio.mjs +450 -231
- package/fesm2022/koobiq-components-radio.mjs.map +1 -1
- package/fesm2022/koobiq-components-resizer.mjs +127 -21
- package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
- package/fesm2022/koobiq-components-scrollbar-deprecated.mjs +299 -0
- package/fesm2022/koobiq-components-scrollbar-deprecated.mjs.map +1 -0
- package/fesm2022/koobiq-components-scrollbar.mjs +745 -222
- package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-search-expandable.mjs +288 -126
- package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +883 -693
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidebar.mjs +207 -88
- package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidepanel.mjs +689 -296
- package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
- package/fesm2022/koobiq-components-skeleton.mjs +815 -41
- package/fesm2022/koobiq-components-skeleton.mjs.map +1 -1
- package/fesm2022/koobiq-components-split-button.mjs +109 -88
- package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
- package/fesm2022/koobiq-components-splitter-deprecated.mjs +591 -0
- package/fesm2022/koobiq-components-splitter-deprecated.mjs.map +1 -0
- package/fesm2022/koobiq-components-splitter.mjs +890 -501
- package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
- package/fesm2022/koobiq-components-table.mjs +63 -49
- package/fesm2022/koobiq-components-table.mjs.map +1 -1
- package/fesm2022/koobiq-components-tabs.mjs +1062 -603
- package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
- package/fesm2022/koobiq-components-tags.mjs +886 -733
- package/fesm2022/koobiq-components-tags.mjs.map +1 -1
- package/fesm2022/koobiq-components-textarea.mjs +213 -185
- package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
- package/fesm2022/koobiq-components-time-range.mjs +299 -147
- package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
- package/fesm2022/koobiq-components-timepicker.mjs +233 -245
- package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-timezone.mjs +344 -142
- package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
- package/fesm2022/koobiq-components-title.mjs +229 -145
- package/fesm2022/koobiq-components-title.mjs.map +1 -1
- package/fesm2022/koobiq-components-toast.mjs +463 -143
- package/fesm2022/koobiq-components-toast.mjs.map +1 -1
- package/fesm2022/koobiq-components-toggle.mjs +177 -130
- package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-tooltip.mjs +657 -214
- package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
- package/fesm2022/koobiq-components-top-bar.mjs +61 -32
- package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree-select.mjs +719 -488
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree.mjs +1506 -558
- package/fesm2022/koobiq-components-tree.mjs.map +1 -1
- package/fesm2022/koobiq-components-username.mjs +290 -135
- package/fesm2022/koobiq-components-username.mjs.map +1 -1
- package/file-upload/dropzone.scss +31 -3
- package/file-upload/file-upload-tokens.scss +2 -22
- package/file-upload/file-upload.scss +6 -0
- package/file-upload/multiple-file-upload.component.scss +14 -12
- package/file-upload/single-file-upload.component.scss +3 -2
- package/filter-bar/filters.scss +7 -0
- package/filter-bar/pipes/base-pipe.scss +3 -3
- package/filter-bar/pipes/pipe-date.scss +8 -1
- package/flag/flag-tokens.scss +22 -0
- package/flag/flag.scss +34 -21
- package/form-field/{_fiedset-theme.scss → _fieldset-theme.scss} +1 -5
- package/form-field/_form-field-theme.scss +4 -9
- package/form-field/cleaner.scss +3 -1
- package/form-field/fieldset.scss +3 -4
- package/form-field/form-field.scss +26 -21
- package/form-field/password-toggle.scss +3 -1
- package/icon/_icon-button-theme.scss +7 -0
- package/icon/_icon-theme.scss +10 -7
- package/icon/icon-button.scss +0 -2
- package/icon/icon-tokens.scss +12 -9
- package/inline-edit/inline-edit.scss +40 -54
- package/input/input.scss +4 -0
- package/link/{_link-theme.scss → deprecated/_link-theme.scss} +11 -6
- package/link/deprecated/link-tokens.scss +27 -0
- package/link/link-tokens.scss +6 -25
- package/link/link.scss +137 -0
- package/list/list.scss +3 -2
- package/loader-overlay/_loader-overlay-theme.scss +19 -10
- package/loader-overlay/loader-overlay-tokens.scss +0 -2
- package/loader-overlay/loader-overlay.scss +7 -1
- package/markdown/_markdown-theme.scss +16 -0
- package/markdown/markdown-tokens.scss +5 -0
- package/markdown/markdown.scss +2 -1
- package/modal/_modal-animation.scss +23 -14
- package/modal/modal-tokens.scss +2 -1
- package/modal/modal.scss +35 -31
- package/navbar/_navbar-item_horizontal.scss +8 -6
- package/navbar/_navbar-item_vertical.scss +18 -6
- package/navbar/_navbar-theme.scss +9 -1
- package/navbar/navbar-brand.scss +8 -6
- package/navbar/navbar-divider.scss +1 -1
- package/navbar/navbar-item.scss +8 -9
- package/navbar/navbar-toggle.scss +3 -3
- package/navbar/navbar-tokens.scss +14 -0
- package/navbar/navbar.scss +1 -2
- package/navbar/vertical-navbar.scss +2 -2
- package/notification-center/_notification-center-theme.scss +11 -6
- package/notification-center/notification-center-tokens.scss +33 -0
- package/notification-center/notification-center.scss +58 -20
- package/notification-center/notification-item.scss +15 -6
- package/package.json +112 -81
- package/popover/popover-tokens.scss +0 -2
- package/popover/popover.scss +41 -19
- package/prebuilt-themes/theme.css +1 -1
- package/progress-bar/_progress-bar-theme.scss +20 -3
- package/progress-bar/progress-bar-tokens.scss +3 -0
- package/progress-bar/progress-bar.scss +36 -8
- package/progress-spinner/progress-spinner.scss +4 -3
- package/radio/_radio-theme.scss +21 -4
- package/radio/radio-tokens.scss +7 -3
- package/radio/radio.scss +55 -8
- package/schematics/collection.json +399 -7
- package/schematics/migrations/accordion-state-saving-default/README.md +60 -0
- package/schematics/migrations/accordion-state-saving-default/data.js +75 -0
- package/schematics/migrations/accordion-state-saving-default/index.js +60 -0
- package/schematics/migrations/accordion-state-saving-default/schema.json +15 -0
- package/schematics/migrations/actions-panel-overlay-container/README.md +35 -0
- package/schematics/migrations/actions-panel-overlay-container/data.js +47 -0
- package/schematics/migrations/actions-panel-overlay-container/index.js +54 -0
- package/schematics/migrations/actions-panel-overlay-container/schema.json +15 -0
- package/schematics/migrations/alert-signals/README.md +13 -7
- package/schematics/migrations/alert-signals/data.js +3 -0
- package/schematics/migrations/alert-signals/index.js +70 -203
- package/schematics/migrations/angular-animations-removal/README.md +46 -0
- package/schematics/migrations/angular-animations-removal/data.js +150 -0
- package/schematics/migrations/angular-animations-removal/index.js +20 -0
- package/schematics/migrations/angular-animations-removal/schema.json +15 -0
- package/schematics/migrations/app-switcher-signals/README.md +88 -0
- package/schematics/migrations/app-switcher-signals/data.js +136 -0
- package/schematics/migrations/app-switcher-signals/index.js +365 -0
- package/schematics/migrations/app-switcher-signals/schema.json +20 -0
- package/schematics/migrations/autocomplete-panel-width-auto/README.md +2 -2
- package/schematics/migrations/autocomplete-panel-width-auto/index.js +1 -1
- package/schematics/migrations/autocomplete-signals/README.md +92 -0
- package/schematics/migrations/autocomplete-signals/data.js +149 -0
- package/schematics/migrations/autocomplete-signals/index.js +706 -0
- package/schematics/migrations/autocomplete-signals/schema.json +20 -0
- package/schematics/migrations/badge-signals/README.md +77 -0
- package/schematics/migrations/badge-signals/data.js +109 -0
- package/schematics/migrations/badge-signals/index.js +693 -0
- package/schematics/migrations/badge-signals/schema.json +20 -0
- package/schematics/migrations/button-state-and-styles/README.md +129 -0
- package/schematics/migrations/button-state-and-styles/data.js +136 -0
- package/schematics/migrations/button-state-and-styles/index.js +220 -0
- package/schematics/migrations/button-state-and-styles/schema.json +20 -0
- package/schematics/migrations/button-supported-colors/README.md +73 -0
- package/schematics/migrations/button-supported-colors/data.js +106 -0
- package/schematics/migrations/button-supported-colors/index.js +260 -0
- package/schematics/migrations/button-supported-colors/schema.json +20 -0
- package/schematics/migrations/button-toggle-signals-and-aria/README.md +137 -0
- package/schematics/migrations/button-toggle-signals-and-aria/data.js +200 -0
- package/schematics/migrations/button-toggle-signals-and-aria/index.js +496 -0
- package/schematics/migrations/button-toggle-signals-and-aria/schema.json +20 -0
- package/schematics/migrations/button-truncation/README.md +110 -0
- package/schematics/migrations/button-truncation/data.js +88 -0
- package/schematics/migrations/button-truncation/index.js +269 -0
- package/schematics/migrations/button-truncation/schema.json +20 -0
- package/schematics/migrations/checkbox-signals/README.md +76 -0
- package/schematics/migrations/checkbox-signals/data.js +114 -0
- package/schematics/migrations/checkbox-signals/index.js +634 -0
- package/schematics/migrations/checkbox-signals/schema.json +20 -0
- package/schematics/migrations/clamped-text-disclosure/README.md +62 -0
- package/schematics/migrations/clamped-text-disclosure/data.js +101 -0
- package/schematics/migrations/clamped-text-disclosure/index.js +59 -0
- package/schematics/migrations/clamped-text-disclosure/schema.json +15 -0
- package/schematics/migrations/code-block-signals/README.md +84 -0
- package/schematics/migrations/code-block-signals/data.js +121 -0
- package/schematics/migrations/code-block-signals/index.js +700 -0
- package/schematics/migrations/code-block-signals/schema.json +20 -0
- package/schematics/migrations/color-signals/README.md +46 -0
- package/schematics/migrations/color-signals/data.js +131 -0
- package/schematics/migrations/color-signals/index.js +19 -0
- package/schematics/migrations/color-signals/schema.json +20 -0
- package/schematics/migrations/core-mixins-removal/README.md +20 -0
- package/schematics/migrations/core-mixins-removal/data.js +27 -0
- package/schematics/migrations/core-mixins-removal/index.js +17 -0
- package/schematics/migrations/core-mixins-removal/schema.json +15 -0
- package/schematics/migrations/css-selectors/README.md +2 -2
- package/schematics/migrations/css-selectors/index.js +1 -1
- package/schematics/migrations/datepicker-signals/README.md +24 -0
- package/schematics/migrations/datepicker-signals/data.js +49 -0
- package/schematics/migrations/datepicker-signals/index.js +17 -0
- package/schematics/migrations/datepicker-signals/schema.json +15 -0
- package/schematics/migrations/deprecated-icons/README.md +2 -2
- package/schematics/migrations/deprecated-icons/index.js +1 -1
- package/schematics/migrations/design-tokens-v4/README.md +75 -0
- package/schematics/migrations/design-tokens-v4/index.js +59 -0
- package/schematics/migrations/design-tokens-v4/schema.json +15 -0
- package/schematics/migrations/divider-signals-and-aria/README.md +47 -0
- package/schematics/migrations/divider-signals-and-aria/data.js +62 -0
- package/schematics/migrations/divider-signals-and-aria/index.js +211 -0
- package/schematics/migrations/divider-signals-and-aria/schema.json +15 -0
- package/schematics/migrations/dl-attribute-coercion/README.md +59 -0
- package/schematics/migrations/dl-attribute-coercion/data.js +85 -0
- package/schematics/migrations/dl-attribute-coercion/index.js +161 -0
- package/schematics/migrations/dl-attribute-coercion/schema.json +15 -0
- package/schematics/migrations/dl-standalone-names/README.md +49 -0
- package/schematics/migrations/dl-standalone-names/data.js +44 -0
- package/schematics/migrations/dl-standalone-names/index.js +321 -0
- package/schematics/migrations/dl-standalone-names/schema.json +20 -0
- package/schematics/migrations/dropdown-demote-overlay/README.md +137 -0
- package/schematics/migrations/dropdown-demote-overlay/data.js +84 -0
- package/schematics/migrations/dropdown-demote-overlay/index.js +288 -0
- package/schematics/migrations/dropdown-demote-overlay/schema.json +20 -0
- package/schematics/migrations/dropdown-signals/README.md +83 -0
- package/schematics/migrations/dropdown-signals/data.js +152 -0
- package/schematics/migrations/dropdown-signals/index.js +19 -0
- package/schematics/migrations/dropdown-signals/schema.json +20 -0
- package/schematics/migrations/empty-state-error-color/README.md +84 -0
- package/schematics/migrations/empty-state-error-color/data.js +85 -0
- package/schematics/migrations/empty-state-error-color/index.js +71 -0
- package/schematics/migrations/empty-state-error-color/schema.json +15 -0
- package/schematics/migrations/empty-state-size-attr/README.md +2 -2
- package/schematics/migrations/empty-state-size-attr/index.js +1 -1
- package/schematics/migrations/file-upload-cva-and-primitives/README.md +70 -0
- package/schematics/migrations/file-upload-cva-and-primitives/data.js +97 -0
- package/schematics/migrations/file-upload-cva-and-primitives/index.js +60 -0
- package/schematics/migrations/file-upload-cva-and-primitives/schema.json +15 -0
- package/schematics/migrations/file-upload-deprecated-outputs/README.md +90 -0
- package/schematics/migrations/file-upload-deprecated-outputs/data.js +20 -0
- package/schematics/migrations/file-upload-deprecated-outputs/index.js +70 -0
- package/schematics/migrations/file-upload-deprecated-outputs/schema.json +20 -0
- package/schematics/migrations/filter-bar-rename-action/README.md +183 -0
- package/schematics/migrations/filter-bar-rename-action/data.js +151 -0
- package/schematics/migrations/filter-bar-rename-action/index.js +177 -0
- package/schematics/migrations/filter-bar-rename-action/schema.json +20 -0
- package/schematics/migrations/filter-bar-signals/README.md +27 -16
- package/schematics/migrations/filter-bar-signals/data.js +1 -2
- package/schematics/migrations/filter-bar-signals/index.js +100 -195
- package/schematics/migrations/filter-bar-state-saving-default/README.md +53 -0
- package/schematics/migrations/filter-bar-state-saving-default/data.js +87 -0
- package/schematics/migrations/filter-bar-state-saving-default/index.js +61 -0
- package/schematics/migrations/filter-bar-state-saving-default/schema.json +15 -0
- package/schematics/migrations/flag-inner-html/README.md +67 -0
- package/schematics/migrations/flag-inner-html/data.js +58 -0
- package/schematics/migrations/flag-inner-html/index.js +61 -0
- package/schematics/migrations/flag-inner-html/schema.json +15 -0
- package/schematics/migrations/form-field-signals/README.md +125 -0
- package/schematics/migrations/form-field-signals/data.js +288 -0
- package/schematics/migrations/form-field-signals/index.js +382 -0
- package/schematics/migrations/form-field-signals/schema.json +20 -0
- package/schematics/migrations/icon-semantics-and-api/README.md +65 -0
- package/schematics/migrations/icon-semantics-and-api/data.js +97 -0
- package/schematics/migrations/icon-semantics-and-api/index.js +64 -0
- package/schematics/migrations/icon-semantics-and-api/schema.json +15 -0
- package/schematics/migrations/icons-replacement/README.md +5 -5
- package/schematics/migrations/icons-replacement/index.js +1 -1
- package/schematics/migrations/inline-edit-a11y-and-types/README.md +82 -0
- package/schematics/migrations/inline-edit-a11y-and-types/data.js +117 -0
- package/schematics/migrations/inline-edit-a11y-and-types/index.js +97 -0
- package/schematics/migrations/inline-edit-a11y-and-types/schema.json +20 -0
- package/schematics/migrations/input-number-surface/README.md +140 -0
- package/schematics/migrations/input-number-surface/data.js +135 -0
- package/schematics/migrations/input-number-surface/index.js +292 -0
- package/schematics/migrations/input-number-surface/schema.json +20 -0
- package/schematics/migrations/input-signals/README.md +20 -0
- package/schematics/migrations/input-signals/data.js +30 -0
- package/schematics/migrations/input-signals/index.js +17 -0
- package/schematics/migrations/input-signals/schema.json +15 -0
- package/schematics/migrations/link-deprecated-path/README.md +144 -0
- package/schematics/migrations/link-deprecated-path/index.js +19 -0
- package/schematics/migrations/link-deprecated-path/schema.json +20 -0
- package/schematics/migrations/link-signals/README.md +71 -0
- package/schematics/migrations/link-signals/data.js +116 -0
- package/schematics/migrations/link-signals/index.js +415 -0
- package/schematics/migrations/link-signals/schema.json +20 -0
- package/schematics/migrations/list-signals/README.md +22 -0
- package/schematics/migrations/list-signals/data.js +35 -0
- package/schematics/migrations/list-signals/index.js +17 -0
- package/schematics/migrations/list-signals/schema.json +15 -0
- package/schematics/migrations/list-tree-multiple-input/README.md +105 -0
- package/schematics/migrations/list-tree-multiple-input/data.js +74 -0
- package/schematics/migrations/list-tree-multiple-input/index.js +221 -0
- package/schematics/migrations/list-tree-multiple-input/schema.json +20 -0
- package/schematics/migrations/loader-overlay-signals/README.md +62 -0
- package/schematics/migrations/loader-overlay-signals/data.js +101 -0
- package/schematics/migrations/loader-overlay-signals/index.js +697 -0
- package/schematics/migrations/loader-overlay-signals/schema.json +20 -0
- package/schematics/migrations/loader-overlay-size-attr/README.md +2 -2
- package/schematics/migrations/loader-overlay-size-attr/index.js +1 -1
- package/schematics/migrations/locale-configuration-providers/README.md +163 -0
- package/schematics/migrations/locale-configuration-providers/data.js +257 -0
- package/schematics/migrations/locale-configuration-providers/index.js +294 -0
- package/schematics/migrations/locale-configuration-providers/schema.json +20 -0
- package/schematics/migrations/mandatory-peer-dependencies/README.md +70 -0
- package/schematics/migrations/mandatory-peer-dependencies/index.js +42 -0
- package/schematics/migrations/mandatory-peer-dependencies/schema.json +15 -0
- package/schematics/migrations/markdown-signals/README.md +58 -0
- package/schematics/migrations/markdown-signals/data.js +79 -0
- package/schematics/migrations/markdown-signals/index.js +639 -0
- package/schematics/migrations/markdown-signals/schema.json +20 -0
- package/schematics/migrations/modal-dialog-semantics/README.md +106 -0
- package/schematics/migrations/modal-dialog-semantics/data.js +110 -0
- package/schematics/migrations/modal-dialog-semantics/index.js +58 -0
- package/schematics/migrations/modal-dialog-semantics/schema.json +15 -0
- package/schematics/migrations/modal-signals/README.md +88 -0
- package/schematics/migrations/modal-signals/data.js +132 -0
- package/schematics/migrations/modal-signals/index.js +19 -0
- package/schematics/migrations/modal-signals/schema.json +20 -0
- package/schematics/migrations/navbar-signals-and-aria/README.md +111 -0
- package/schematics/migrations/navbar-signals-and-aria/data.js +198 -0
- package/schematics/migrations/navbar-signals-and-aria/index.js +568 -0
- package/schematics/migrations/navbar-signals-and-aria/schema.json +20 -0
- package/schematics/migrations/new-icons-pack/README.md +10 -10
- package/schematics/migrations/new-icons-pack/index.js +1 -1
- package/schematics/migrations/notification-center-signals/README.md +67 -0
- package/schematics/migrations/notification-center-signals/data.js +66 -0
- package/schematics/migrations/notification-center-signals/index.js +61 -0
- package/schematics/migrations/notification-center-signals/schema.json +15 -0
- package/schematics/migrations/option-signals/README.md +37 -0
- package/schematics/migrations/option-signals/data.js +86 -0
- package/schematics/migrations/option-signals/index.js +19 -0
- package/schematics/migrations/option-signals/schema.json +20 -0
- package/schematics/migrations/popover-leave-delay/README.md +51 -0
- package/schematics/migrations/popover-leave-delay/data.js +61 -0
- package/schematics/migrations/popover-leave-delay/index.js +54 -0
- package/schematics/migrations/popover-leave-delay/schema.json +15 -0
- package/schematics/migrations/progress-bar-percentage-and-aria/README.md +54 -0
- package/schematics/migrations/progress-bar-percentage-and-aria/data.js +76 -0
- package/schematics/migrations/progress-bar-percentage-and-aria/index.js +58 -0
- package/schematics/migrations/progress-bar-percentage-and-aria/schema.json +15 -0
- package/schematics/migrations/progress-spinner-signals/README.md +72 -0
- package/schematics/migrations/progress-spinner-signals/data.js +83 -0
- package/schematics/migrations/progress-spinner-signals/index.js +694 -0
- package/schematics/migrations/progress-spinner-signals/schema.json +20 -0
- package/schematics/migrations/query-list-signals/README.md +32 -0
- package/schematics/migrations/query-list-signals/data.js +70 -0
- package/schematics/migrations/query-list-signals/index.js +17 -0
- package/schematics/migrations/query-list-signals/schema.json +15 -0
- package/schematics/migrations/radio-signals-and-aria/README.md +82 -0
- package/schematics/migrations/radio-signals-and-aria/data.js +163 -0
- package/schematics/migrations/radio-signals-and-aria/index.js +39 -0
- package/schematics/migrations/radio-signals-and-aria/schema.json +20 -0
- package/schematics/migrations/read-state-dwell-handlers/README.md +125 -0
- package/schematics/migrations/read-state-dwell-handlers/data.js +45 -0
- package/schematics/migrations/read-state-dwell-handlers/index.js +215 -0
- package/schematics/migrations/read-state-dwell-handlers/schema.json +20 -0
- package/schematics/migrations/scrollbar-deprecated-path/README.md +128 -0
- package/schematics/migrations/scrollbar-deprecated-path/index.js +20 -0
- package/schematics/migrations/scrollbar-deprecated-path/schema.json +20 -0
- package/schematics/migrations/select-signal-inputs/README.md +61 -0
- package/schematics/migrations/select-signal-inputs/data.js +99 -0
- package/schematics/migrations/select-signal-inputs/index.js +57 -0
- package/schematics/migrations/select-signal-inputs/schema.json +15 -0
- package/schematics/migrations/sidepanel-non-modal-behavior/README.md +57 -0
- package/schematics/migrations/sidepanel-non-modal-behavior/data.js +111 -0
- package/schematics/migrations/sidepanel-non-modal-behavior/index.js +57 -0
- package/schematics/migrations/sidepanel-non-modal-behavior/schema.json +15 -0
- package/schematics/migrations/signal-inputs-subclasses/README.md +28 -0
- package/schematics/migrations/signal-inputs-subclasses/data.js +69 -0
- package/schematics/migrations/signal-inputs-subclasses/index.js +17 -0
- package/schematics/migrations/signal-inputs-subclasses/schema.json +15 -0
- package/schematics/migrations/split-button-optional-disabled/README.md +47 -0
- package/schematics/migrations/split-button-optional-disabled/data.js +53 -0
- package/schematics/migrations/split-button-optional-disabled/index.js +57 -0
- package/schematics/migrations/split-button-optional-disabled/schema.json +15 -0
- package/schematics/migrations/splitter-deprecated-path/README.md +136 -0
- package/schematics/migrations/splitter-deprecated-path/index.js +20 -0
- package/schematics/migrations/splitter-deprecated-path/schema.json +20 -0
- package/schematics/migrations/state-saving-default/README.md +67 -0
- package/schematics/migrations/state-saving-default/data.js +88 -0
- package/schematics/migrations/state-saving-default/index.js +62 -0
- package/schematics/migrations/state-saving-default/schema.json +15 -0
- package/schematics/migrations/table-cell-content/README.md +55 -0
- package/schematics/migrations/table-cell-content/data.js +66 -0
- package/schematics/migrations/table-cell-content/index.js +66 -0
- package/schematics/migrations/table-cell-content/schema.json +15 -0
- package/schematics/migrations/tabs-signals-and-aria/README.md +93 -0
- package/schematics/migrations/tabs-signals-and-aria/data.js +139 -0
- package/schematics/migrations/tabs-signals-and-aria/index.js +65 -0
- package/schematics/migrations/tabs-signals-and-aria/schema.json +15 -0
- package/schematics/migrations/tag-list-cleaner/README.md +58 -0
- package/schematics/migrations/tag-list-cleaner/data.js +42 -0
- package/schematics/migrations/tag-list-cleaner/index.js +196 -0
- package/schematics/migrations/tag-list-cleaner/schema.json +20 -0
- package/schematics/migrations/tag-slots/README.md +41 -0
- package/schematics/migrations/tag-slots/index.js +190 -0
- package/schematics/migrations/tag-slots/schema.json +20 -0
- package/schematics/migrations/tags-signals/README.md +85 -0
- package/schematics/migrations/tags-signals/data.js +103 -0
- package/schematics/migrations/tags-signals/index.js +673 -0
- package/schematics/migrations/tags-signals/schema.json +20 -0
- package/schematics/migrations/textarea-signals/README.md +72 -0
- package/schematics/migrations/textarea-signals/data.js +121 -0
- package/schematics/migrations/textarea-signals/index.js +379 -0
- package/schematics/migrations/textarea-signals/schema.json +20 -0
- package/schematics/migrations/time-range-title-for/README.md +164 -0
- package/schematics/migrations/time-range-title-for/data.js +139 -0
- package/schematics/migrations/time-range-title-for/index.js +163 -0
- package/schematics/migrations/time-range-title-for/schema.json +20 -0
- package/schematics/migrations/timepicker-signals/README.md +78 -0
- package/schematics/migrations/timepicker-signals/data.js +82 -0
- package/schematics/migrations/timepicker-signals/index.js +709 -0
- package/schematics/migrations/timepicker-signals/schema.json +20 -0
- package/schematics/migrations/timezone-grouping-utils/README.md +73 -0
- package/schematics/migrations/timezone-grouping-utils/data.js +101 -0
- package/schematics/migrations/timezone-grouping-utils/index.js +64 -0
- package/schematics/migrations/timezone-grouping-utils/schema.json +15 -0
- package/schematics/migrations/title-encapsulation/README.md +49 -0
- package/schematics/migrations/title-encapsulation/data.js +69 -0
- package/schematics/migrations/title-encapsulation/index.js +57 -0
- package/schematics/migrations/title-encapsulation/schema.json +15 -0
- package/schematics/migrations/toast-stack-and-defaults/README.md +102 -0
- package/schematics/migrations/toast-stack-and-defaults/data.js +79 -0
- package/schematics/migrations/toast-stack-and-defaults/index.js +53 -0
- package/schematics/migrations/toast-stack-and-defaults/schema.json +15 -0
- package/schematics/migrations/tooltip-pointer-events-and-types/README.md +53 -0
- package/schematics/migrations/tooltip-pointer-events-and-types/data.js +89 -0
- package/schematics/migrations/tooltip-pointer-events-and-types/index.js +60 -0
- package/schematics/migrations/tooltip-pointer-events-and-types/schema.json +15 -0
- package/schematics/migrations/top-bar-container-selectors/README.md +111 -0
- package/schematics/migrations/top-bar-container-selectors/data.js +56 -0
- package/schematics/migrations/top-bar-container-selectors/index.js +84 -0
- package/schematics/migrations/top-bar-container-selectors/schema.json +20 -0
- package/schematics/migrations/tree-select-signals/README.md +61 -0
- package/schematics/migrations/tree-select-signals/data.js +106 -0
- package/schematics/migrations/tree-select-signals/index.js +58 -0
- package/schematics/migrations/tree-select-signals/schema.json +15 -0
- package/schematics/migrations/tree-signals/README.md +82 -0
- package/schematics/migrations/tree-signals/data.js +123 -0
- package/schematics/migrations/tree-signals/index.js +54 -0
- package/schematics/migrations/tree-signals/schema.json +15 -0
- package/schematics/migrations/tree-state-saving-default/README.md +66 -0
- package/schematics/migrations/tree-state-saving-default/data.js +78 -0
- package/schematics/migrations/tree-state-saving-default/index.js +60 -0
- package/schematics/migrations/tree-state-saving-default/schema.json +15 -0
- package/schematics/migrations/username-pipe-injection/README.md +59 -0
- package/schematics/migrations/username-pipe-injection/data.js +78 -0
- package/schematics/migrations/username-pipe-injection/index.js +58 -0
- package/schematics/migrations/username-pipe-injection/schema.json +15 -0
- package/schematics/migrations/v20-upgrade/README.md +36 -16
- package/schematics/migrations/v20-upgrade/data.js +124 -77
- package/schematics/migrations/v20-upgrade/index.js +6 -213
- package/schematics/migrations/v21-upgrade/README.md +271 -0
- package/schematics/migrations/v21-upgrade/data.js +1371 -0
- package/schematics/migrations/v21-upgrade/index.js +94 -0
- package/schematics/migrations/v21-upgrade/schema.json +20 -0
- package/schematics/migrations/zoneless-change-detection/README.md +30 -0
- package/schematics/migrations/zoneless-change-detection/data.js +29 -0
- package/schematics/migrations/zoneless-change-detection/index.js +20 -0
- package/schematics/migrations/zoneless-change-detection/schema.json +15 -0
- package/schematics/migrations.json +392 -2
- package/schematics/ng-add/index.js +515 -14
- package/schematics/ng-add/schema.json +15 -0
- package/schematics/utils/deprecated-path-migration.js +61 -0
- package/schematics/utils/package-config.js +9 -105
- package/scrollbar/{_scrollbar-component-theme.scss → deprecated/_scrollbar-component-theme.scss} +1 -1
- package/scrollbar/{scrollbar.component.scss → deprecated/scrollbar.component.scss} +1 -1
- package/scrollbar/native-scrollbar.scss +68 -0
- package/scrollbar/scrollbar-tokens.scss +13 -22
- package/scrollbar/scrollbar-track.scss +94 -0
- package/scrollbar/scrollbar-viewport.scss +33 -0
- package/scrollbar/scrollbar.scss +24 -0
- package/search-expandable/search-expandable-tokens.scss +4 -0
- package/search-expandable/search-expandable.scss +4 -2
- package/select/_select-theme.scss +3 -16
- package/select/select.scss +0 -6
- package/sidebar/sidebar.scss +20 -0
- package/sidepanel/_sidepanel-theme.scss +1 -1
- package/sidepanel/sidepanel-tokens.scss +7 -1
- package/sidepanel/sidepanel.scss +41 -5
- package/skeleton/skeleton-presets.scss +350 -0
- package/skeleton/skeleton-tokens.scss +127 -0
- package/skeleton/skeleton.scss +53 -45
- package/split-button/_split-button-theme.scss +4 -4
- package/split-button/split-button.scss +2 -6
- package/splitter/{_splitter-theme.scss → deprecated/_splitter-theme.scss} +1 -1
- package/splitter/deprecated/splitter.scss +51 -0
- package/splitter/splitter-tokens.scss +19 -0
- package/splitter/splitter.scss +148 -28
- package/table/_table-theme.scss +13 -12
- package/table/table-tokens.scss +8 -0
- package/table/table.scss +47 -22
- package/tabs/_tabs-common.scss +14 -14
- package/tabs/_tabs-theme.scss +4 -5
- package/tabs/tab-body.scss +49 -1
- package/tabs/tab-header.scss +2 -1
- package/tags/tag-list.scss +4 -0
- package/tags/tag.scss +19 -1
- package/time-range/time-range.scss +9 -0
- package/timezone/timezone-option.component.scss +4 -7
- package/timezone/timezone-select.component.scss +3 -0
- package/toast/_toast-theme.scss +1 -4
- package/toast/toast-container.component.scss +19 -13
- package/toast/toast-tokens.scss +12 -6
- package/toast/toast.component.scss +42 -19
- package/toggle/_toggle-theme.scss +4 -10
- package/toggle/toggle.scss +67 -26
- package/tooltip/_tooltip-theme.scss +7 -1
- package/tooltip/tooltip-tokens.scss +1 -2
- package/tooltip/tooltip.scss +55 -9
- package/top-bar/top-bar-tokens.scss +13 -2
- package/top-bar/top-bar.scss +24 -19
- package/tree/_tree-theme.scss +0 -1
- package/tree/toggle.scss +5 -9
- package/tree/tree-option.scss +2 -4
- package/tree/tree-tokens.scss +2 -1
- package/tree/tree.scss +3 -5
- package/tree-select/_tree-select-theme.scss +4 -15
- package/tree-select/tree-select-tokens.scss +16 -0
- package/tree-select/tree-select.scss +0 -6
- package/{accordion/index.d.ts → types/koobiq-components-accordion.d.ts} +102 -84
- package/{actions-panel/index.d.ts → types/koobiq-components-actions-panel.d.ts} +44 -59
- package/{alert/index.d.ts → types/koobiq-components-alert.d.ts} +8 -3
- package/types/koobiq-components-app-switcher.d.ts +406 -0
- package/types/koobiq-components-autocomplete.d.ts +443 -0
- package/{badge/index.d.ts → types/koobiq-components-badge.d.ts} +25 -20
- package/{breadcrumbs/index.d.ts → types/koobiq-components-breadcrumbs.d.ts} +97 -46
- package/types/koobiq-components-button-toggle.d.ts +340 -0
- package/types/koobiq-components-button.d.ts +296 -0
- package/types/koobiq-components-checkbox.d.ts +172 -0
- package/types/koobiq-components-clamped-text.d.ts +184 -0
- package/{code-block/index.d.ts → types/koobiq-components-code-block.d.ts} +114 -79
- package/{content-panel/index.d.ts → types/koobiq-components-content-panel.d.ts} +81 -25
- package/{core/index.d.ts → types/koobiq-components-core.d.ts} +2827 -865
- package/{datepicker/index.d.ts → types/koobiq-components-datepicker.d.ts} +161 -116
- package/types/koobiq-components-divider.d.ts +43 -0
- package/types/koobiq-components-dl.d.ts +235 -0
- package/{dropdown/index.d.ts → types/koobiq-components-dropdown.d.ts} +245 -239
- package/types/koobiq-components-ellipsis-center.d.ts +85 -0
- package/types/koobiq-components-empty-state.d.ts +106 -0
- package/{file-upload/index.d.ts → types/koobiq-components-file-upload.d.ts} +214 -107
- package/{filter-bar/index.d.ts → types/koobiq-components-filter-bar.d.ts} +410 -495
- package/types/koobiq-components-flag.d.ts +68 -0
- package/{form-field/index.d.ts → types/koobiq-components-form-field.d.ts} +167 -191
- package/types/koobiq-components-icon.d.ts +333 -0
- package/{inline-edit/index.d.ts → types/koobiq-components-inline-edit.d.ts} +109 -46
- package/types/koobiq-components-input.d.ts +477 -0
- package/types/koobiq-components-link-deprecated.d.ts +101 -0
- package/types/koobiq-components-link.d.ts +176 -0
- package/{list/index.d.ts → types/koobiq-components-list.d.ts} +162 -99
- package/types/koobiq-components-loader-overlay.d.ts +101 -0
- package/{markdown/index.d.ts → types/koobiq-components-markdown.d.ts} +16 -24
- package/types/koobiq-components-modal.d.ts +666 -0
- package/types/koobiq-components-navbar.d.ts +569 -0
- package/types/koobiq-components-notification-center.d.ts +500 -0
- package/{overflow-items/index.d.ts → types/koobiq-components-overflow-items.d.ts} +8 -22
- package/types/koobiq-components-popover.d.ts +468 -0
- package/types/koobiq-components-progress-bar.d.ts +67 -0
- package/{progress-spinner/index.d.ts → types/koobiq-components-progress-spinner.d.ts} +33 -10
- package/types/koobiq-components-radio.d.ts +294 -0
- package/{resizer/index.d.ts → types/koobiq-components-resizer.d.ts} +37 -2
- package/{scrollbar/index.d.ts → types/koobiq-components-scrollbar-deprecated.d.ts} +18 -1
- package/types/koobiq-components-scrollbar.d.ts +154 -0
- package/types/koobiq-components-search-expandable.d.ts +164 -0
- package/{select/index.d.ts → types/koobiq-components-select.d.ts} +360 -167
- package/types/koobiq-components-sidebar.d.ts +152 -0
- package/types/koobiq-components-sidepanel.d.ts +436 -0
- package/types/koobiq-components-skeleton.d.ts +234 -0
- package/types/koobiq-components-split-button.d.ts +65 -0
- package/{splitter/index.d.ts → types/koobiq-components-splitter-deprecated.d.ts} +44 -1
- package/types/koobiq-components-splitter.d.ts +406 -0
- package/types/koobiq-components-table.d.ts +44 -0
- package/types/koobiq-components-tabs.d.ts +888 -0
- package/{tags/index.d.ts → types/koobiq-components-tags.d.ts} +249 -133
- package/types/koobiq-components-textarea.d.ts +178 -0
- package/{time-range/index.d.ts → types/koobiq-components-time-range.d.ts} +135 -62
- package/types/koobiq-components-timepicker.d.ts +223 -0
- package/types/koobiq-components-timezone.d.ts +266 -0
- package/types/koobiq-components-title.d.ts +184 -0
- package/types/koobiq-components-toast.d.ts +289 -0
- package/types/koobiq-components-toggle.d.ts +121 -0
- package/types/koobiq-components-tooltip.d.ts +610 -0
- package/types/koobiq-components-top-bar.d.ts +61 -0
- package/types/koobiq-components-tree-select.d.ts +667 -0
- package/types/koobiq-components-tree.d.ts +1290 -0
- package/types/koobiq-components-username.d.ts +340 -0
- package/username/_username-theme.scss +35 -0
- package/username/username.scss +10 -34
- package/app-switcher/index.d.ts +0 -276
- package/autocomplete/index.d.ts +0 -286
- package/button/index.d.ts +0 -153
- package/button-toggle/index.d.ts +0 -162
- package/checkbox/index.d.ts +0 -163
- package/clamped-text/index.d.ts +0 -146
- package/core/styles/_tokens.scss +0 -7
- package/core/styles/common/_clearfix.scss +0 -13
- package/core/styles/common/_popup.scss +0 -6
- package/core/styles/functions/_index.scss +0 -3
- package/core/styles/functions/_number.scss +0 -60
- package/core/styles/functions/_string.scss +0 -18
- package/core/styles/theming/scrollbar-tokens.scss +0 -25
- package/core/styles/typography/_typography-utils.scss +0 -84
- package/divider/index.d.ts +0 -20
- package/dl/index.d.ts +0 -45
- package/ellipsis-center/index.d.ts +0 -71
- package/empty-state/index.d.ts +0 -45
- package/flag/index.d.ts +0 -44
- package/icon/index.d.ts +0 -200
- package/input/index.d.ts +0 -354
- package/link/index.d.ts +0 -56
- package/loader-overlay/index.d.ts +0 -57
- package/modal/index.d.ts +0 -339
- package/navbar/index.d.ts +0 -372
- package/notification-center/index.d.ts +0 -323
- package/popover/index.d.ts +0 -182
- package/prebuilt-themes/dark-theme.css +0 -1
- package/prebuilt-themes/light-theme.css +0 -1
- package/progress-bar/index.d.ts +0 -31
- package/radio/index.d.ts +0 -203
- package/search-expandable/index.d.ts +0 -101
- package/sidebar/index.d.ts +0 -94
- package/sidepanel/index.d.ts +0 -272
- package/skeleton/index.d.ts +0 -26
- package/split-button/index.d.ts +0 -46
- package/table/index.d.ts +0 -25
- package/tabs/index.d.ts +0 -677
- package/textarea/index.d.ts +0 -138
- package/timepicker/index.d.ts +0 -197
- package/timezone/index.d.ts +0 -125
- package/title/index.d.ts +0 -139
- package/toast/index.d.ts +0 -178
- package/toggle/index.d.ts +0 -104
- package/tooltip/index.d.ts +0 -335
- package/top-bar/index.d.ts +0 -33
- package/tree/index.d.ts +0 -802
- package/tree-select/index.d.ts +0 -475
- package/username/index.d.ts +0 -194
- /package/{dynamic-translation/index.d.ts → types/koobiq-components-dynamic-translation.d.ts} +0 -0
- /package/{index.d.ts → types/koobiq-components.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"koobiq-components-tree.mjs","sources":["../../../packages/components/tree/control/base-tree-control.ts","../../../packages/components/tree/control/flat-tree-control.filters.ts","../../../packages/components/tree/control/flat-tree-control.ts","../../../packages/components/tree/control/nested-tree-control.ts","../../../packages/components/tree/data-source/flat-data-source.ts","../../../packages/components/tree/data-source/nested-data-source.ts","../../../packages/components/tree/node.ts","../../../packages/components/tree/outlet.ts","../../../packages/components/tree/tree-errors.ts","../../../packages/components/tree/tree-base.ts","../../../packages/components/tree/toggle.ts","../../../packages/components/tree/tree-option.component.ts","../../../packages/components/tree/tree-option.html","../../../packages/components/tree/padding.directive.ts","../../../packages/components/tree/tree.ts","../../../packages/components/tree/tree-selection.component.ts","../../../packages/components/tree/tree.module.ts","../../../packages/components/tree/koobiq-components-tree.ts"],"sourcesContent":["import { SelectionModel } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { TreeControl } from './tree-control';\n\n/** Base tree control. It has basic toggle/expand/collapse operations on a single data node. */\nexport abstract class BaseTreeControl<T> implements TreeControl<T> {\n dataNodes: T[];\n\n /** A selection model with multi-selection to track expansion status. */\n expansionModel: SelectionModel<T> = new SelectionModel<T>(true);\n\n filterModel: SelectionModel<T> = new SelectionModel<T>(true);\n\n filterValue = new BehaviorSubject<T[] | string | null>('');\n\n /** Get depth of a given data node, return the level number. This is for flat tree node. */\n getLevel: (dataNode: T) => number;\n\n /**\n * Whether the data node is expandable. Returns true if expandable.\n * This is for flat tree node.\n */\n isExpandable: (dataNode: T) => boolean;\n\n /** Gets a stream that emits whenever the given data node's children change. */\n getChildren: (dataNode: T) => Observable<T[]>;\n\n /** Gets a list of descendent data nodes of a subtree rooted at given data node recursively. */\n abstract getDescendants(dataNode: T): T[];\n\n /** Expands all data nodes in the tree. */\n abstract expandAll(): void;\n\n /** Toggles one single data node's expanded/collapsed state. */\n toggle(dataNode: T): void {\n if (this.filterValue.value?.length) {\n return;\n }\n\n this.expansionModel.toggle(dataNode);\n }\n\n /** Expands one single data node. */\n expand(dataNode: T): void {\n if (this.filterValue.value?.length) {\n return;\n }\n\n this.expansionModel.select(dataNode);\n }\n\n /** Collapses one single data node. */\n collapse(dataNode: T): void {\n if (this.filterValue.value?.length) {\n return;\n }\n\n this.expansionModel.deselect(dataNode);\n }\n\n /** Whether a given data node is expanded or not. Returns true if the data node is expanded. */\n isExpanded(dataNode: T): boolean {\n return this.expansionModel.isSelected(dataNode);\n }\n\n /** Toggles a subtree rooted at `node` recursively. */\n toggleDescendants(dataNode: T): void {\n if (this.expansionModel.isSelected(dataNode)) {\n this.collapseDescendants(dataNode);\n } else {\n this.expandDescendants(dataNode);\n }\n }\n\n /** Collapse all dataNodes in the tree. */\n collapseAll(): void {\n this.expansionModel.clear();\n }\n\n /** Expands a subtree rooted at given data node recursively. */\n expandDescendants(dataNode: T): void {\n const toBeProcessed = [dataNode];\n\n toBeProcessed.push(...this.getDescendants(dataNode));\n this.expansionModel.select(...toBeProcessed);\n }\n\n /** Collapses a subtree rooted at given data node recursively. */\n collapseDescendants(dataNode: T): void {\n const toBeProcessed = [dataNode];\n\n toBeProcessed.push(...this.getDescendants(dataNode));\n this.expansionModel.deselect(...toBeProcessed);\n }\n}\n","import { FlatTreeControl } from './flat-tree-control';\n\nexport const kbqTreeSelectAllValue = 'selectAll';\n\nexport interface FlatTreeControlFilter<T> {\n result: T[];\n\n handle(value: string | null, prevFilter?: FlatTreeControlFilter<T> | null): T[];\n}\n\nexport class FilterByViewValue<T> implements FlatTreeControlFilter<T> {\n result: T[];\n\n constructor(private control: FlatTreeControl<T>) {}\n\n handle(value: string | null): T[] {\n const viewValue = value || null;\n\n this.result = this.control.dataNodes.filter((node) => {\n if (node['value'] === kbqTreeSelectAllValue) return true;\n\n return this.control.compareViewValues(this.control.getViewValue(node), viewValue);\n });\n\n if (this.result.length === 1 && this.result[0]['value'] === kbqTreeSelectAllValue) {\n this.result.pop();\n }\n\n return this.result;\n }\n}\n\nexport class FilterParentsForNodes<T> implements FlatTreeControlFilter<T> {\n result: T[];\n\n constructor(private control: FlatTreeControl<T>) {}\n\n handle(_, prevFilter: FlatTreeControlFilter<T>): T[] {\n const result: Set<T> = new Set();\n\n this.control.dataNodes\n .filter((node) => prevFilter?.result.includes(node))\n .forEach((node) => {\n this.control.getParents(node, []).forEach((parent) => result.add(parent));\n\n result.add(node);\n });\n\n this.result = Array.from(result);\n\n return this.result;\n }\n}\n\nexport class FilterByValues<T> implements FlatTreeControlFilter<T> {\n result: T[];\n\n private values: string[] = [];\n\n constructor(private control: FlatTreeControl<T>) {}\n\n handle(_, prevFilter?: FlatTreeControlFilter<T>): T[] {\n const found = this.control.dataNodes.filter((node) => this.values.includes(this.control.getValue(node)));\n\n this.result = Array.from(new Set([...(prevFilter?.result || []), ...found]));\n\n return this.result;\n }\n\n setValues = (values: string[]) => {\n this.values = values;\n };\n\n getValues(): string[] {\n return this.values;\n }\n}\n","import { escapeRegExp } from '@koobiq/components/core';\nimport { BaseTreeControl } from './base-tree-control';\nimport { FilterByViewValue, FilterParentsForNodes, FlatTreeControlFilter } from './flat-tree-control.filters';\n\nexport function defaultCompareValues(firstValue: string, secondValue: string): boolean {\n return firstValue === secondValue;\n}\n\nexport function defaultCompareViewValues(firstViewValue: string, secondViewValue: string): boolean {\n return RegExp(escapeRegExp(secondViewValue), 'gi').test(firstViewValue);\n}\n\n/** Flat tree control. Able to expand/collapse a subtree recursively for flattened tree. */\nexport class FlatTreeControl<T> extends BaseTreeControl<T> {\n expandedItemsBeforeFiltration: T[];\n\n private filters: FlatTreeControlFilter<T>[];\n\n /** Construct with flat tree data node functions getLevel, isExpandable, getValue and getViewValue. */\n constructor(\n public getLevel: (dataNode: T) => number,\n public isExpandable: (dataNode: T) => boolean,\n /** getValue will be used to determine if the tree contains value or not. Used in method hasValue */\n public getValue: (dataNode: T) => any,\n /** getViewValue will be used for filter nodes. Returned value will be first argument in filterNodesFunction */\n public getViewValue: (dataNode: T) => string,\n /** compareValues will be used to comparing values. */\n public compareValues: (firstValue, secondValue) => boolean = defaultCompareValues,\n /** compareValues will be used to comparing values. */\n public compareViewValues: (firstViewValue, secondViewValue) => boolean = defaultCompareViewValues,\n /** isDisabled will be used to determine if the node is disabled. */\n public isDisabled: (dataNode: T) => boolean = () => false\n ) {\n super();\n\n this.setFilters(new FilterByViewValue<T>(this), new FilterParentsForNodes<T>(this));\n }\n\n getFilters(): FlatTreeControlFilter<T>[] {\n return this.filters;\n }\n\n setFilters(...filters: FlatTreeControlFilter<T>[]) {\n this.filters = filters;\n }\n\n /**\n * Gets a list of the data node's subtree of descendent data nodes.\n *\n * To make this working, the `dataNodes` of the TreeControl must be flattened tree nodes\n * with correct levels.\n */\n getDescendants(dataNode: T): T[] {\n const startIndex = this.dataNodes.indexOf(dataNode);\n const results: T[] = [];\n\n // Goes through flattened tree nodes in the `dataNodes` array, and get all descendants.\n // The level of descendants of a tree node must be greater than the level of the given\n // tree node.\n // If we reach a node whose level is equal to the level of the tree node, we hit a sibling.\n // If we reach a node whose level is greater than the level of the tree node, we hit a\n // sibling of an ancestor.\n for (\n let i = startIndex + 1;\n i < this.dataNodes.length && this.getLevel(dataNode) < this.getLevel(this.dataNodes[i]);\n i++\n ) {\n results.push(this.dataNodes[i]);\n }\n\n return results;\n }\n\n /**\n * Expands all data nodes in the tree.\n *\n * To make this working, the `dataNodes` variable of the TreeControl must be set to all flattened\n * data nodes of the tree.\n */\n expandAll(): void {\n this.expansionModel.select(...this.dataNodes);\n }\n\n getParents(node: any, result: T[]): T[] {\n if (node.parent) {\n result.unshift(node.parent);\n\n return this.getParents(node.parent, result);\n } else {\n return result;\n }\n }\n\n hasValue(value: string): T | undefined {\n return this.dataNodes?.find((node: any) => this.compareValues(this.getValue(node), value));\n }\n\n filterNodes(value: string | null = null): void {\n this.saveExpansionState();\n\n let result: T[] = [];\n\n this.filters.forEach((filter, index, filters) => {\n const prevFilter = filters[index - 1] || null;\n\n result = filter.handle(value, prevFilter);\n });\n\n this.filterModel.clear();\n this.filterModel.select(...result);\n\n // set current expansion state according to filtered tree\n this.expansionModel.setSelection(...result.filter((node) => this.isExpandable(node)));\n\n this.updateFilterValue(value || result);\n\n Promise.resolve().then(() => this.restoreExpansionState());\n }\n\n private updateFilterValue(value: T[] | string | null) {\n Promise.resolve().then(() => this.filterValue.next(value));\n }\n\n private saveExpansionState() {\n if (!this.filterValue.value?.length) {\n this.expandedItemsBeforeFiltration = this.expansionModel.selected;\n }\n }\n\n private restoreExpansionState() {\n if (!this.filterValue.value?.length) {\n this.expansionModel.setSelection(...this.expandedItemsBeforeFiltration);\n }\n }\n}\n","import { Observable } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { BaseTreeControl } from './base-tree-control';\n\n/** Nested tree control. Able to expand/collapse a subtree recursively for NestedNode type. */\nexport class NestedTreeControl<T> extends BaseTreeControl<T> {\n /** Construct with nested tree function getChildren. */\n constructor(public getChildren: (dataNode: T) => Observable<T[]>) {\n super();\n }\n\n /**\n * Expands all dataNodes in the tree.\n *\n * To make this working, the `dataNodes` variable of the TreeControl must be set to all root level\n * data nodes of the tree.\n */\n expandAll(): void {\n this.expansionModel.clear();\n const allNodes = this.dataNodes.reduce(\n (accumulator: T[], dataNode) => [...accumulator, ...this.getDescendants(dataNode), dataNode],\n []\n );\n\n this.expansionModel.select(...allNodes);\n }\n\n /** Gets a list of descendant dataNodes of a subtree rooted at given data node recursively. */\n getDescendants(dataNode: T): T[] {\n const descendants = [];\n\n this._getDescendants(descendants, dataNode);\n\n return descendants.splice(1);\n }\n\n /** A helper function to get descendants recursively. */\n // todo нужно придумать другое название и понять в чем отличие между getDescendants и _getDescendants\n private _getDescendants(descendants: T[], dataNode: T): void {\n descendants.push(dataNode);\n\n this.getChildren(dataNode)\n .pipe(take(1))\n .subscribe((children) => {\n if (children && children.length > 0) {\n children.forEach((child: T) => this._getDescendants(descendants, child));\n }\n });\n }\n}\n","import { CollectionViewer, DataSource, SelectionChange } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, merge } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { FlatTreeControl } from '../control/flat-tree-control';\nimport { TreeControl } from '../control/tree-control';\n\n/**\n * Tree flattener to convert a normal type of node to node with children & level information.\n * Transform nested nodes of type `T` to flattened nodes of type `F`.\n *\n * For example, the input data of type `T` is nested, and contains its children data:\n * SomeNode: {\n * key: 'Fruits',\n * children: [\n * NodeOne: {\n * key: 'Apple',\n * },\n * NodeTwo: {\n * key: 'Pear',\n * }\n * ]\n * }\n * After flattener flatten the tree, the structure will become\n * SomeNode: {\n * key: 'Fruits',\n * expandable: true,\n * level: 1\n * },\n * NodeOne: {\n * key: 'Apple',\n * expandable: false,\n * level: 2\n * },\n * NodeTwo: {\n * key: 'Pear',\n * expandable: false,\n * level: 2\n * }\n * and the output flattened type is `F` with additional information.\n */\nexport class KbqTreeFlattener<T, F> {\n constructor(\n public transformFunction: (node: T, level: number, parent: F | null) => F,\n public getLevel: (node: F) => number,\n public isExpandable: (node: F) => boolean,\n public getChildren: (node: T) => Observable<T[]> | T[] | undefined | null\n ) {}\n\n flattenNode(node: T, level: number, resultNodes: F[], parent: F | null): F[] {\n const flatNode = this.transformFunction(node, level, parent);\n\n resultNodes.push(flatNode);\n\n if (this.isExpandable(flatNode)) {\n const childrenNodes = this.getChildren(node);\n\n if (childrenNodes) {\n if (Array.isArray(childrenNodes)) {\n this.flattenChildren(childrenNodes, level, resultNodes, flatNode);\n } else {\n childrenNodes.pipe(take(1)).subscribe((children) => {\n this.flattenChildren(children, level, resultNodes, flatNode);\n });\n }\n }\n }\n\n return resultNodes;\n }\n\n flattenChildren(children: T[], level: number, resultNodes: F[], parent: F | null): void {\n children.forEach((child) => {\n this.flattenNode(child, level + 1, resultNodes, parent);\n });\n }\n\n /**\n * Flatten a list of node type T to flattened version of node F.\n * Please note that type T may be nested, and the length of `structuredData` may be different\n * from that of returned list `F[]`.\n */\n flattenNodes(structuredData: T[]): F[] {\n const resultNodes: F[] = [];\n\n structuredData.forEach((node) => this.flattenNode(node, 0, resultNodes, null));\n\n return resultNodes;\n }\n\n /**\n * Expand flattened node with current expansion status.\n * The returned list may have different length.\n */\n expandFlattenedNodes(nodes: F[], treeControl: TreeControl<F>): F[] {\n const results: F[] = [];\n const currentExpand: boolean[] = [];\n\n currentExpand[0] = true;\n\n nodes.forEach((node) => {\n let expand = true;\n\n for (let i = 0; i <= this.getLevel(node); i++) {\n expand = expand && currentExpand[i];\n }\n\n if (expand) {\n results.push(node);\n }\n\n if (this.isExpandable(node)) {\n currentExpand[this.getLevel(node) + 1] = treeControl.isExpanded(node);\n }\n });\n\n return results;\n }\n}\n\nenum KbqTreeDataSourceChangeTypes {\n Expansion = 'expansion',\n Filter = 'filter'\n}\n\n/**\n * Data source for flat tree.\n * The data source need to handle expansion/collapsion of the tree node and change the data feed\n * to `KbqTree`.\n * The nested tree nodes of type `T` are flattened through `MсTreeFlattener`, and converted\n * to type `F` for `KbqTree` to consume.\n */\nexport class KbqTreeFlatDataSource<T, F> extends DataSource<F> {\n flattenedData = new BehaviorSubject<F[]>([]);\n\n expandedData = new BehaviorSubject<F[]>([]);\n\n filteredData = new BehaviorSubject<F[]>([]);\n\n get data() {\n return this._data.value;\n }\n\n set data(value: T[]) {\n this._data.next(value);\n\n this.flattenedData.next(this.treeFlattener.flattenNodes(this.data));\n this.treeControl.dataNodes = this.flattenedData.value;\n }\n\n private _data: BehaviorSubject<T[]>;\n\n constructor(\n private treeControl: FlatTreeControl<F>,\n private treeFlattener: KbqTreeFlattener<T, F>,\n initialData: T[] = []\n ) {\n super();\n\n this._data = new BehaviorSubject<T[]>(initialData);\n }\n\n connect(collectionViewer: CollectionViewer): Observable<F[]> {\n return merge(\n collectionViewer.viewChange,\n this.treeControl.expansionModel.changed.pipe(\n map((value) => ({ type: KbqTreeDataSourceChangeTypes.Expansion, value }))\n ),\n this.treeControl.filterValue.pipe(map((value) => ({ type: KbqTreeDataSourceChangeTypes.Filter, value }))),\n this.flattenedData\n ).pipe(\n map((changeObj: any): any => {\n if (changeObj.type === KbqTreeDataSourceChangeTypes.Filter) {\n if (changeObj.value && changeObj.value.length > 0) {\n return this.filterHandler();\n } else {\n return this.expansionHandler(changeObj.value);\n }\n }\n\n return this.expansionHandler(changeObj.value);\n })\n );\n }\n\n filterHandler(): F[] {\n this.filteredData.next(this.treeControl.filterModel.selected);\n\n return this.filteredData.value;\n }\n\n expansionHandler(_change: SelectionChange<F>): F[] {\n const expandedNodes = this.treeFlattener.expandFlattenedNodes(this.flattenedData.value, this.treeControl);\n\n this.expandedData.next(expandedNodes);\n\n return this.expandedData.value;\n }\n\n disconnect() {\n // no op\n }\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, merge } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * Data source for nested tree.\n *\n * The data source for nested tree doesn't have to consider node flattener, or the way to expand\n * or collapse. The expansion/collapsion will be handled by TreeControl and each non-leaf node.\n */\nexport class KbqTreeNestedDataSource<T> extends DataSource<T> {\n get data() {\n return this._data.value;\n }\n\n set data(value: T[]) {\n this._data.next(value);\n }\n\n private _data = new BehaviorSubject<T[]>([]);\n\n connect(collectionViewer: CollectionViewer): Observable<T[]> {\n return merge(...[collectionViewer.viewChange, this._data as any]).pipe(map(() => this.data));\n }\n\n disconnect() {\n // no op\n }\n}\n","import { Directive, TemplateRef, inject, input } from '@angular/core';\n\n/** Context provided to the tree node component. */\nexport class KbqTreeNodeOutletContext<T> {\n /** Data for the node. */\n $implicit: T;\n\n /** Depth of the node. */\n level: number;\n\n /** Index location of the node. */\n index?: number;\n\n /** Length of the number of total dataNodes. */\n count?: number;\n\n constructor(data: T) {\n this.$implicit = data;\n }\n}\n\n/**\n * Data node definition for the KbqTree.\n * Captures the node's template and a when predicate that describes when this node should be used.\n */\n@Directive({\n selector: '[kbqTreeNodeDef]',\n inputs: ['when: kbqTreeNodeDefWhen']\n})\nexport class KbqTreeNodeDef<T> {\n template = inject<TemplateRef<any>>(TemplateRef);\n\n readonly data = input<T>(undefined!, { alias: 'kbqTreeNode' });\n\n /**\n * Function that should return true if this node template should be used for the provided node\n * data and index. If left undefined, this node will be considered the default node template to\n * use when no other when functions return true for the data.\n * For every node, there must be at least one when function that passes or an undefined to\n * default.\n */\n when: (index: number, nodeData: T) => boolean;\n\n /** @docs-private */\n}\n","import { ChangeDetectorRef, Directive, ViewContainerRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[kbqTreeNodeOutlet]'\n})\nexport class KbqTreeNodeOutlet {\n viewContainer = inject(ViewContainerRef);\n changeDetectorRef = inject(ChangeDetectorRef);\n}\n","/**\n * Returns an error to be thrown when there is no usable data.\n * @docs-private\n */\nexport function getTreeNoValidDataSourceError() {\n return Error(`A valid data source must be provided.`);\n}\n\n/**\n * Returns an error to be thrown when there are multiple nodes that are missing a when function.\n * @docs-private\n */\nexport function getTreeMultipleDefaultNodeDefsError() {\n return Error(`There can only be one default row without a when predicate function.`);\n}\n\n/**\n * Returns an error to be thrown when there are no matching node defs for a particular set of data.\n * @docs-private\n */\nexport function getTreeMissingMatchingNodeDefError() {\n return Error(`Could not find a matching node definition for the provided node data.`);\n}\n\n/**\n * Returns an error to be thrown when there are tree control.\n * @docs-private\n */\nexport function getTreeControlMissingError() {\n return Error(`Could not find a tree control for the tree.`);\n}\n\n/**\n * Returns an error to be thrown when tree control did not implement functions for flat/nested node.\n * @docs-private\n */\nexport function getTreeControlFunctionsMissingError() {\n return Error(`Could not find functions for nested/flat tree in tree control.`);\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport {\n AfterContentChecked,\n ChangeDetectorRef,\n ContentChildren,\n DestroyRef,\n Directive,\n ElementRef,\n Input,\n IterableChangeRecord,\n IterableDiffer,\n IterableDiffers,\n OnDestroy,\n OnInit,\n QueryList,\n TrackByFunction,\n ViewChild,\n ViewContainerRef,\n inject,\n input\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IFocusableOption } from '@koobiq/components/core';\nimport { BehaviorSubject, Observable, Subject, Subscription, of as observableOf } from 'rxjs';\nimport { TreeControl } from './control/tree-control';\nimport { KbqTreeNodeDef, KbqTreeNodeOutletContext } from './node';\nimport { KbqTreeNodeOutlet } from './outlet';\nimport {\n getTreeControlMissingError,\n getTreeMissingMatchingNodeDefError,\n getTreeMultipleDefaultNodeDefsError,\n getTreeNoValidDataSourceError\n} from './tree-errors';\n\n@Directive()\nexport class KbqTreeBase<T> implements AfterContentChecked, CollectionViewer, OnDestroy, OnInit {\n protected differs = inject(IterableDiffers);\n protected changeDetectorRef = inject(ChangeDetectorRef);\n\n // TODO: Skipped for migration because:\n // Subclass KbqTreeSelection overrides this input with a narrower type\n // (FlatTreeControl<any>) via `@Input() declare`, which is incompatible\n // with InputSignal<TreeControl<T>>. Migrate together as a follow-up.\n @Input() treeControl: TreeControl<T>;\n\n /**\n * Tracking function that will be used to check the differences in data changes. Used similarly\n * to `ngFor` `trackBy` function. Optimize node operations by identifying a node based on its data\n * relative to the function to know if a node should be added/removed/moved.\n * Accepts a function that takes two parameters, `index` and `item`.\n */\n readonly trackBy = input<TrackByFunction<T>>(undefined!);\n\n // Outlets within the tree's template where the dataNodes will be inserted.\n @ViewChild(KbqTreeNodeOutlet, { static: true }) nodeOutlet: KbqTreeNodeOutlet;\n\n /** The tree node template for the tree */\n @ContentChildren(KbqTreeNodeDef) nodeDefs: QueryList<KbqTreeNodeDef<T>>;\n\n // TODO(tinayuangao): Setup a listener for scrolling, emit the calculated view to viewChange.\n // Remove the MAX_VALUE in viewChange\n /**\n * Stream containing the latest information on what rows are being displayed on screen.\n * Can be used by the data source to as a heuristic of what data should be provided.\n */\n viewChange = new BehaviorSubject<{ start: number; end: number }>({ start: 0, end: Number.MAX_VALUE });\n\n /** Differ used to find the changes in the data provided by the data source. */\n protected dataDiffer: IterableDiffer<T>;\n\n /** Stores the node definition that does not have a when predicate. */\n private defaultNodeDef: KbqTreeNodeDef<T> | null;\n\n /** Data subscription */\n private dataSubscription: Subscription | null;\n\n /** Level of nodes */\n private levels: Map<T, number> = new Map<T, number>();\n\n /**\n * Provides a stream containing the latest data array to render. Influenced by the tree's\n * stream of view window (what dataNodes are currently on screen).\n * Data source can be an observable of data array, or a data array to render.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get dataSource(): DataSource<T> | Observable<T[]> | T[] {\n return this._dataSource;\n }\n\n set dataSource(dataSource: DataSource<T> | Observable<T[]> | T[]) {\n if (this._dataSource !== dataSource) {\n this.switchDataSource(dataSource);\n }\n }\n\n private _dataSource: DataSource<T> | Observable<T[]> | T[];\n\n protected readonly destroyRef = inject(DestroyRef);\n\n ngOnInit() {\n this.dataDiffer = this.differs.find([]).create(this.trackBy());\n\n if (!this.treeControl) {\n throw getTreeControlMissingError();\n }\n }\n\n ngOnDestroy() {\n this.nodeOutlet.viewContainer.clear();\n\n if (this._dataSource && typeof (this.dataSource as DataSource<T>).disconnect === 'function') {\n (this.dataSource as DataSource<T>).disconnect(this);\n }\n\n if (this.dataSubscription) {\n this.dataSubscription.unsubscribe();\n this.dataSubscription = null;\n }\n }\n\n ngAfterContentChecked() {\n const defaultNodeDefs = this.nodeDefs.filter((def) => !def.when);\n\n if (defaultNodeDefs.length > 1) {\n throw getTreeMultipleDefaultNodeDefsError();\n }\n\n this.defaultNodeDef = defaultNodeDefs[0];\n\n if (this.dataSource && this.nodeDefs && !this.dataSubscription) {\n this.observeRenderChanges();\n }\n }\n\n /** Check for changes made in the data and render each change (node added/removed/moved). */\n renderNodeChanges(\n data: T[] | ReadonlyArray<T>,\n dataDiffer: IterableDiffer<T> = this.dataDiffer,\n viewContainer: ViewContainerRef = this.nodeOutlet.viewContainer,\n parentData?: T\n ) {\n const changes = dataDiffer.diff(data);\n\n if (!changes) {\n return;\n }\n\n changes.forEachOperation(\n (item: IterableChangeRecord<T>, adjustedPreviousIndex: number | null, currentIndex: number | null) => {\n if (item.previousIndex == null) {\n this.insertNode(data[currentIndex!], currentIndex!, viewContainer, parentData);\n } else if (currentIndex == null) {\n viewContainer.remove(adjustedPreviousIndex!);\n this.levels.delete(item.item);\n } else {\n const view = viewContainer.get(adjustedPreviousIndex!);\n\n viewContainer.move(view!, currentIndex);\n }\n }\n );\n\n this.changeDetectorRef.detectChanges();\n }\n\n /**\n * Finds the matching node definition that should be used for this node data. If there is only\n * one node definition, it is returned. Otherwise, find the node definition that has a when\n * predicate that returns true with the data. If none return true, return the default node\n * definition.\n */\n getNodeDef(data: T, i: number): KbqTreeNodeDef<T> {\n if (this.nodeDefs.length === 1) {\n return this.nodeDefs.first;\n }\n\n const nodeDef = this.nodeDefs.find((def) => def.when && def.when(i, data)) || this.defaultNodeDef;\n\n if (!nodeDef) {\n throw getTreeMissingMatchingNodeDefError();\n }\n\n return nodeDef;\n }\n\n /**\n * Create the embedded view for the data node template and place it in the correct index location\n * within the data node view container.\n */\n insertNode(nodeData: T, index: number, viewContainer?: ViewContainerRef, parentData?: T) {\n const node = this.getNodeDef(nodeData, index);\n\n // Node context that will be provided to created embedded view\n const context = new KbqTreeNodeOutletContext<T>(nodeData);\n\n // If the tree is flat tree, then use the `getLevel` function in flat tree control\n // Otherwise, use the level of parent node.\n const treeControl = this.treeControl;\n\n if (treeControl.getLevel) {\n context.level = treeControl.getLevel(nodeData);\n } else if (typeof parentData !== 'undefined' && this.levels.has(parentData)) {\n context.level = this.levels.get(parentData)! + 1;\n } else {\n context.level = 0;\n }\n\n this.levels.set(nodeData, context.level);\n\n // Use default tree nodeOutlet, or nested node's nodeOutlet\n const container = viewContainer ? viewContainer : this.nodeOutlet.viewContainer;\n\n container.createEmbeddedView(node.template, context, index);\n\n // Set the data to just created `KbqTreeNode`.\n // The `KbqTreeNode` created from `createEmbeddedView` will be saved in static variable\n // `mostRecentTreeNode`. We get it from static variable and pass the node data to it.\n if (KbqTreeNode.mostRecentTreeNode) {\n KbqTreeNode.mostRecentTreeNode.data = nodeData;\n }\n }\n\n /** Set up a subscription for the data provided by the data source. */\n private observeRenderChanges() {\n let dataStream: Observable<T[] | ReadonlyArray<T>> | undefined;\n\n // Cannot use `instanceof DataSource` since the data source could be a literal with\n // `connect` function and may not extends DataSource.\n if (typeof (this._dataSource as DataSource<T>).connect === 'function') {\n dataStream = (this._dataSource as DataSource<T>).connect(this);\n } else if (this._dataSource instanceof Observable) {\n dataStream = this._dataSource;\n } else if (Array.isArray(this._dataSource)) {\n dataStream = observableOf(this._dataSource);\n }\n\n if (dataStream) {\n this.dataSubscription = dataStream\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => this.renderNodeChanges(data));\n } else {\n throw getTreeNoValidDataSourceError();\n }\n }\n\n /**\n * Switch to the provided data source by resetting the data and unsubscribing from the current\n * render change subscription if one exists. If the data source is null, interpret this by\n * clearing the node outlet. Otherwise start listening for new data.\n */\n private switchDataSource(dataSource: DataSource<T> | Observable<T[]> | T[]) {\n if (this._dataSource && typeof (this._dataSource as DataSource<T>).disconnect === 'function') {\n (this.dataSource as DataSource<T>).disconnect(this);\n }\n\n if (this.dataSubscription) {\n this.dataSubscription.unsubscribe();\n this.dataSubscription = null;\n }\n\n // Remove the all dataNodes if there is now no data source\n if (!dataSource) {\n this.nodeOutlet.viewContainer.clear();\n }\n\n this._dataSource = dataSource;\n\n if (this.nodeDefs) {\n this.observeRenderChanges();\n }\n }\n}\n\n@Directive({\n selector: 'kbq-tree-node',\n exportAs: 'kbqTreeNode'\n})\nexport class KbqTreeNode<T> implements IFocusableOption, OnDestroy {\n protected elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n tree = inject<KbqTreeBase<T>>(KbqTreeBase);\n\n /**\n * The most recently created `KbqTreeNode`. We save it in static variable so we can retrieve it\n * in `KbqTree` and set the data to it.\n */\n static mostRecentTreeNode: KbqTreeNode<any> | null = null;\n\n protected destroyed = new Subject<void>();\n\n get data(): T {\n return this._data;\n }\n\n set data(value: T) {\n this._data = value;\n }\n\n private _data: T;\n\n get isExpanded(): boolean {\n return this.tree.treeControl.isExpanded(this.data);\n }\n\n get level(): number {\n const treeControl = this.tree.treeControl;\n\n return treeControl.getLevel ? treeControl.getLevel(this._data) : 0;\n }\n\n constructor() {\n KbqTreeNode.mostRecentTreeNode = this;\n }\n\n ngOnDestroy() {\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n Directive,\n inject,\n Input,\n input,\n ViewEncapsulation\n} from '@angular/core';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqTreeBase, KbqTreeNode } from './tree-base';\n\n/** @docs-private */\n@Directive()\nexport class KbqTreeNodeToggleBaseDirective<T> {\n private tree = inject<KbqTreeBase<T>>(KbqTreeBase);\n private treeNode = inject<KbqTreeNode<T>>(KbqTreeNode);\n\n readonly node = input<T>(undefined!);\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqTreeNodeToggleRecursive')\n get recursive(): boolean {\n return this._recursive;\n }\n\n set recursive(value: any) {\n this._recursive = coerceBooleanProperty(value);\n }\n\n private _recursive = false;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n if (value !== this.disabled) {\n this._disabled = value;\n }\n }\n\n private _disabled: boolean = false;\n\n get iconState(): boolean {\n return this.tree.treeControl.isExpanded(this.node());\n }\n\n constructor() {\n this.tree.treeControl.filterValue.subscribe((value) => (this.disabled = !!value?.length));\n }\n\n toggle(event: Event): void {\n if (this.disabled) return;\n\n if (this.recursive) {\n this.tree.treeControl.toggleDescendants(this.treeNode.data);\n } else {\n this.tree.treeControl.toggle(this.treeNode.data);\n }\n\n event.stopPropagation();\n }\n}\n\n@Component({\n selector: 'kbq-tree-node-toggle',\n imports: [KbqIcon],\n template: `\n <ng-content>\n <i kbq-icon=\"kbq-chevron-down-s_16\" [color]=\"'contrast-fade'\"></i>\n </ng-content>\n `,\n styleUrls: ['./toggle.scss', './tree-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-tree-node-toggle',\n '[class.kbq-expanded]': 'iconState',\n '[attr.disabled]': 'disabled || null',\n '(click)': 'toggle($event)'\n },\n exportAs: 'kbqTreeNodeToggle'\n})\nexport class KbqTreeNodeToggleComponent<T> extends KbqTreeNodeToggleBaseDirective<T> {}\n\n@Directive({\n selector: '[kbq-tree-node-toggle], [kbqTreeNodeToggle]',\n host: {\n '[attr.disabled]': 'disabled || null',\n '(click)': 'toggle($event)'\n },\n exportAs: 'kbqTreeNodeToggle'\n})\nexport class KbqTreeNodeToggleDirective<T> extends KbqTreeNodeToggleBaseDirective<T> {}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n contentChild,\n DestroyRef,\n ElementRef,\n EventEmitter,\n inject,\n InjectionToken,\n Input,\n input,\n NgZone,\n output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n hasModifierKey,\n KBQ_OPTION_ACTION_PARENT,\n KBQ_TITLE_TEXT_REF,\n KbqActionContainer,\n kbqFocusAndReveal,\n kbqFocusOptionActionOnTab,\n kbqGetElementHeight,\n KbqOptionActionComponent,\n KbqPseudoCheckbox,\n KbqPseudoCheckboxState,\n KbqTitleTextRef\n} from '@koobiq/components/core';\nimport { KbqDropdownTrigger } from '@koobiq/components/dropdown';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { KbqTreeNodeToggleBaseDirective, KbqTreeNodeToggleComponent, KbqTreeNodeToggleDirective } from './toggle';\nimport { KbqTreeNode } from './tree-base';\n\nexport interface KbqTreeOptionEvent {\n option: KbqTreeOption;\n}\n\n/** Injection token used to provide the parent component to options. */\nexport const KBQ_TREE_OPTION_PARENT_COMPONENT = new InjectionToken<any>('KBQ_TREE_OPTION_PARENT_COMPONENT');\n\n/**\n * Represents a change event for a tree option.\n *\n * @param source - The tree option that has been modified or selected.\n * @param isUserInput - DEPRECATED Will be removed in version 20.\n */\nexport class KbqTreeOptionChange {\n isUserInput: boolean;\n\n constructor(\n public source: KbqTreeOption,\n isUserInput = false\n ) {\n this.isUserInput = isUserInput;\n }\n}\n\nlet uniqueIdCounter: number = 0;\n\n@Component({\n selector: 'kbq-tree-option',\n imports: [\n KbqPseudoCheckbox,\n KbqActionContainer\n ],\n templateUrl: './tree-option.html',\n styleUrls: ['./tree-option.scss', './tree-tokens.scss'],\n providers: [\n { provide: KbqTreeNode, useExisting: KbqTreeOption },\n { provide: KBQ_TITLE_TEXT_REF, useExisting: KbqTreeOption },\n { provide: KBQ_OPTION_ACTION_PARENT, useExisting: KbqTreeOption }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-tree-option',\n '[class.kbq-tree-option_multiple]': 'tree.multiple',\n '[class.kbq-selected]': 'selected',\n '[class.kbq-focused]': 'hasFocus',\n '[class.kbq-disabled]': 'disabled',\n '[class.kbq-action-button-focused]': 'actionButton()?.active',\n '[attr.id]': 'id',\n '[attr.tabindex]': '-1',\n '[attr.disabled]': 'disabled || null',\n '(focusin)': 'focus()',\n '(mouseenter)': 'onMouseenter()',\n '(blur)': 'blur()',\n '(click)': 'selectViaInteraction($event)',\n '(keydown)': 'onKeydown($event)'\n },\n exportAs: 'kbqTreeOption'\n})\nexport class KbqTreeOption extends KbqTreeNode<KbqTreeOption> implements AfterContentInit, KbqTitleTextRef {\n private changeDetectorRef = inject(ChangeDetectorRef);\n private ngZone = inject(NgZone);\n private readonly destroyRef = inject(DestroyRef);\n tree: any;\n\n readonly onFocus = new Subject<KbqTreeOptionEvent>();\n\n readonly onBlur = new Subject<KbqTreeOptionEvent>();\n\n preventBlur: boolean = false;\n\n @ViewChild('kbqTitleContainer') parentTextElement: ElementRef;\n\n // Same element as `parentTextElement` — `.kbq-option-text` clips the text, so it is measured against itself.\n get textElement(): ElementRef {\n return this.parentTextElement;\n }\n\n readonly toggleElementDirective = contentChild(KbqTreeNodeToggleDirective);\n readonly toggleElementComponent = contentChild(KbqTreeNodeToggleComponent);\n readonly pseudoCheckbox = contentChild(KbqPseudoCheckbox);\n readonly actionButton = contentChild(KbqOptionActionComponent);\n\n // `KbqOptionActionComponent` reads these as directive instances through KBQ_OPTION_ACTION_PARENT,\n // so they must stay decorator queries. A signal `contentChild` would expose the query function\n // instead of the trigger, making `dropdownTrigger.dropdownClosed` undefined and throwing on `.pipe`\n // when an action button is rendered (e.g. on tree node expansion) — see #DS-5079.\n @ContentChild(KbqTooltipTrigger) tooltipTrigger?: KbqTooltipTrigger;\n @ContentChild(KbqDropdownTrigger) dropdownTrigger?: KbqDropdownTrigger;\n\n readonly checkboxThirdState = input<boolean>(false);\n\n get externalPseudoCheckbox(): boolean {\n return !!this.pseudoCheckbox();\n }\n\n get value(): any {\n return this._value;\n }\n\n set value(value: any) {\n this._value = value;\n }\n\n private _value: any;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get disabled() {\n if (this.selectAllRow()) {\n return this._disabled || this.tree!.disabled;\n }\n\n return this._disabled || this.tree!.disabled || this.tree.treeControl.isDisabled(this.data);\n }\n\n set disabled(value: any) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._disabled) {\n this._disabled = newValue;\n }\n }\n\n private _disabled: boolean = false;\n\n /**\n * Whether the option can be selected by user interaction (click, keyboard, select all).\n * A non-selectable option remains focusable, navigable and expandable.\n * Programmatic selection (`setSelected`, `select`, value accessor) is not affected.\n * Options that are not rendered (e.g. collapsed) are not checked by \"select all\".\n */\n readonly selectable = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /**\n * Whether this option is the tree's \"select all\" row rather than a rendered data node.\n *\n * Such a row has no `data`, so everything that would resolve the option against the tree control\n * (`getValue`, `isDisabled`, `isExpandable`, descendants) is skipped — those accessors belong to the\n * consumer and must never be handed a node their data source has never seen. Its checkbox state and\n * selection are driven from the outside instead.\n * @docs-private\n */\n readonly selectAllRow = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get showCheckbox() {\n return this._showCheckbox !== undefined ? this._showCheckbox : this.tree.showCheckbox;\n }\n\n set showCheckbox(value: any) {\n this._showCheckbox = coerceBooleanProperty(value);\n }\n\n private _showCheckbox: boolean;\n\n readonly onSelectionChange = output<KbqTreeOptionChange>();\n readonly userInteraction = new EventEmitter<void>();\n\n get selected(): boolean {\n return this._selected;\n }\n\n set selected(value: boolean) {\n const isSelected = coerceBooleanProperty(value);\n\n if (isSelected !== this._selected) {\n this.setSelected(isSelected);\n }\n }\n\n private _selected: boolean = false;\n\n get id(): string {\n return this._id;\n }\n\n private _id = `kbq-tree-option-${uniqueIdCounter++}`;\n\n get viewValue(): string {\n // TODO: Add input property alternative for node envs.\n return (this.getHostElement().textContent || '').trim();\n }\n\n hasFocus: boolean = false;\n\n get isExpandable(): boolean {\n if (this.selectAllRow()) {\n return false;\n }\n\n return !this.toggleElement?.disabled && this.tree.treeControl.isExpandable(this.data);\n }\n\n /** The \"select all\" row sits above the tree at root depth; `getLevel` has no node to resolve for it. */\n override get level(): number {\n return this.selectAllRow() ? 0 : super.level;\n }\n\n get toggleElement(): KbqTreeNodeToggleBaseDirective<KbqTreeOption> | undefined {\n return this.toggleElementComponent() || this.toggleElementDirective();\n }\n\n get isToggleInDefaultPlace(): boolean {\n return !!(this.toggleElementDirective() || this.toggleElementComponent());\n }\n\n checkboxState: KbqPseudoCheckboxState;\n\n constructor() {\n const tree = inject(KBQ_TREE_OPTION_PARENT_COMPONENT);\n\n super();\n\n this.tree = tree;\n }\n\n ngAfterContentInit(): void {\n if (this.selectAllRow()) return;\n\n Promise.resolve().then(this.updateCheckboxState);\n\n this.value = this.tree.treeControl.getValue(this.data);\n }\n\n descendantsAllSelected(): boolean {\n const descendants = this.tree.treeControl.getDescendants(this.data);\n\n return descendants.every((child) => this.tree?.selectionModel.isSelected(child));\n }\n\n descendantsPartiallySelected(): boolean {\n const descendants = this.tree.treeControl.getDescendants(this.data);\n\n return descendants.some((child) => this.tree?.selectionModel.isSelected(child));\n }\n\n updateParentsCheckboxState(node) {\n this.tree.treeControl.getParents(node, []).forEach((parent) => {\n const parentOption = this.tree.unorderedOptions.find((option) => option.data === parent);\n\n parentOption?.updateCheckboxState();\n });\n }\n\n updateCheckboxState = () => {\n if (this.selectAllRow()) return;\n\n if (this.checkboxThirdState() && this.isExpandable) {\n if (this.descendantsAllSelected()) {\n this.checkboxState = 'checked';\n } else if (this.descendantsPartiallySelected()) {\n this.checkboxState = 'indeterminate';\n } else {\n this.checkboxState = this.selected ? 'checked' : 'unchecked';\n }\n } else {\n this.checkboxState = this.selected ? 'checked' : 'unchecked';\n }\n\n this.updateParentsCheckboxState(this.data);\n };\n\n toggle(): void {\n this.selected = !this.selected;\n }\n\n setSelected(selected: boolean): void {\n if (this.selectAllRow() || this._selected === selected || !this.tree.selectionModel) {\n return;\n }\n\n this._selected = selected;\n\n if (selected) {\n this.tree.selectionModel.select(this.data);\n } else {\n this.tree.selectionModel.deselect(this.data);\n }\n\n if (this.showCheckbox) {\n this.updateCheckboxState();\n }\n\n this.markForCheck();\n }\n\n focus(focusOrigin?: FocusOrigin) {\n if (focusOrigin === 'program' || this.disabled || this.actionButton()?.hasFocus) return;\n\n // With the pointer already on this node, revealing it would shift the tree out from under it.\n kbqFocusAndReveal(this.elementRef.nativeElement, focusOrigin === 'mouse');\n\n if (!this.hasFocus) {\n this.onFocus.next({ option: this });\n\n Promise.resolve().then(() => {\n this.hasFocus = true;\n\n this.markForCheck();\n });\n }\n }\n\n blur(): void {\n if (this.preventBlur) {\n return;\n }\n\n // When animations are enabled, Angular may end up removing the option from the DOM a little\n // earlier than usual, causing it to be blurred and throwing off the logic in the tree\n // that moves focus not the next item. To work around the issue, we defer marking the option\n // as not focused until the next time the zone stabilizes.\n this.ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this.ngZone.run(() => {\n if (this.actionButton()?.hasFocus || this.tree.optionShouldHoldFocusOnBlur) {\n return;\n }\n\n this.hasFocus = false;\n\n this.onBlur.next({ option: this });\n });\n });\n }\n\n /** @docs-private */\n getHeight(): number {\n return kbqGetElementHeight(this.elementRef.nativeElement);\n }\n\n select(setFocus = true): void {\n if (this.selectAllRow() || this._selected) {\n return;\n }\n\n this._selected = true;\n\n if (setFocus && !this.hasFocus) {\n this.focus();\n }\n\n this.updateCheckboxState();\n this.markForCheck();\n this.emitSelectionChangeEvent();\n }\n\n deselect(): void {\n if (this.selectAllRow() || !this._selected) {\n return;\n }\n\n this._selected = false;\n\n this.updateCheckboxState();\n\n this.markForCheck();\n this.emitSelectionChangeEvent();\n }\n\n onKeydown($event) {\n kbqFocusOptionActionOnTab($event, this.actionButton());\n }\n\n selectViaInteraction($event?: KeyboardEvent): void {\n if (this.disabled || !this.selectable()) {\n return;\n }\n\n this.markForCheck();\n\n this.userInteraction.emit();\n\n const shiftKey = $event ? hasModifierKey($event, 'shiftKey') : false;\n // ctrlKey is for Windows, metaKey is for MacOS\n const ctrlKey = $event ? hasModifierKey($event, 'ctrlKey', 'metaKey') : false;\n\n this.tree.setSelectedOptionsByClick(this, shiftKey, ctrlKey);\n }\n\n emitSelectionChangeEvent(): void {\n // The tree can still hold an option whose node was re-rendered away until it rebuilds its list.\n if (this.destroyRef.destroyed) return;\n\n this.onSelectionChange.emit(new KbqTreeOptionChange(this));\n }\n\n getHostElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n markForCheck() {\n this.changeDetectorRef.markForCheck();\n\n if (this.showCheckbox) {\n this.updateCheckboxState();\n }\n }\n\n /** @docs-private */\n protected onMouseenter() {\n if (this.disabled || !this.tree.inSelect) return;\n\n this.focus('mouse');\n }\n}\n","<ng-content select=\"kbq-tree-node-toggle, [kbq-tree-node-toggle], [kbqTreeNodeToggle]\" />\n\n@if (externalPseudoCheckbox) {\n <ng-content select=\"kbq-pseudo-checkbox\" />\n} @else if (showCheckbox) {\n <kbq-pseudo-checkbox [disabled]=\"disabled\" [state]=\"checkboxState\" />\n}\n\n<ng-content select=\"kbq-checkbox\" />\n\n<ng-content select=\"[kbq-icon]\" />\n\n<ng-content select=\"kbq-progress-spinner\" />\n\n<span #kbqTitleContainer class=\"kbq-option-text\">\n <ng-content />\n</span>\n\n@if (actionButton()) {\n <kbq-action-container>\n <ng-content select=\"kbq-option-action\" />\n </kbq-action-container>\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { AfterViewInit, Directive, ElementRef, Input, Renderer2, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KbqTreeBase, KbqTreeNode } from './tree-base';\nimport { KbqTreeOption } from './tree-option.component';\n\n/** Regex used to split a string on its CSS units. */\nconst cssUnitPattern = /([A-Za-z%]+)$/;\n\n@Directive({\n selector: '[kbqTreeNodePadding]',\n exportAs: 'kbqTreeNodePadding'\n})\nexport class KbqTreeNodePadding<T> implements AfterViewInit {\n protected treeNode = inject<KbqTreeNode<T>>(KbqTreeNode);\n protected tree = inject<KbqTreeBase<T>>(KbqTreeBase);\n private renderer = inject(Renderer2);\n private element = inject<ElementRef<HTMLElement>>(ElementRef);\n private option = inject(KbqTreeOption);\n private dir = inject(Directionality, { optional: true });\n get level(): number {\n return this._level;\n }\n\n set level(value: number) {\n this.setLevelInput(value);\n }\n\n private _level: number;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('kbqTreeNodePaddingIndent')\n get indent(): number | string {\n return this._indent;\n }\n\n set indent(indent: number | string) {\n this.setIndentInput(indent);\n }\n\n private _indent: number = 12;\n\n get leftPadding(): number {\n return (this.withIcon ? 0 : this.iconWidth) + this._indent;\n }\n\n get leftPaddingForFirstLevel(): number {\n const border = 2;\n\n return (this.withIcon ? 0 : this.iconWidth) + this._indent - border;\n }\n\n /** CSS units used for the indentation value. */\n indentUnits = 'px';\n\n withIcon: boolean;\n iconWidth: number = 24;\n\n constructor() {\n this.dir?.change?.pipe(takeUntilDestroyed()).subscribe(() => this.setPadding());\n }\n\n ngAfterViewInit(): void {\n this.withIcon = this.option.isToggleInDefaultPlace;\n this.setPadding();\n }\n\n paddingIndent(): string | null {\n const treeControl = this.tree.treeControl;\n const nodeLevel = this.treeNode.data && treeControl.getLevel ? treeControl.getLevel(this.treeNode.data) : 0;\n\n const level = this.level || nodeLevel;\n\n return level > 0 ? `${level * this._indent + this.leftPadding}px` : `${this.leftPaddingForFirstLevel}px`;\n }\n\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n private setLevelInput(value: number) {\n // Set to null as the fallback value so that _setPadding can fall back to the node level if the\n // consumer set the directive as `kbqTreeNodePadding=\"\"`. We still want to take this value if\n // they set 0 explicitly.\n this._level = coerceNumberProperty(value, null)!;\n this.setPadding();\n }\n\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n private setIndentInput(indent: number | string) {\n let value = indent;\n let units = 'px';\n\n if (typeof indent === 'string') {\n const parts = indent.split(cssUnitPattern);\n\n value = parts[0];\n units = parts[1] || units;\n }\n\n this.indentUnits = units;\n this._indent = coerceNumberProperty(value);\n this.setPadding();\n }\n\n private setPadding() {\n const padding = this.paddingIndent();\n const paddingProp = this.dir?.value === 'rtl' ? 'paddingRight' : 'paddingLeft';\n\n this.renderer.setStyle(this.element.nativeElement, paddingProp, padding);\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { KbqTreeNodeOutlet } from './outlet';\nimport { KbqTreeBase } from './tree-base';\n\n@Component({\n selector: 'kbq-tree',\n imports: [\n KbqTreeNodeOutlet\n ],\n template: `\n <ng-container kbqTreeNodeOutlet />\n `,\n styleUrls: ['./tree.scss', 'tree-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-tree'\n },\n exportAs: 'kbqTree'\n})\nexport class KbqTree extends KbqTreeBase<any> {}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { Platform } from '@angular/cdk/platform';\nimport {\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n effect,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostAttributeToken,\n inject,\n Input,\n input,\n IterableDiffer,\n OnDestroy,\n Output,\n output,\n QueryList,\n signal,\n viewChild,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DOWN_ARROW,\n END,\n ENTER,\n FocusKeyManager,\n getKbqSelectNonArrayValueError,\n getSelectAllState,\n hasModifierKey,\n HOME,\n isCopy,\n isSelectAll,\n isVerticalMovement,\n KBQ_LOCALE_SERVICE,\n kbqGetElementHeight,\n KbqLocaleService,\n KbqPseudoCheckbox,\n KbqPseudoCheckboxState,\n KbqSelectAllAdapter,\n LEFT_ARROW,\n MultipleMode,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n ruRULocaleData,\n SPACE,\n TAB,\n toggleSelectAll,\n UP_ARROW\n} from '@koobiq/components/core';\nimport { KBQ_FORM_FIELD } from '@koobiq/components/form-field';\nimport { merge, Observable, Subscription } from 'rxjs';\nimport { AsyncScheduler } from 'rxjs/internal/scheduler/AsyncScheduler';\nimport { delay } from 'rxjs/operators';\nimport { FlatTreeControl } from './control/flat-tree-control';\nimport { KbqTreeNodeOutlet } from './outlet';\nimport { KbqTreeNodePadding } from './padding.directive';\nimport { KbqTreeBase } from './tree-base';\nimport { KBQ_TREE_OPTION_PARENT_COMPONENT, KbqTreeOption, KbqTreeOptionEvent } from './tree-option.component';\n\nexport const KBQ_SELECTION_TREE_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KbqTreeSelection),\n multi: true\n};\n\nexport class KbqTreeSelectAllEvent<T> {\n constructor(\n public source: KbqTreeSelection,\n public options: T[]\n ) {}\n}\n\n/**\n * Event class that occurs when copying an item from the KbqTreeSelection.\n * Used to pass data about the copied item and copy context.\n *\n * @param source - instance of KbqTreeSelection\n * @param option - instance of KbqTreeOption\n * @param event - original keyboard event (optional) that triggered the copy\n */\nexport class KbqTreeCopyEvent<T> {\n constructor(\n public source: KbqTreeSelection,\n public option: T,\n public event?: KeyboardEvent\n ) {}\n}\n\nexport class KbqTreeNavigationChange<T> {\n constructor(\n public source: KbqTreeSelection,\n public option: T\n ) {}\n}\n\nexport class KbqTreeSelectionChange<T> {\n constructor(\n public source: KbqTreeSelection,\n public option: T,\n public options?: T[]\n ) {}\n}\n\ninterface SelectionModelOption {\n id: number | string;\n value: string;\n}\n\n@Component({\n selector: 'kbq-tree-selection',\n imports: [\n KbqTreeNodeOutlet,\n KbqTreeOption,\n KbqTreeNodePadding,\n KbqPseudoCheckbox\n ],\n // `kbqTreeNodePadding` on the \"select all\" row falls back to level 0 when the option has no `data`,\n // which is exactly where the row belongs: aligned with the root nodes below it.\n template: `\n @if (showSelectAll) {\n <!-- Every read of selectAllState re-filters the rendered nodes against the data set, and\n allOptionsSelected is that same walk asking whether the state is \"checked\" — one read\n covers all four. -->\n @let selectAllCheckboxState = selectAllState;\n\n <kbq-tree-option\n class=\"kbq-tree-option_select-all\"\n kbqTreeNodePadding\n [selectAllRow]=\"true\"\n [selectable]=\"false\"\n [class.kbq-selected]=\"selectAllCheckboxState === 'checked'\"\n [attr.role]=\"'checkbox'\"\n [attr.aria-checked]=\"\n selectAllCheckboxState === 'indeterminate' ? 'mixed' : selectAllCheckboxState === 'checked'\n \"\n (click)=\"toggleSelectAll()\"\n >\n <kbq-pseudo-checkbox [state]=\"selectAllCheckboxState\" />\n {{ selectAllText }}\n </kbq-tree-option>\n }\n <ng-container kbqTreeNodeOutlet />\n `,\n styleUrls: ['./tree-selection.scss', 'tree-tokens.scss'],\n providers: [\n KBQ_SELECTION_TREE_VALUE_ACCESSOR,\n { provide: KBQ_TREE_OPTION_PARENT_COMPONENT, useExisting: KbqTreeSelection },\n { provide: KbqTreeBase, useExisting: KbqTreeSelection }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-tree-selection',\n '[attr.tabindex]': 'tabIndex',\n '[attr.disabled]': 'disabled || null',\n '(blur)': 'blur()',\n '(focus)': 'focus($event)',\n '(keydown)': 'onKeyDown($event)',\n '(window:resize)': 'updateScrollSize()'\n },\n exportAs: 'kbqTreeSelection'\n})\nexport class KbqTreeSelection\n extends KbqTreeBase<any>\n implements ControlValueAccessor, AfterContentInit, AfterViewInit, OnDestroy\n{\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private scheduler = inject(AsyncScheduler);\n private clipboard = inject(Clipboard, { optional: true });\n private readonly platform = inject(Platform);\n protected readonly focusMonitor = inject(FocusMonitor);\n\n /**\n * Whether this tree-selection is rendered inside a select panel (enables option\n * hover-to-focus). Defaults to detecting a wrapping `KbqFormField`, and is forced to `true`\n * by the host `KbqTreeSelect` so hover works even when the tree-select has no form-field\n * wrapper (e.g. the filter-bar pipes render the tree-select bare).\n */\n inSelect = !!inject(KBQ_FORM_FIELD, { optional: true, host: true });\n\n renderedOptions = new QueryList<KbqTreeOption>();\n\n keyManager: FocusKeyManager<KbqTreeOption>;\n\n selectionModel: SelectionModel<SelectionModelOption>;\n\n resetFocusedItemOnBlur: boolean = true;\n\n multipleMode: MultipleMode | null = null;\n\n userTabIndex: number | null = null;\n\n // this parameter used when select has a search field\n optionShouldHoldFocusOnBlur: boolean = false;\n\n @ViewChild(KbqTreeNodeOutlet, { static: true }) declare nodeOutlet: KbqTreeNodeOutlet;\n\n /** Reference to the built-in \"select all\" row, rendered only while `selectAll` is on. */\n readonly selectAllOption = viewChild(KbqTreeOption);\n\n @ContentChildren(KbqTreeOption) unorderedOptions: QueryList<KbqTreeOption>;\n\n // TODO: Skipped for migration because:\n // Class of this input is referenced in the signature of another class.\n @Input() declare treeControl: FlatTreeControl<any>;\n\n readonly navigationChange = output<KbqTreeNavigationChange<KbqTreeOption>>();\n\n @Output() readonly selectionChange = new EventEmitter<KbqTreeSelectionChange<KbqTreeOption>>();\n\n readonly onSelectAll = output<KbqTreeSelectAllEvent<KbqTreeOption>>();\n\n @Output() readonly onCopy = new EventEmitter<KbqTreeCopyEvent<KbqTreeOption>>();\n\n private sortedNodes: KbqTreeOption[] = [];\n\n private lastSyncedDataNodes: readonly any[] | null = null;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get autoSelect(): boolean {\n return this._autoSelect;\n }\n\n set autoSelect(value: boolean) {\n this._autoSelect = coerceBooleanProperty(value);\n }\n\n private _autoSelect: boolean = true;\n\n get optionFocusChanges(): Observable<KbqTreeOptionEvent> {\n return merge(...this.renderedOptions.map((option) => option.onFocus));\n }\n\n get optionBlurChanges(): Observable<KbqTreeOptionEvent> {\n return merge(...this.renderedOptions.map((option) => option.onBlur));\n }\n\n get multiple(): boolean {\n return !!this.multipleMode;\n }\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get noUnselectLast(): boolean {\n return this._noUnselectLast;\n }\n\n set noUnselectLast(value: boolean) {\n this._noUnselectLast = coerceBooleanProperty(value);\n }\n\n private _noUnselectLast: boolean = true;\n\n /** When `true`, a repeated Ctrl/Cmd+A deselects all options. Off by default (Ctrl+A only selects). */\n readonly selectAllToggle = input(false, { transform: booleanAttribute });\n\n /**\n * Whether to render the \"select all\" master checkbox above the nodes. Multiple selection only.\n *\n * Enabling it also makes Ctrl/Cmd + A a two-way toggle, so the shortcut and the checkbox never\n * disagree (`selectAllToggle` is implied).\n */\n // Written imperatively by `KbqTreeSelect`, like `autoSelect` and `noUnselectLast`, so it cannot be a\n // signal input; the signal behind it is what keeps the template in step.\n @Input({ transform: booleanAttribute })\n get selectAll(): boolean {\n return this.selectAllEnabled();\n }\n\n set selectAll(value: boolean) {\n this.selectAllEnabled.set(value);\n }\n\n private readonly selectAllEnabled = signal(false);\n\n /** Whether the \"select all\" row is currently rendered. */\n protected get showSelectAll(): boolean {\n return this.selectAll && this.multiple && !this.isEmpty;\n }\n\n /** Whether every node \"select all\" can act on is selected. */\n get allOptionsSelected(): boolean {\n const targets = this.selectAllTargets;\n\n // `[].every()` is `true`: with nothing for \"select all\" to act on, claiming \"all selected\" would\n // send the toggle down the deselect branch and check the master checkbox over an untouchable tree.\n return targets.length > 0 && targets.every((node) => this.selectionModel.isSelected(node));\n }\n\n /** State of the \"select all\" master checkbox. */\n get selectAllState(): KbqPseudoCheckboxState {\n return getSelectAllState(this.selectAllAdapter);\n }\n\n /** Label of the \"select all\" row. Kept in step with the locale service. */\n protected selectAllText: string = ruRULocaleData.select.selectAll;\n\n /**\n * Data nodes \"select all\" acts on, and the ones its checkbox state is derived from.\n *\n * While a filter is active only the rendered nodes qualify — the hidden ones are not what the user\n * is looking at, and selecting them would contradict a master checkbox that can only report on what\n * is on screen. Without a filter the whole data set qualifies, collapsed branches included.\n */\n // `any`, not `unknown`: `treeControl`/`selectionModel` are themselves `any`-typed data-node generics\n // pre-dating this feature (`KbqTreeBase<any>`, `SelectionModel<SelectionModelOption>`), so `unknown`\n // here would only relocate the unsafety into a cast at every call site, not remove it.\n private get selectAllTargets(): any[] {\n // `treeControl` is an `@Input`, so it is still unset on the change-detection pass that sets it:\n // a consumer reading `allOptionsSelected`/`selectAllState` off a template reference — which is\n // exactly how the docs suggest swapping the trigger label — would otherwise get a TypeError\n // before the tree is wired up. Nothing is selectable yet at that point, so an empty set is right.\n if (!this.treeControl) {\n return [];\n }\n\n const nonSelectableDataNodes = this.renderedOptions\n .filter((option) => option.disabled || !option.selectable())\n .map((option) => option.data);\n\n const candidates = this.treeControl.filterValue.value?.length\n ? this.renderedOptions.map((option) => option.data)\n : (this.treeControl.dataNodes ?? []);\n\n // The `includes` check comes first on purpose: the \"select all\" row is itself a non-selectable\n // rendered option with no `data`, and `isDisabled` belongs to the consumer — it must never be\n // handed a node their data source has never seen.\n return candidates.filter(\n (node) => !nonSelectableDataNodes.includes(node) && !this.treeControl.isDisabled(node)\n );\n }\n\n /** Adapter shared by the master checkbox and the Ctrl/Cmd + A handler, so the two cannot drift apart. */\n private get selectAllAdapter(): KbqSelectAllAdapter<any> {\n return {\n items: this.selectAllTargets,\n isSelectable: () => true,\n isSelected: (node) => this.selectionModel.isSelected(node),\n setSelected: (node, selected) =>\n selected ? this.selectionModel.select(node) : this.selectionModel.deselect(node)\n };\n }\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(rawValue: boolean) {\n const value = coerceBooleanProperty(rawValue);\n\n if (this._disabled !== value) {\n this._disabled = value;\n\n this.markOptionsForCheck();\n }\n }\n\n private _disabled: boolean = false;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get tabIndex(): any {\n return this.disabled ? -1 : this._tabIndex;\n }\n\n set tabIndex(value: any) {\n this._tabIndex = value;\n this.userTabIndex = value;\n }\n\n private _tabIndex = 0;\n\n get showCheckbox(): boolean {\n return this.multipleMode === MultipleMode.CHECKBOX;\n }\n\n get isEmpty(): boolean {\n return this.sortedNodes.length === 0;\n }\n\n /**\n * Number of real, data-backed nodes currently rendered — unlike `renderedOptions.length`, never\n * includes the \"select all\" row, which is appended to `renderedOptions` on its own, later-processed\n * reactive pass and would otherwise make a consumer's own node count race against that pass.\n */\n get nodesCount(): number {\n return this.sortedNodes.length;\n }\n\n private optionFocusSubscription: Subscription | null;\n\n private optionBlurSubscription: Subscription | null;\n\n private readonly localeService? = inject<KbqLocaleService>(KBQ_LOCALE_SERVICE, { optional: true });\n\n /** Updates locale parameters from the locale service. */\n private updateLocaleParams = () => {\n // Locale data registered by a consumer through `KBQ_LOCALE_DATA`/`addLocale` may predate this key.\n this.selectAllText = this.localeService?.getParams('select')?.selectAll ?? ruRULocaleData.select.selectAll;\n\n this.changeDetectorRef.markForCheck();\n };\n\n constructor() {\n const multiple = inject(new HostAttributeToken('multiple'), { optional: true });\n\n super();\n\n if (multiple === MultipleMode.CHECKBOX || multiple === MultipleMode.KEYBOARD) {\n this.multipleMode = multiple;\n } else if (multiple !== null) {\n this.multipleMode = MultipleMode.CHECKBOX;\n }\n\n if (this.multipleMode === MultipleMode.CHECKBOX) {\n this.autoSelect = false;\n this.noUnselectLast = false;\n }\n\n this.selectionModel = new SelectionModel<SelectionModelOption>(this.multiple);\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n\n // `unorderedOptions.changes` never fires for the \"select all\" row — it is a view child — so the\n // rendered list has to be rebuilt whenever the view query resolves or drops it.\n effect(() => {\n this.selectAllOption();\n\n if (this.renderedOptions) {\n this.updateRenderedOptions();\n }\n });\n }\n\n /** Selects every node \"select all\" can act on, or deselects them all when they are already selected. */\n protected toggleSelectAll(): void {\n this.selectAllOptions(true);\n }\n\n ngAfterContentInit(): void {\n if (this.platform.isBrowser) {\n this.unorderedOptions.changes.subscribe(this.updateRenderedOptions);\n }\n\n this.keyManager = new FocusKeyManager<KbqTreeOption>(this.renderedOptions)\n .withVerticalOrientation(true)\n .withHorizontalOrientation(null);\n\n this.keyManager.change.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.keyManager.activeItem) {\n this.emitNavigationEvent(this.keyManager.activeItem);\n\n // todo need check this logic\n if (this.autoSelect && !this.keyManager.activeItem.disabled) {\n this.updateOptionsFocus();\n }\n }\n });\n\n this.keyManager.tabOut.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.allowFocusEscape());\n\n this.selectionModel.changed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.onChange(this.getSelectedValues());\n\n this.renderedOptions.notifyOnChanges();\n });\n\n this.renderedOptions.changes\n .pipe(delay(0, this.scheduler), takeUntilDestroyed(this.destroyRef))\n .subscribe((options) => {\n this.resetOptions();\n\n // Check to see if we need to update our tab index\n this.updateTabIndex();\n\n this.syncSelectionModelToDataNodes();\n\n const selectedValues = this.multiple ? this.getSelectedValues() : [this.getSelectedValues()];\n\n options.forEach((option) => {\n if (selectedValues.includes(option.value)) {\n option.select(false);\n } else {\n option.deselect();\n }\n\n option.markForCheck();\n });\n });\n }\n\n ngAfterViewInit(): void {\n this.focusMonitor.monitor(this.elementRef, true);\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n\n this.focusMonitor.stopMonitoring(this.elementRef);\n }\n\n focus($event): void {\n if (this.renderedOptions.length === 0 || this.isFocusReceivedFromNestedOption($event)) {\n return;\n }\n\n this.keyManager.setFocusOrigin('keyboard');\n\n if (this.selectionModel.selected.length) {\n this.highlightSelectedOption();\n } else {\n this.keyManager.setFirstItemActive();\n }\n\n this.keyManager.setFocusOrigin('program');\n }\n\n highlightSelectedOption(): void {\n this.renderedOptions.find((item) => item.data === this.selectionModel.selected[0])?.focus();\n }\n\n blur() {\n if (!this.hasFocusedOption() && this.resetFocusedItemOnBlur) {\n this.keyManager.setActiveItem(-1);\n }\n\n this.onTouched();\n this.changeDetectorRef.markForCheck();\n }\n\n onKeyDown(event: KeyboardEvent): void {\n this.keyManager.setFocusOrigin('keyboard');\n const keyCode = event.keyCode;\n\n if ([SPACE, LEFT_ARROW, RIGHT_ARROW].includes(keyCode) || isVerticalMovement(event)) {\n event.preventDefault();\n }\n\n if (this.multiple && isSelectAll(event)) {\n this.selectAllHandler(event, this);\n\n return;\n } else if (isCopy(event)) {\n this.copyActiveOption(event);\n\n return;\n } else if (keyCode === TAB) {\n this.keyManager.tabOut.next();\n\n return;\n } else if (keyCode === LEFT_ARROW && this.keyManager.activeItem) {\n const activeItem = this.keyManager.activeItem;\n\n if (activeItem.isExpandable && activeItem.isExpanded) {\n this.treeControl.collapse(activeItem.data as KbqTreeOption);\n } else {\n this.setActiveParentOption(activeItem);\n }\n\n return;\n } else if (keyCode === RIGHT_ARROW && this.keyManager.activeItem?.isExpandable) {\n this.treeControl.expand(this.keyManager.activeItem.data as KbqTreeOption);\n\n return;\n } else if (keyCode === DOWN_ARROW) {\n this.keyManager.setNextItemActive();\n } else if (keyCode === UP_ARROW) {\n this.keyManager.setPreviousItemActive();\n } else if ([SPACE, ENTER].includes(keyCode)) {\n this.toggleFocusedOption();\n\n return;\n } else if (keyCode === HOME) {\n this.keyManager.setFirstItemActive();\n } else if (keyCode === END) {\n this.keyManager.setLastItemActive();\n } else if (keyCode === PAGE_UP) {\n this.keyManager.setPreviousPageItemActive();\n } else if (keyCode === PAGE_DOWN) {\n this.keyManager.setNextPageItemActive();\n }\n\n if (this.keyManager.activeItem && isVerticalMovement(event)) {\n this.setSelectedOptionsByKey(\n this.keyManager.activeItem,\n hasModifierKey(event, 'shiftKey'),\n // ctrlKey is for Windows, metaKey is for MacOS\n hasModifierKey(event, 'ctrlKey', 'metaKey')\n );\n }\n }\n\n updateScrollSize(): void {\n if (!this.renderedOptions.first) {\n return;\n }\n\n const optionHeight = this.renderedOptions.first.getHeight();\n\n // `getHeight()` is 0 whenever the option is not laid out (SSR, jsdom, `display: none`);\n // dividing by it would hand the key manager a `NaN` page size.\n if (!optionHeight) {\n return;\n }\n\n this.keyManager.withScrollSize(Math.floor(this.getHeight() / optionHeight));\n }\n\n setSelectedOptionsByKey(option: KbqTreeOption, shiftKey: boolean, ctrlKey: boolean): void {\n if (shiftKey && this.multiple) {\n this.selectActiveOptions();\n\n this.emitChangeEvent(option);\n } else if (ctrlKey) {\n if (!this.canDeselectLast(option)) {\n return;\n }\n } else if (this.autoSelect && option.selectable()) {\n this.selectionModel.clear();\n this.selectionModel.toggle(option.data);\n\n this.emitChangeEvent(option);\n }\n }\n\n setSelectedOptionsByClick(option: KbqTreeOption, shiftKey: boolean, ctrlKey: boolean): void {\n if (option.disabled || !option.selectable()) {\n return;\n }\n\n if (!shiftKey && !ctrlKey) {\n this.keyManager.setActiveItem(option);\n }\n\n if (shiftKey && this.multiple) {\n this.selectActiveOptions();\n } else if (ctrlKey) {\n if (!this.canDeselectLast(option)) {\n return;\n }\n\n this.selectionModel.toggle(option.data);\n this.keyManager.setActiveItem(option);\n } else if (this.autoSelect) {\n this.selectionModel.clear();\n this.selectionModel.toggle(option.data);\n } else {\n this.selectionModel.toggle(option.data);\n }\n\n this.emitChangeEvent(option);\n }\n\n selectActiveOptions(): void {\n const options = this.renderedOptions.toArray();\n\n let fromIndex = this.keyManager.previousActiveItemIndex;\n let toIndex = (this.keyManager.previousActiveItemIndex = this.keyManager.activeItemIndex);\n\n const selectedOptionState = options[fromIndex]?.selected;\n\n if (toIndex === fromIndex || fromIndex === -1) {\n if (options[toIndex]?.selectable()) {\n options[toIndex].toggle();\n }\n\n return;\n }\n\n if (fromIndex > toIndex) {\n [fromIndex, toIndex] = [toIndex, fromIndex];\n }\n\n options\n .slice(fromIndex, toIndex + 1)\n .filter((item) => !item.disabled && item.selectable())\n .forEach((renderedOption) => {\n if (!selectedOptionState && this.noUnselectLast && this.selectionModel.selected.length === 1) {\n return;\n }\n\n renderedOption.setSelected(selectedOptionState);\n });\n }\n\n setFocusedOption(option: KbqTreeOption): void {\n this.keyManager.setActiveItem(option);\n }\n\n toggleFocusedOption(): void {\n const focusedOption = this.keyManager.activeItem;\n\n // The row is not selectable, so nothing below would act on it. Handling it here covers both focus\n // positions — the row itself and the search field a wrapping select keeps focus in.\n if (focusedOption && focusedOption === this.selectAllOption()) {\n this.toggleSelectAll();\n\n return;\n }\n\n if (!focusedOption?.selectable()) return;\n\n if (focusedOption && (!focusedOption.selected || this.canDeselectLast(focusedOption))) {\n this.selectionModel.toggle(focusedOption.data);\n this.emitChangeEvent(focusedOption);\n }\n }\n\n renderNodeChanges(\n data: KbqTreeOption[],\n dataDiffer: IterableDiffer<KbqTreeOption> = this.dataDiffer,\n viewContainer: ViewContainerRef = this.nodeOutlet.viewContainer,\n parentData?: KbqTreeOption\n ): void {\n super.renderNodeChanges(data, dataDiffer, viewContainer, parentData);\n\n this.sortedNodes = this.getSortedNodes(viewContainer);\n\n this.nodeOutlet.changeDetectorRef.detectChanges();\n }\n\n emitNavigationEvent(option: KbqTreeOption): void {\n this.navigationChange.emit(new KbqTreeNavigationChange(this, option));\n }\n\n emitChangeEvent(option: KbqTreeOption): void {\n this.selectionChange.emit(new KbqTreeSelectionChange(this, option, [option]));\n }\n\n /**\n * Function for handling the combination Ctrl + A (select all). By default, the internal handler is used,\n * which toggles the selection of all non-disabled, selectable options.\n */\n @Input()\n get selectAllHandler() {\n return this._selectAllHandler;\n }\n\n set selectAllHandler(fn: (event: KeyboardEvent, tree: KbqTreeSelection) => void) {\n if (typeof fn !== 'function') {\n throw Error('`selectAllHandler` must be a function.');\n }\n\n this._selectAllHandler = fn;\n }\n\n private _selectAllHandler(event: KeyboardEvent, tree: KbqTreeSelection): void {\n event.preventDefault();\n\n tree.selectAllOptions();\n }\n\n selectAllOptions(allowDeselect: boolean = this.selectAll || this.selectAllToggle()): void {\n // The row's own `(click)` and the Ctrl/Cmd + A shortcut both funnel through here, so this is the\n // single place to refuse acting while the whole tree is disabled — mirrors the guard every other\n // row already gets via `KbqTreeOption.selectViaInteraction()`.\n if (this.disabled) return;\n\n // Selection is applied at the data-node level (incl. collapsed/non-rendered nodes unless a filter\n // is active), while the emitted events carry the selectable rendered options.\n const selectableOptions = this.renderedOptions.filter((option) => !option.disabled && option.selectable());\n\n // `toggleSelectAll` returns the data nodes whose selection actually flipped — the source of\n // truth, unlike the cached `option.selected` which lags until change detection.\n const changed = toggleSelectAll(this.selectAllAdapter, { allowDeselect });\n\n const changedData = new Set(changed);\n const changedOptions = selectableOptions.filter((option) => changedData.has(option.data));\n\n // Skip `selectionChange` on a no-op (e.g. Ctrl+A while everything is already selected and\n // `allowDeselect` is off) so `KbqTreeSelectionChange.option` is never `undefined`.\n if (changedOptions.length > 0) {\n this.selectionChange.emit(new KbqTreeSelectionChange(this, changedOptions[0], changedOptions));\n }\n\n this.onSelectAll.emit(new KbqTreeSelectAllEvent(this, selectableOptions));\n }\n\n copyActiveOption(event: KeyboardEvent): void {\n if (!this.keyManager.activeItem) return;\n\n const option = this.keyManager.activeItem;\n\n option.preventBlur = true;\n\n if (this.onCopy.observed) {\n this.onCopy.emit(new KbqTreeCopyEvent(this, this.keyManager.activeItem as KbqTreeOption, event));\n } else {\n this.onCopyDefaultHandler();\n\n event.preventDefault();\n }\n\n option.preventBlur = false;\n }\n\n writeValue(value: any): void {\n if (this.multiple && value && !Array.isArray(value)) {\n throw getKbqSelectNonArrayValueError();\n }\n\n if (value) {\n this.setOptionsFromValues(this.multiple ? value : [value]);\n } else {\n this.selectionModel.clear();\n }\n }\n\n /** `View -> model callback called when value changes` */\n onChange: (value: any) => void = () => {};\n\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n /** `View -> model callback called when select has been touched` */\n onTouched = () => {};\n\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n registerOnTouched(fn: () => {}): void {\n this.onTouched = fn;\n }\n\n /**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n */\n setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n this.changeDetectorRef.markForCheck();\n }\n\n setOptionsFromValues(values: any[]): void {\n this.selectionModel.clear();\n\n const valuesToSelect = values.reduce((result, value) => {\n return this.treeControl.hasValue(value) ? [...result, this.treeControl.hasValue(value)] : [...result];\n }, []);\n\n this.selectionModel.select(...valuesToSelect);\n }\n\n /**\n * Rebinds orphan node references in selectionModel to current treeControl.dataNodes by value.\n * Needed after dataSource.data is replaced — selectionModel holds references to old node\n * objects, but options render with new ones, so toggle()/isSelected() break on identity.\n */\n private syncSelectionModelToDataNodes(): void {\n const currentNodes = this.treeControl.dataNodes;\n\n // Fast path: dataNodes ref hasn't changed since last sync → orphans impossible.\n // Skips work on filter / expand / selection-toggle re-renders where data ref is stable.\n if (currentNodes === this.lastSyncedDataNodes) return;\n this.lastSyncedDataNodes = currentNodes;\n\n if (this.selectionModel.isEmpty() || !currentNodes?.length) return;\n\n const selected = this.selectionModel.selected;\n const currentNodesSet = new Set<any>(currentNodes);\n\n let hasOrphans = false;\n\n for (const node of selected) {\n if (!currentNodesSet.has(node)) {\n hasOrphans = true;\n break;\n }\n }\n\n if (!hasOrphans) return;\n\n const reconciled = selected.map((node) => {\n if (currentNodesSet.has(node)) return node;\n\n const replacement = this.treeControl.hasValue(this.treeControl.getValue(node));\n\n return replacement ?? node;\n });\n\n this.selectionModel.setSelection(...reconciled);\n }\n\n getSelectedValues(): any[] {\n const selectedValues = this.selectionModel.selected.map((selected) => this.treeControl.getValue(selected));\n\n return this.multiple ? selectedValues : selectedValues[0];\n }\n\n getItemHeight(): number {\n return this.renderedOptions.first ? this.renderedOptions.first.getHeight() : 0;\n }\n\n setStateChildren(option: KbqTreeOption, state: boolean) {\n const valuesToChange = this.treeControl.getDescendants(option.data);\n\n if (state) {\n this.selectionModel.select(...valuesToChange);\n } else {\n this.selectionModel.deselect(...valuesToChange);\n }\n }\n\n private onCopyDefaultHandler(): void {\n this.clipboard?.copy(this.keyManager.activeItem!.value);\n }\n\n /**\n * Moves focus to the closest enabled ancestor of the active option — ArrowLeft on a leaf, on an\n * already-collapsed node, or on a node whose toggle is disabled.\n *\n * Ancestors are resolved against `renderedOptions` rather than `treeControl.dataNodes`: every\n * ancestor of a visible option is itself visible, options are rendered depth-first, and these are\n * the indices `keyManager` navigates — so the walk starts from `keyManager.activeItemIndex`.\n * Scanning backwards, the first option with a smaller level is the parent.\n *\n * A disabled option cannot take focus (`KbqTreeOption.focus` refuses it), so the walk steps over a\n * disabled ancestor and narrows `level` to that ancestor's level. Without narrowing, the scan would\n * continue against the original level and land on a preceding sibling of the parent.\n */\n private setActiveParentOption(activeOption: KbqTreeOption): void {\n const options = this.renderedOptions.toArray();\n\n let level = activeOption.level;\n\n for (let index = this.keyManager.activeItemIndex - 1; index >= 0; index--) {\n const option = options[index];\n\n if (option.level >= level) {\n continue;\n }\n\n if (!option.disabled) {\n this.keyManager.setActiveItem(index);\n\n return;\n }\n\n level = option.level;\n }\n }\n\n private getHeight(): number {\n return kbqGetElementHeight(this.elementRef.nativeElement);\n }\n\n private updateTabIndex(): void {\n this._tabIndex = this.renderedOptions.length === 0 ? -1 : 0;\n }\n\n private updateRenderedOptions = () => {\n const orderedOptions: KbqTreeOption[] = [];\n\n // The \"select all\" row is rendered by this component's own template, so it never reaches the\n // `unorderedOptions` content query — but it is the first thing on screen and has to lead the\n // list the key manager navigates.\n const selectAllOption = this.selectAllOption();\n\n if (selectAllOption) {\n orderedOptions.push(selectAllOption);\n }\n\n this.sortedNodes.forEach((node) => {\n const found = this.unorderedOptions.find((option) => option.value === this.treeControl.getValue(node));\n\n if (found) {\n orderedOptions.push(found);\n }\n });\n\n this.renderedOptions.reset(orderedOptions);\n this.renderedOptions.notifyOnChanges();\n\n this.updateScrollSize();\n };\n\n private getSortedNodes(viewContainer: ViewContainerRef) {\n const array: KbqTreeOption[] = [];\n\n for (let i = 0; i < viewContainer.length; i++) {\n const viewRef = viewContainer.get(i) as any;\n\n array.push(viewRef.context.$implicit);\n }\n\n return array;\n }\n\n private allowFocusEscape() {\n if (this._tabIndex !== -1) {\n this._tabIndex = -1;\n\n setTimeout(() => {\n this._tabIndex = this.userTabIndex || 0;\n this.changeDetectorRef.markForCheck();\n });\n }\n }\n\n private resetOptions() {\n this.dropSubscriptions();\n this.listenToOptionsFocus();\n }\n\n private dropSubscriptions() {\n if (this.optionFocusSubscription) {\n this.optionFocusSubscription.unsubscribe();\n this.optionFocusSubscription = null;\n }\n\n if (this.optionBlurSubscription) {\n this.optionBlurSubscription.unsubscribe();\n this.optionBlurSubscription = null;\n }\n }\n\n private listenToOptionsFocus(): void {\n this.optionFocusSubscription = this.optionFocusChanges.subscribe((event) => {\n const index: number = this.renderedOptions.toArray().indexOf(event.option as KbqTreeOption);\n\n this.renderedOptions.filter((option) => option.hasFocus).forEach((option) => (option.hasFocus = false));\n\n if (this.isValidIndex(index)) {\n this.keyManager.updateActiveItem(index);\n }\n });\n\n this.optionBlurSubscription = this.optionBlurChanges.subscribe(() => this.blur());\n }\n\n /**\n * Utility to ensure all indexes are valid.\n * @param index The index to be checked.\n * @returns True if the index is valid for our list of options.\n */\n private isValidIndex(index: number): boolean {\n return index >= 0 && index < this.renderedOptions.length;\n }\n\n /** Checks whether any of the options is focused. */\n private hasFocusedOption() {\n return this.renderedOptions.some((option) => option.hasFocus);\n }\n\n private markOptionsForCheck() {\n this.renderedOptions.forEach((option) => option.markForCheck());\n }\n\n private updateOptionsFocus() {\n this.renderedOptions.filter((option) => option.hasFocus).forEach((option) => (option.hasFocus = false));\n }\n\n private canDeselectLast(option: KbqTreeOption): boolean {\n return !(this.noUnselectLast && this.selectionModel.selected.length === 1 && option.selected);\n }\n\n private isFocusReceivedFromNestedOption($event: FocusEvent) {\n if (!$event || !$event.relatedTarget) {\n return false;\n }\n\n return ($event.relatedTarget as HTMLElement).classList.contains('kbq-tree-option');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqActionContainer, KbqPseudoCheckboxModule } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { asyncScheduler } from 'rxjs';\nimport { AsyncScheduler } from 'rxjs/internal/scheduler/AsyncScheduler';\nimport { KbqTreeNodeDef } from './node';\nimport { KbqTreeNodeOutlet } from './outlet';\nimport { KbqTreeNodePadding } from './padding.directive';\nimport { KbqTreeNodeToggleComponent, KbqTreeNodeToggleDirective } from './toggle';\nimport { KbqTree } from './tree';\nimport { KbqTreeNode } from './tree-base';\nimport { KbqTreeOption } from './tree-option.component';\nimport { KbqTreeSelection } from './tree-selection.component';\n\nconst KBQ_TREE_DIRECTIVES = [\n KbqTreeNodeOutlet,\n KbqTreeNodeDef,\n KbqTreeNode,\n KbqTreeNodePadding,\n KbqTree,\n KbqTreeSelection,\n KbqTreeOption,\n KbqTreeNodeToggleComponent,\n KbqTreeNodeToggleDirective\n];\n\n@NgModule({\n imports: [\n KbqPseudoCheckboxModule,\n KbqIconModule,\n KbqActionContainer,\n ...KBQ_TREE_DIRECTIVES\n ],\n providers: [{ provide: AsyncScheduler, useValue: asyncScheduler }],\n exports: KBQ_TREE_DIRECTIVES\n})\nexport class KbqTreeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["observableOf"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"koobiq-components-tree.mjs","sources":["../../../packages/components/tree/control/base-tree-control.ts","../../../packages/components/tree/control/flat-tree-control.filters.ts","../../../packages/components/tree/control/flat-tree-control.ts","../../../packages/components/tree/control/nested-tree-control.ts","../../../packages/components/tree/data-source/flat-data-source.ts","../../../packages/components/tree/data-source/nested-data-source.ts","../../../packages/components/tree/node.ts","../../../packages/components/tree/outlet.ts","../../../packages/components/tree/tree-errors.ts","../../../packages/components/tree/tree-base.ts","../../../packages/components/tree/toggle.ts","../../../packages/components/tree/tree-option.component.ts","../../../packages/components/tree/tree-option.html","../../../packages/components/tree/padding.directive.ts","../../../packages/components/tree/tree.ts","../../../packages/components/tree/tree-selection.component.ts","../../../packages/components/tree/tree.module.ts","../../../packages/components/tree/koobiq-components-tree.ts"],"sourcesContent":["import { SelectionModel } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { TreeControl } from './tree-control';\n\n/** Base tree control. It has basic toggle/expand/collapse operations on a single data node. */\nexport abstract class BaseTreeControl<T> implements TreeControl<T> {\n dataNodes: T[];\n\n /** A selection model with multi-selection to track expansion status. */\n expansionModel: SelectionModel<T> = new SelectionModel<T>(true);\n\n filterModel: SelectionModel<T> = new SelectionModel<T>(true);\n\n filterValue = new BehaviorSubject<T[] | string | null>('');\n\n /** Get depth of a given data node, return the level number. This is for flat tree node. */\n getLevel: (dataNode: T) => number;\n\n /**\n * Whether the data node is expandable. Returns true if expandable.\n * This is for flat tree node.\n */\n isExpandable: (dataNode: T) => boolean;\n\n /** Gets a stream that emits whenever the given data node's children change. */\n getChildren: (dataNode: T) => Observable<T[]>;\n\n /** Gets a list of descendent data nodes of a subtree rooted at given data node recursively. */\n abstract getDescendants(dataNode: T): T[];\n\n /** Expands all data nodes in the tree. */\n abstract expandAll(): void;\n\n /** Toggles one single data node's expanded/collapsed state. */\n toggle(dataNode: T): void {\n if (this.filterValue.value?.length) {\n return;\n }\n\n this.expansionModel.toggle(dataNode);\n }\n\n /** Expands one single data node. */\n expand(dataNode: T): void {\n if (this.filterValue.value?.length) {\n return;\n }\n\n this.expansionModel.select(dataNode);\n }\n\n /** Collapses one single data node. */\n collapse(dataNode: T): void {\n if (this.filterValue.value?.length) {\n return;\n }\n\n this.expansionModel.deselect(dataNode);\n }\n\n /** Whether a given data node is expanded or not. Returns true if the data node is expanded. */\n isExpanded(dataNode: T): boolean {\n return this.expansionModel.isSelected(dataNode);\n }\n\n /** Toggles a subtree rooted at `node` recursively. */\n toggleDescendants(dataNode: T): void {\n if (this.expansionModel.isSelected(dataNode)) {\n this.collapseDescendants(dataNode);\n } else {\n this.expandDescendants(dataNode);\n }\n }\n\n /** Collapse all dataNodes in the tree. */\n collapseAll(): void {\n this.expansionModel.clear();\n }\n\n /** Expands a subtree rooted at given data node recursively. */\n expandDescendants(dataNode: T): void {\n const toBeProcessed = [dataNode];\n\n toBeProcessed.push(...this.getDescendants(dataNode));\n this.expansionModel.select(...toBeProcessed);\n }\n\n /** Collapses a subtree rooted at given data node recursively. */\n collapseDescendants(dataNode: T): void {\n const toBeProcessed = [dataNode];\n\n toBeProcessed.push(...this.getDescendants(dataNode));\n this.expansionModel.deselect(...toBeProcessed);\n }\n}\n","import { FlatTreeControl } from './flat-tree-control';\n\nexport const kbqTreeSelectAllValue = 'selectAll';\n\nexport interface FlatTreeControlFilter<T> {\n result: T[];\n\n handle(value: string | null, prevFilter?: FlatTreeControlFilter<T> | null): T[];\n}\n\n/**\n * Default first stage of the filter pipeline: keeps the nodes whose view value matches the query.\n *\n * @docs-private\n */\nexport class FilterByViewValue<T> implements FlatTreeControlFilter<T> {\n result: T[];\n\n constructor(private control: FlatTreeControl<T>) {}\n\n handle(value: string | null): T[] {\n const viewValue = value || null;\n\n this.result = this.control.dataNodes.filter((node) => {\n if (node['value'] === kbqTreeSelectAllValue) return true;\n\n return this.control.compareViewValues(this.control.getViewValue(node), viewValue);\n });\n\n if (this.result.length === 1 && this.result[0]['value'] === kbqTreeSelectAllValue) {\n this.result.pop();\n }\n\n return this.result;\n }\n}\n\n/**\n * Default last stage of the filter pipeline: re-adds the ancestors of every matched node so the\n * matches stay reachable in the rendered hierarchy.\n *\n * @docs-private\n */\nexport class FilterParentsForNodes<T> implements FlatTreeControlFilter<T> {\n result: T[];\n\n constructor(private control: FlatTreeControl<T>) {}\n\n handle(_, prevFilter: FlatTreeControlFilter<T>): T[] {\n const result: Set<T> = new Set();\n\n this.control.dataNodes\n .filter((node) => prevFilter?.result.includes(node))\n .forEach((node) => {\n this.control.getParents(node, []).forEach((parent) => result.add(parent));\n\n result.add(node);\n });\n\n this.result = Array.from(result);\n\n return this.result;\n }\n}\n\nexport class FilterByValues<T> implements FlatTreeControlFilter<T> {\n result: T[];\n\n private values: string[] = [];\n\n constructor(private control: FlatTreeControl<T>) {}\n\n handle(_, prevFilter?: FlatTreeControlFilter<T>): T[] {\n const found = this.control.dataNodes.filter((node) => this.values.includes(this.control.getValue(node)));\n\n this.result = Array.from(new Set([...(prevFilter?.result || []), ...found]));\n\n return this.result;\n }\n\n setValues = (values: string[]) => {\n this.values = values;\n };\n\n // TODO: nothing in the library uses it; kept as public API at the DS-2196 review. Document or deprecate it.\n getValues(): string[] {\n return this.values;\n }\n}\n","import { escapeRegExp } from '@koobiq/components/core';\nimport { BaseTreeControl } from './base-tree-control';\nimport { FilterByViewValue, FilterParentsForNodes, FlatTreeControlFilter } from './flat-tree-control.filters';\n\nexport function defaultCompareValues(firstValue: string, secondValue: string): boolean {\n return firstValue === secondValue;\n}\n\nexport function defaultCompareViewValues(firstViewValue: string, secondViewValue: string): boolean {\n return RegExp(escapeRegExp(secondViewValue), 'gi').test(firstViewValue);\n}\n\n/** Flat tree control. Able to expand/collapse a subtree recursively for flattened tree. */\nexport class FlatTreeControl<T> extends BaseTreeControl<T> {\n expandedItemsBeforeFiltration: T[];\n\n private filters: FlatTreeControlFilter<T>[];\n\n /** Construct with flat tree data node functions getLevel, isExpandable, getValue and getViewValue. */\n constructor(\n public getLevel: (dataNode: T) => number,\n public isExpandable: (dataNode: T) => boolean,\n /** getValue will be used to determine if the tree contains value or not. Used in method hasValue */\n public getValue: (dataNode: T) => any,\n /** getViewValue will be used for filter nodes. Returned value will be first argument in filterNodesFunction */\n public getViewValue: (dataNode: T) => string,\n /** compareValues will be used to comparing values. */\n public compareValues: (firstValue, secondValue) => boolean = defaultCompareValues,\n /** compareValues will be used to comparing values. */\n public compareViewValues: (firstViewValue, secondViewValue) => boolean = defaultCompareViewValues,\n /** isDisabled will be used to determine if the node is disabled. */\n public isDisabled: (dataNode: T) => boolean = () => false\n ) {\n super();\n\n this.setFilters(new FilterByViewValue<T>(this), new FilterParentsForNodes<T>(this));\n }\n\n // TODO: nothing in the library uses it; kept as public API at the DS-2196 review. Document or deprecate it.\n getFilters(): FlatTreeControlFilter<T>[] {\n return this.filters;\n }\n\n setFilters(...filters: FlatTreeControlFilter<T>[]) {\n this.filters = filters;\n }\n\n /**\n * Gets a list of the data node's subtree of descendent data nodes.\n *\n * To make this working, the `dataNodes` of the TreeControl must be flattened tree nodes\n * with correct levels.\n */\n getDescendants(dataNode: T): T[] {\n const startIndex = this.dataNodes.indexOf(dataNode);\n const results: T[] = [];\n\n // Goes through flattened tree nodes in the `dataNodes` array, and get all descendants.\n // The level of descendants of a tree node must be greater than the level of the given\n // tree node.\n // If we reach a node whose level is equal to the level of the tree node, we hit a sibling.\n // If we reach a node whose level is greater than the level of the tree node, we hit a\n // sibling of an ancestor.\n for (\n let i = startIndex + 1;\n i < this.dataNodes.length && this.getLevel(dataNode) < this.getLevel(this.dataNodes[i]);\n i++\n ) {\n results.push(this.dataNodes[i]);\n }\n\n return results;\n }\n\n /**\n * Expands all data nodes in the tree.\n *\n * To make this working, the `dataNodes` variable of the TreeControl must be set to all flattened\n * data nodes of the tree.\n */\n expandAll(): void {\n this.expansionModel.select(...this.dataNodes);\n }\n\n /**\n * Ancestors of a data node, outermost first.\n *\n * Derived from `dataNodes` rather than from a `parent` back-reference: the flattened nodes are in\n * depth-first order, so scanning backwards from the node, the first node of a smaller level is its\n * parent, and repeating with that level yields the whole chain. A data node whose shape carries no\n * `parent` therefore resolves just as well as one that does.\n *\n * @param result Collector the ancestors are prepended to. Provided so callers can accumulate into\n * an existing array; a fresh one is used when omitted.\n */\n getParents(node: T, result: T[] = []): T[] {\n const startIndex = this.dataNodes?.indexOf(node) ?? -1;\n\n if (startIndex === -1) {\n return result;\n }\n\n let level = this.getLevel(node);\n\n for (let i = startIndex - 1; i >= 0 && level > 0; i--) {\n const candidate = this.dataNodes[i];\n const candidateLevel = this.getLevel(candidate);\n\n if (candidateLevel < level) {\n result.unshift(candidate);\n\n level = candidateLevel;\n }\n }\n\n return result;\n }\n\n hasValue(value: string): T | undefined {\n return this.dataNodes?.find((node: any) => this.compareValues(this.getValue(node), value));\n }\n\n filterNodes(value: string | null = null): void {\n this.saveExpansionState();\n\n let result: T[] = [];\n\n this.filters.forEach((filter, index, filters) => {\n const prevFilter = filters[index - 1] || null;\n\n result = filter.handle(value, prevFilter);\n });\n\n this.filterModel.clear();\n this.filterModel.select(...result);\n\n // set current expansion state according to filtered tree\n this.expansionModel.setSelection(...result.filter((node) => this.isExpandable(node)));\n\n this.updateFilterValue(value || result);\n\n Promise.resolve().then(() => this.restoreExpansionState());\n }\n\n private updateFilterValue(value: T[] | string | null) {\n Promise.resolve().then(() => this.filterValue.next(value));\n }\n\n private saveExpansionState() {\n if (!this.filterValue.value?.length) {\n this.expandedItemsBeforeFiltration = this.expansionModel.selected;\n }\n }\n\n private restoreExpansionState() {\n if (!this.filterValue.value?.length) {\n this.expansionModel.setSelection(...this.expandedItemsBeforeFiltration);\n }\n }\n}\n","import { Observable } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { BaseTreeControl } from './base-tree-control';\n\n/** Nested tree control. Able to expand/collapse a subtree recursively for NestedNode type. */\nexport class NestedTreeControl<T> extends BaseTreeControl<T> {\n /**\n * Construct with nested tree function getChildren.\n *\n * @param getChildren Must emit **synchronously** (e.g. `of(children)` or a `BehaviorSubject`).\n * `getDescendants` walks the tree with `take(1)` and returns as soon as the recursion unwinds, so\n * an asynchronous source yields an incomplete — usually empty — descendant list.\n */\n constructor(public getChildren: (dataNode: T) => Observable<T[]>) {\n super();\n }\n\n /**\n * Expands all dataNodes in the tree.\n *\n * To make this working, the `dataNodes` variable of the TreeControl must be set to all root level\n * data nodes of the tree.\n */\n expandAll(): void {\n this.expansionModel.clear();\n const allNodes = this.dataNodes.reduce(\n (accumulator: T[], dataNode) => [...accumulator, ...this.getDescendants(dataNode), dataNode],\n []\n );\n\n this.expansionModel.select(...allNodes);\n }\n\n /** Gets a list of descendant dataNodes of a subtree rooted at given data node recursively. */\n getDescendants(dataNode: T): T[] {\n const descendants = [];\n\n this._getDescendants(descendants, dataNode);\n\n return descendants.splice(1);\n }\n\n /** A helper function to get descendants recursively. */\n // todo нужно придумать другое название и понять в чем отличие между getDescendants и _getDescendants\n private _getDescendants(descendants: T[], dataNode: T): void {\n descendants.push(dataNode);\n\n this.getChildren(dataNode)\n .pipe(take(1))\n .subscribe((children) => {\n if (children && children.length > 0) {\n children.forEach((child: T) => this._getDescendants(descendants, child));\n }\n });\n }\n}\n","import { CollectionViewer, DataSource, SelectionChange } from '@angular/cdk/collections';\nimport { signal } from '@angular/core';\nimport { BehaviorSubject, Observable, merge } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { FlatTreeControl } from '../control/flat-tree-control';\nimport { TreeControl } from '../control/tree-control';\n\n/**\n * Tree flattener to convert a normal type of node to node with children & level information.\n * Transform nested nodes of type `T` to flattened nodes of type `F`.\n *\n * For example, the input data of type `T` is nested, and contains its children data:\n *\n * ```ts\n * SomeNode: {\n * key: 'Fruits',\n * children: [\n * NodeOne: {\n * key: 'Apple'\n * },\n * NodeTwo: {\n * key: 'Pear'\n * }\n * ]\n * }\n * ```\n *\n * After flattener flatten the tree, the structure will become\n *\n * ```ts\n * SomeNode: {\n * key: 'Fruits',\n * expandable: true,\n * level: 1\n * },\n * NodeOne: {\n * key: 'Apple',\n * expandable: false,\n * level: 2\n * },\n * NodeTwo: {\n * key: 'Pear',\n * expandable: false,\n * level: 2\n * }\n * ```\n *\n * and the output flattened type is `F` with additional information.\n */\nexport class KbqTreeFlattener<T, F> {\n constructor(\n public transformFunction: (node: T, level: number, parent: F | null) => F,\n public getLevel: (node: F) => number,\n public isExpandable: (node: F) => boolean,\n public getChildren: (node: T) => Observable<T[]> | T[] | undefined | null\n ) {}\n\n /** @docs-private */\n flattenNode(node: T, level: number, resultNodes: F[], parent: F | null): F[] {\n const flatNode = this.transformFunction(node, level, parent);\n\n resultNodes.push(flatNode);\n\n if (this.isExpandable(flatNode)) {\n const childrenNodes = this.getChildren(node);\n\n if (childrenNodes) {\n if (Array.isArray(childrenNodes)) {\n this.flattenChildren(childrenNodes, level, resultNodes, flatNode);\n } else {\n childrenNodes.pipe(take(1)).subscribe((children) => {\n this.flattenChildren(children, level, resultNodes, flatNode);\n });\n }\n }\n }\n\n return resultNodes;\n }\n\n /** @docs-private */\n flattenChildren(children: T[], level: number, resultNodes: F[], parent: F | null): void {\n children.forEach((child) => {\n this.flattenNode(child, level + 1, resultNodes, parent);\n });\n }\n\n /**\n * Flatten a list of node type T to flattened version of node F.\n * Please note that type T may be nested, and the length of `structuredData` may be different\n * from that of returned list `F[]`.\n */\n flattenNodes(structuredData: T[]): F[] {\n const resultNodes: F[] = [];\n\n structuredData.forEach((node) => this.flattenNode(node, 0, resultNodes, null));\n\n return resultNodes;\n }\n\n /**\n * Expand flattened node with current expansion status.\n * The returned list may have different length.\n */\n expandFlattenedNodes(nodes: F[], treeControl: TreeControl<F>): F[] {\n const results: F[] = [];\n const currentExpand: boolean[] = [];\n\n currentExpand[0] = true;\n\n nodes.forEach((node) => {\n let expand = true;\n\n for (let i = 0; i <= this.getLevel(node); i++) {\n expand = expand && currentExpand[i];\n }\n\n if (expand) {\n results.push(node);\n }\n\n if (this.isExpandable(node)) {\n currentExpand[this.getLevel(node) + 1] = treeControl.isExpanded(node);\n }\n });\n\n return results;\n }\n}\n\nenum KbqTreeDataSourceChangeTypes {\n Expansion = 'expansion',\n Filter = 'filter'\n}\n\n/**\n * Data source for flat tree.\n * The data source need to handle expansion/collapsion of the tree node and change the data feed\n * to `KbqTree`.\n * The nested tree nodes of type `T` are flattened through `KbqTreeFlattener`, and converted\n * to type `F` for `KbqTree` to consume.\n */\nexport class KbqTreeFlatDataSource<T, F> extends DataSource<F> {\n flattenedData = new BehaviorSubject<F[]>([]);\n\n expandedData = new BehaviorSubject<F[]>([]);\n\n filteredData = new BehaviorSubject<F[]>([]);\n\n get data() {\n return this._data();\n }\n\n set data(value: T[]) {\n this._data.set(value);\n\n this.flattenedData.next(this.treeFlattener.flattenNodes(this.data));\n this.treeControl.dataNodes = this.flattenedData.value;\n }\n\n private readonly _data = signal<T[]>([]);\n\n constructor(\n private treeControl: FlatTreeControl<F>,\n private treeFlattener: KbqTreeFlattener<T, F>,\n initialData: T[] = []\n ) {\n super();\n\n this._data.set(initialData);\n\n // The setter flattens the data for the tree.\n if (initialData.length) {\n this.data = initialData;\n }\n }\n\n connect(collectionViewer: CollectionViewer): Observable<F[]> {\n return merge(\n collectionViewer.viewChange,\n this.treeControl.expansionModel.changed.pipe(\n map((value) => ({ type: KbqTreeDataSourceChangeTypes.Expansion, value }))\n ),\n this.treeControl.filterValue.pipe(map((value) => ({ type: KbqTreeDataSourceChangeTypes.Filter, value }))),\n this.flattenedData\n ).pipe(\n map((changeObj: any): any => {\n if (changeObj.type === KbqTreeDataSourceChangeTypes.Filter) {\n if (changeObj.value && changeObj.value.length > 0) {\n return this.filterHandler();\n } else {\n return this.expansionHandler(changeObj.value);\n }\n }\n\n return this.expansionHandler(changeObj.value);\n })\n );\n }\n\n filterHandler(): F[] {\n this.filteredData.next(this.treeControl.filterModel.selected);\n\n return this.filteredData.value;\n }\n\n expansionHandler(_change: SelectionChange<F>): F[] {\n const expandedNodes = this.treeFlattener.expandFlattenedNodes(this.flattenedData.value, this.treeControl);\n\n this.expandedData.next(expandedNodes);\n\n return this.expandedData.value;\n }\n\n disconnect() {\n // no op\n }\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, merge } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * Data source for nested tree.\n *\n * The data source for nested tree doesn't have to consider node flattener, or the way to expand\n * or collapse. The expansion/collapsion will be handled by TreeControl and each non-leaf node.\n */\nexport class KbqTreeNestedDataSource<T> extends DataSource<T> {\n get data() {\n return this._data.value;\n }\n\n set data(value: T[]) {\n this._data.next(value);\n }\n\n private _data = new BehaviorSubject<T[]>([]);\n\n connect(collectionViewer: CollectionViewer): Observable<T[]> {\n return merge(...[collectionViewer.viewChange, this._data as any]).pipe(map(() => this.data));\n }\n\n disconnect() {\n // no op\n }\n}\n","import { Directive, TemplateRef, inject, input } from '@angular/core';\n\n/** Context provided to the tree node component. */\nexport class KbqTreeNodeOutletContext<T> {\n /** Data for the node. */\n $implicit: T;\n\n /** Depth of the node. */\n level: number;\n\n /** Index location of the node. */\n index?: number;\n\n /** Length of the number of total dataNodes. */\n // TODO: never filled, as in the CDK context; fill it or deprecate it (#DS-2196).\n count?: number;\n\n constructor(data: T) {\n this.$implicit = data;\n }\n}\n\n/**\n * Data node definition for the KbqTree.\n * Captures the node's template and a when predicate that describes when this node should be used.\n */\n@Directive({\n selector: '[kbqTreeNodeDef]',\n inputs: ['when: kbqTreeNodeDefWhen']\n})\nexport class KbqTreeNodeDef<T> {\n template = inject<TemplateRef<any>>(TemplateRef);\n\n readonly data = input<T>(undefined!, { alias: 'kbqTreeNode' });\n\n /**\n * Function that should return true if this node template should be used for the provided node\n * data and index. If left undefined, this node will be considered the default node template to\n * use when no other when functions return true for the data.\n * For every node, there must be at least one when function that passes or an undefined to\n * default.\n */\n when: (index: number, nodeData: T) => boolean;\n\n /** @docs-private */\n}\n","import { Directive, ViewContainerRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[kbqTreeNodeOutlet]'\n})\nexport class KbqTreeNodeOutlet {\n viewContainer = inject(ViewContainerRef);\n}\n","/**\n * Returns an error to be thrown when there is no usable data.\n *\n * @docs-private\n */\nexport function getTreeNoValidDataSourceError() {\n return Error(`A valid data source must be provided.`);\n}\n\n/**\n * Returns an error to be thrown when there are multiple nodes that are missing a when function.\n *\n * @docs-private\n */\nexport function getTreeMultipleDefaultNodeDefsError() {\n return Error(`There can only be one default row without a when predicate function.`);\n}\n\n/**\n * Returns an error to be thrown when there are no matching node defs for a particular set of data.\n *\n * @docs-private\n */\nexport function getTreeMissingMatchingNodeDefError() {\n return Error(`Could not find a matching node definition for the provided node data.`);\n}\n\n/**\n * Returns an error to be thrown when there are tree control.\n *\n * @docs-private\n */\nexport function getTreeControlMissingError() {\n return Error(`Could not find a tree control for the tree.`);\n}\n\n/**\n * Returns an error to be thrown when the selection mode of a tree is changed while its `SelectionModel`\n * belongs to a host `KbqTreeSelect`.\n *\n * @docs-private\n */\nexport function getKbqTreeSelectionOwnedMultipleError() {\n return Error(\n 'Cannot change the multiplicity of `multiple` on a `kbq-tree-selection` rendered inside a ' +\n '`kbq-tree-select`: the select owns the selection model. Set `multiple` on the select instead.'\n );\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectorRef,\n DestroyRef,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n IterableChangeRecord,\n IterableDiffer,\n IterableDiffers,\n OnDestroy,\n OnInit,\n Signal,\n TrackByFunction,\n ViewContainerRef,\n contentChildren,\n effect,\n inject,\n input,\n isDevMode,\n untracked,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IFocusableOption, KbqStateSaving } from '@koobiq/components/core';\nimport { BehaviorSubject, Observable, Subject, Subscription, of as observableOf } from 'rxjs';\nimport { FlatTreeControl } from './control/flat-tree-control';\nimport { TreeControl } from './control/tree-control';\nimport { KbqTreeNodeDef, KbqTreeNodeOutletContext } from './node';\nimport { KbqTreeNodeOutlet } from './outlet';\nimport {\n getTreeControlMissingError,\n getTreeMissingMatchingNodeDefError,\n getTreeMultipleDefaultNodeDefsError,\n getTreeNoValidDataSourceError\n} from './tree-errors';\n\n/** The persisted state of a tree — the values of the nodes that were expanded. */\nexport type KbqTreeState = string[];\n\n/**\n * Coerces a raw persisted payload into a `KbqTreeState`, returning `null` for anything unrecognizable.\n *\n * Web storage is origin-wide and user-writable, so a payload is never trusted — without this, an entry\n * such as `{\"a\": null}` would reach `hasValue()` while restoring.\n */\nconst normalizeTreeState = (parsed: unknown): KbqTreeState | null => {\n if (!Array.isArray(parsed)) return null;\n\n const values = parsed.filter((value): value is string => typeof value === 'string');\n\n // An array that held nothing usable is somebody else's payload, not \"nothing was expanded\" — the\n // difference matters, because only the second one is a state worth keeping.\n return values.length || !parsed.length ? values : null;\n};\n\n/**\n * Rendering core of the tree.\n *\n * Originally forked from `@angular/cdk/tree` and maintained independently since: the node/outlet\n * contract, the option-based selection model and the filtering pipeline have all diverged, so\n * `@angular/cdk/tree` is deliberately not a dependency of this package and upstream fixes have to be\n * ported by hand.\n *\n * `C` narrows the tree control a concrete tree accepts, and so the type its `treeControl` binding is checked against.\n */\n@Directive()\nexport class KbqTreeBase<T, C extends TreeControl<T> = TreeControl<T>>\n implements AfterContentChecked, AfterContentInit, CollectionViewer, OnDestroy, OnInit\n{\n protected differs = inject(IterableDiffers);\n protected changeDetectorRef = inject(ChangeDetectorRef);\n\n /**\n * Persistence of the expanded state, applied as a host directive by the concrete tree components.\n * Optional because `KbqTreeBase` is exported: a tree without the directive persists nothing.\n */\n private readonly stateSaving = inject(KbqStateSaving, { optional: true });\n\n /** @docs-private */\n readonly treeControlInput = input<C>(undefined!, { alias: 'treeControl' });\n\n /** Controls the expanded state and holds the data nodes of the tree. */\n get treeControl(): C {\n return this.treeControlInput();\n }\n\n /** {@link treeControl} as state saving reads it: by node value, which only a `FlatTreeControl` has. */\n private get flatTreeControl(): FlatTreeControl<T> {\n const treeControl: TreeControl<T> = this.treeControl;\n\n return treeControl as FlatTreeControl<T>;\n }\n\n /**\n * Tracking function that will be used to check the differences in data changes. Used similarly\n * to `ngFor` `trackBy` function. Optimize node operations by identifying a node based on its data\n * relative to the function to know if a node should be added/removed/moved.\n * Accepts a function that takes two parameters, `index` and `item`.\n *\n * Views are reused for nodes the function reports as unchanged, which a data source that rebuilds\n * its node objects on every emission — a flattener among them — otherwise cannot get.\n */\n readonly trackBy = input<TrackByFunction<T>>(undefined!);\n\n private readonly nodeOutletQuery = viewChild(KbqTreeNodeOutlet);\n\n /** Outlet within the tree's template where the data nodes are inserted. */\n get nodeOutlet(): KbqTreeNodeOutlet {\n return this.nodeOutletQuery()!;\n }\n\n /** The tree node template for the tree */\n readonly nodeDefs: Signal<readonly KbqTreeNodeDef<T>[]> = contentChildren(KbqTreeNodeDef);\n\n /**\n * Stream containing the latest information on what rows are being displayed on screen.\n * Can be used by the data source to as a heuristic of what data should be provided.\n *\n * The tree renders every expanded node eagerly, so the window is the whole data set; a data source\n * cannot use it to page or virtualize. Windowing would have to emit a real range from a scroll\n * listener here first.\n */\n viewChange = new BehaviorSubject<{ start: number; end: number }>({ start: 0, end: Number.MAX_VALUE });\n\n /** Differ used to find the changes in the data provided by the data source. */\n protected dataDiffer: IterableDiffer<T>;\n\n /** Stores the node definition that does not have a when predicate. */\n private defaultNodeDef: KbqTreeNodeDef<T> | null;\n\n /** Data subscription */\n private dataSubscription: Subscription | null;\n\n /** Level of nodes */\n private levels: Map<T, number> = new Map<T, number>();\n\n /** Most recently constructed node of this tree, see `registerNode`. */\n private recentNode: KbqTreeNode<T> | null = null;\n\n /** Node rendered for a given outlet context, so a reused view can be handed its new data. */\n private readonly nodesByContext = new WeakMap<KbqTreeNodeOutletContext<T>, KbqTreeNode<T>>();\n\n /**\n * Values from the persisted state whose node has not appeared in `treeControl.dataNodes` yet —\n * applied as the nodes show up, and dropped the first time each node is seen.\n */\n private pendingValues = new Set<string>();\n\n /** The `dataNodes` the last restore ran against, so an unchanged list is not walked again. */\n private lastRestoredDataNodes: readonly T[] | null = null;\n\n /**\n * Whether the persisted state has been read. `KbqTreeSelect` calls `ngAfterContentInit()` by hand on\n * the tree it projects into its panel, and a second read would resurrect values the user dismissed.\n */\n private hasRead = false;\n\n /** Whether the dev-mode warnings below have already been logged, so each is logged once. */\n private warnedAboutTreeControl = false;\n private warnedAboutValues = false;\n\n /** @docs-private */\n readonly dataSourceInput = input<DataSource<T> | Observable<T[]> | T[] | null | undefined>(undefined, {\n alias: 'dataSource'\n });\n\n /**\n * Provides a stream containing the latest data array to render. Influenced by the tree's\n * stream of view window (what dataNodes are currently on screen).\n * Data source can be an observable of data array, or a data array to render.\n */\n get dataSource(): DataSource<T> | Observable<T[]> | T[] | null {\n return this._dataSource;\n }\n\n private _dataSource: DataSource<T> | Observable<T[]> | T[] | null = null;\n\n constructor() {\n // Switching the source drops the rendered nodes and resubscribes, which a bound value alone does not do. A\n // binding back to `undefined` clears the tree as `null` does; an unbound input equals the initial `null`.\n effect(() => {\n const dataSource = this.dataSourceInput() ?? null;\n\n untracked(() => {\n if (dataSource !== this._dataSource) this.switchDataSource(dataSource);\n });\n });\n }\n\n protected readonly destroyRef = inject(DestroyRef);\n\n /** Whether `ngAfterContentChecked` has run, i.e. the node definitions the first render needs are resolved. */\n private contentChecked = false;\n\n ngOnInit() {\n this.dataDiffer = this.createDataDiffer();\n\n if (!this.treeControl) {\n throw getTreeControlMissingError();\n }\n }\n\n ngAfterContentInit(): void {\n // Before `ngAfterContentChecked` connects the data source, so the restored nodes are expanded\n // ahead of the first render rather than causing a second one.\n if (this.hasRead || !this.persists) return;\n\n this.hasRead = true;\n\n // The state lives under the new key now, so restore from it.\n this.stateSaving!.keyChanges.subscribe(() => this.restoreState());\n\n this.restoreState();\n }\n\n /** Reads the persisted expansion and applies it. Runs while initializing, and again on a key change. */\n private restoreState(): void {\n if (!this.persists) return;\n\n const savedState = this.stateSaving!.read(normalizeTreeState);\n\n this.pendingValues = new Set(savedState ?? []);\n\n // The memo that keeps one batch of nodes from being examined twice. A restore from another key\n // has new values to match against the same nodes, so it has to be allowed to look again.\n this.lastRestoredDataNodes = null;\n\n this.restorePending();\n }\n\n ngOnDestroy() {\n this.nodeOutlet.viewContainer.clear();\n\n if (this._dataSource && typeof (this.dataSource as DataSource<T>).disconnect === 'function') {\n (this.dataSource as DataSource<T>).disconnect(this);\n }\n\n if (this.dataSubscription) {\n this.dataSubscription.unsubscribe();\n this.dataSubscription = null;\n }\n }\n\n ngAfterContentChecked() {\n const defaultNodeDefs = this.nodeDefs().filter((def) => !def.when);\n\n if (defaultNodeDefs.length > 1) {\n throw getTreeMultipleDefaultNodeDefsError();\n }\n\n this.defaultNodeDef = defaultNodeDefs[0];\n this.contentChecked = true;\n\n if (this.dataSource && this.nodeDefs().length && !this.dataSubscription) {\n this.observeRenderChanges();\n }\n }\n\n /**\n * Persists the values of the currently expanded nodes.\n *\n * Called for every expansion and collapse a user performs. Expansion driven by the application —\n * `treeControl.expandAll()`, or writing to `expansionModel` — is not persisted; call this to record it.\n *\n * A no-op while a filter is active: what is expanded then is the result set, not a chosen state.\n */\n saveState(): void {\n // Untracked, as in `clearSavedState()`: called from a consumer's `effect()`, the inputs read on the way would\n // make the effect run again whenever they change.\n untracked(() => {\n if (!this.persists || this.treeControl.filterValue.value?.length) return;\n\n this.stateSaving!.write(this.expandedValues());\n });\n }\n\n /**\n * Removes the state persisted for this tree.\n *\n * Persistence itself stays on — the next expansion is written again.\n */\n clearSavedState(): void {\n untracked(() => this.stateSaving?.clear());\n }\n\n /**\n * Whether state is currently persisted for this tree — restored on init, or written since.\n * Always `false` while `useStateSaving` is unset, and `false` again after `clearSavedState()`.\n */\n get hasSavedState(): boolean {\n return this.stateSaving?.state != null;\n }\n\n /** Check for changes made in the data and render each change (node added/removed/moved). */\n renderNodeChanges(\n data: T[] | ReadonlyArray<T>,\n dataDiffer: IterableDiffer<T> = this.dataDiffer,\n viewContainer: ViewContainerRef = this.nodeOutlet.viewContainer,\n parentData?: T\n ) {\n if (this.applyNodeChanges(data, dataDiffer, viewContainer, parentData)) {\n this.changeDetectorRef.detectChanges();\n }\n }\n\n /**\n * Applies the data changes to the view container without running change detection, and reports\n * whether anything moved. Split out of `renderNodeChanges` so a subclass can update the state its\n * own template reads before the single change-detection pass, instead of running a second one.\n *\n * @docs-private\n */\n protected applyNodeChanges(\n data: T[] | ReadonlyArray<T>,\n dataDiffer: IterableDiffer<T>,\n viewContainer: ViewContainerRef,\n parentData?: T\n ): boolean {\n const changes = dataDiffer.diff(data);\n\n if (!changes) {\n return false;\n }\n\n changes.forEachOperation(\n (item: IterableChangeRecord<T>, adjustedPreviousIndex: number | null, currentIndex: number | null) => {\n if (item.previousIndex == null) {\n this.insertNode(data[currentIndex!], currentIndex!, viewContainer, parentData);\n } else if (currentIndex == null) {\n viewContainer.remove(adjustedPreviousIndex!);\n this.levels.delete(item.item);\n } else {\n const view = viewContainer.get(adjustedPreviousIndex!);\n\n viewContainer.move(view!, currentIndex);\n }\n }\n );\n\n // A node kept its identity but is a different object — what a data source that rebuilds its\n // nodes on every emission produces, a flattener among them. The view is reused, so the object\n // it and its `KbqTreeNode` still hold is gone from `dataNodes`, and every lookup keyed on the\n // node reference (`getDescendants`, `isExpanded`, the selection) would miss it.\n changes.forEachIdentityChange((record: IterableChangeRecord<T>) => {\n this.refreshNodeData(viewContainer, record.currentIndex!, record.item);\n });\n\n return true;\n }\n\n private refreshNodeData(viewContainer: ViewContainerRef, index: number, nodeData: T): void {\n const view = viewContainer.get(index) as EmbeddedViewRef<KbqTreeNodeOutletContext<T>> | null;\n\n if (!view) {\n return;\n }\n\n const { context } = view;\n const previousData = context.$implicit;\n\n context.$implicit = nodeData;\n\n this.levels.delete(previousData);\n this.levels.set(nodeData, context.level);\n\n const node = this.nodesByContext.get(context);\n\n if (node) {\n node.data = nodeData;\n node.refresh();\n }\n }\n\n /**\n * Finds the matching node definition that should be used for this node data. If there is only\n * one node definition, it is returned. Otherwise, find the node definition that has a when\n * predicate that returns true with the data. If none return true, return the default node\n * definition.\n */\n getNodeDef(data: T, i: number): KbqTreeNodeDef<T> {\n const nodeDefs = this.nodeDefs();\n\n if (nodeDefs.length === 1) {\n return nodeDefs[0];\n }\n\n const nodeDef = nodeDefs.find((def) => def.when && def.when(i, data)) || this.defaultNodeDef;\n\n if (!nodeDef) {\n throw getTreeMissingMatchingNodeDefError();\n }\n\n return nodeDef;\n }\n\n /**\n * Create the embedded view for the data node template and place it in the correct index location\n * within the data node view container.\n */\n insertNode(nodeData: T, index: number, viewContainer?: ViewContainerRef, parentData?: T) {\n const node = this.getNodeDef(nodeData, index);\n\n // Node context that will be provided to created embedded view\n const context = new KbqTreeNodeOutletContext<T>(nodeData);\n\n context.index = index;\n\n // If the tree is flat tree, then use the `getLevel` function in flat tree control\n // Otherwise, use the level of parent node.\n const treeControl = this.treeControl;\n\n if (treeControl.getLevel) {\n context.level = treeControl.getLevel(nodeData);\n } else if (typeof parentData !== 'undefined' && this.levels.has(parentData)) {\n context.level = this.levels.get(parentData)! + 1;\n } else {\n context.level = 0;\n }\n\n this.levels.set(nodeData, context.level);\n\n // Use default tree nodeOutlet, or nested node's nodeOutlet\n const container = viewContainer ? viewContainer : this.nodeOutlet.viewContainer;\n\n container.createEmbeddedView(node.template, context, index);\n\n // The `KbqTreeNode` instantiated by `createEmbeddedView` registers itself here on construction,\n // which is the only handle onto it — the embedded view exposes its context, not its directives.\n // It is remembered against that context so a later re-render can reach it again.\n if (this.recentNode) {\n this.recentNode.data = nodeData;\n this.nodesByContext.set(context, this.recentNode);\n this.recentNode = null;\n }\n }\n\n /**\n * Called by a `KbqTreeNode` while it is being constructed, so `insertNode` can hand it its data.\n *\n * @docs-private\n */\n registerNode(node: KbqTreeNode<T>): void {\n this.recentNode = node;\n }\n\n /** Whether this tree reads and writes its expanded state at all. */\n private get persists(): boolean {\n if (!this.stateSaving?.useStateSaving()) return false;\n\n // A tree that is not in the document has no stable key — the default resolver derives one from\n // the path to `<body>`. That is the ordinary state of a tree projected into an overlay, such as\n // the one `kbq-tree-select` renders into its panel, whose expansion is transient UI rather than\n // a setting worth carrying to the next visit.\n if (!this.stateSaving.host?.isConnected) return false;\n\n if (typeof this.flatTreeControl.getValue !== 'function') {\n if (isDevMode() && !this.warnedAboutTreeControl) {\n this.warnedAboutTreeControl = true;\n\n // eslint-disable-next-line no-console\n console.warn(\n 'kbq-tree: state saving is enabled, but the tree control has no `getValue`. ' +\n 'Expansion is persisted by node value, and a node object does not survive a ' +\n 'reload, so nothing is persisted. Use `FlatTreeControl`, or unset ' +\n '`useStateSaving`.'\n );\n }\n\n return false;\n }\n\n return true;\n }\n\n /**\n * Expands every pending value whose node is present, and stops tracking it.\n *\n * Idempotent, and safe to call on every render: the pending set only shrinks, so a tree that has\n * restored everything does no work at all.\n */\n private restorePending(): void {\n if (!this.pendingValues.size) return;\n\n const currentNodes = this.treeControl.dataNodes;\n\n // Nothing new to match against. Deliberately does not record an empty list, so the first real\n // batch of an asynchronously loaded tree is still examined.\n if (currentNodes === this.lastRestoredDataNodes || !currentNodes?.length) return;\n\n this.lastRestoredDataNodes = currentNodes;\n\n const treeControl = this.flatTreeControl;\n const found: T[] = [];\n\n for (const value of this.pendingValues) {\n const node = treeControl.hasValue(value);\n\n if (node) {\n found.push(node);\n this.pendingValues.delete(value);\n }\n }\n\n // Straight at the model rather than through `expand()`, which is a no-op while a filter is\n // active — restoring must not depend on what the user happens to be searching for.\n if (found.length) {\n this.stateSaving!.applying(() => treeControl.expansionModel.select(...found));\n }\n }\n\n /** The values of the nodes that are currently expanded, plus the ones still waiting to appear. */\n private expandedValues(): KbqTreeState {\n const treeControl = this.flatTreeControl;\n const expanded: string[] = [];\n let skipped = false;\n\n for (const node of treeControl.expansionModel.selected) {\n const value = treeControl.getValue(node);\n\n if (typeof value === 'string') {\n expanded.push(value);\n } else {\n skipped = true;\n }\n }\n\n if (skipped && isDevMode() && !this.warnedAboutValues) {\n this.warnedAboutValues = true;\n\n // eslint-disable-next-line no-console\n console.warn(\n 'kbq-tree: `getValue` returned a value that is not a string for at least one node. ' +\n 'Expansion is persisted as JSON keyed by that value, so those nodes are left out.'\n );\n }\n\n // Union with what is still pending: on a tree whose data arrives in batches the expanded nodes\n // are only part of what was saved, and writing the snapshot alone would drop every branch that\n // has not been loaded yet.\n return [...new Set([...expanded, ...this.pendingValues])];\n }\n\n /** Set up a subscription for the data provided by the data source. */\n private observeRenderChanges() {\n let dataStream: Observable<T[] | ReadonlyArray<T>> | undefined;\n\n // Cannot use `instanceof DataSource` since the data source could be a literal with\n // `connect` function and may not extends DataSource.\n if (typeof (this._dataSource as DataSource<T>).connect === 'function') {\n dataStream = (this._dataSource as DataSource<T>).connect(this);\n } else if (this._dataSource instanceof Observable) {\n dataStream = this._dataSource;\n } else if (Array.isArray(this._dataSource)) {\n dataStream = observableOf(this._dataSource);\n }\n\n if (dataStream) {\n this.dataSubscription = dataStream.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((data) => {\n this.renderNodeChanges(data);\n\n // On a microtask, and only while something is still pending: expanding re-enters this\n // very subscription — the flat data source merges `expansionModel.changed` — and\n // `renderNodeChanges` has just run `detectChanges()`.\n if (this.pendingValues.size) {\n Promise.resolve().then(() => this.restorePending());\n }\n });\n } else {\n throw getTreeNoValidDataSourceError();\n }\n }\n\n /**\n * Switch to the provided data source by resetting the data and unsubscribing from the current\n * render change subscription if one exists. If the data source is null, interpret this by\n * clearing the node outlet. Otherwise start listening for new data.\n */\n private switchDataSource(dataSource: DataSource<T> | Observable<T[]> | T[] | null) {\n if (this._dataSource && typeof (this._dataSource as DataSource<T>).disconnect === 'function') {\n (this.dataSource as DataSource<T>).disconnect(this);\n }\n\n if (this.dataSubscription) {\n this.dataSubscription.unsubscribe();\n this.dataSubscription = null;\n }\n\n // Every rendered node belongs to the previous source, so none of them survives the switch. The\n // differ is reset below and no longer reports them as removals, which makes these two the only\n // things that drop the old nodes — for a null source and for a replacement source alike. Left\n // to the differ, `levels` would keep an entry, and with it a strong reference, for every node\n // of every source the tree has ever been given.\n this.nodeOutlet.viewContainer.clear();\n this.levels.clear();\n\n this._dataSource = dataSource;\n\n // The differ remembers the nodes of the previous source. Left in place, the first diff against\n // the new source is computed as a delta from data that is no longer rendered, so views are\n // reused for unrelated nodes or dropped entirely.\n this.dataDiffer = this.createDataDiffer();\n\n // Not before the first `ngAfterContentChecked`: that is where the default node definition is resolved,\n // and a render ahead of it finds no definition for the nodes and throws, taking the subscription down\n // with it and leaving the tree permanently empty. The initial render is picked up there; a later\n // source swap is observed here right away.\n if (dataSource && this.contentChecked && this.nodeDefs().length) {\n this.observeRenderChanges();\n }\n }\n\n private createDataDiffer(): IterableDiffer<T> {\n return this.differs.find([]).create(this.trackBy());\n }\n}\n\n// `KbqTree` declares `role=\"tree\"`, whose owned elements have to be `treeitem`s — and a bare\n// `kbq-tree-node` is the only kind of row it can render, since `KbqTreeOption` needs a parent only\n// `KbqTreeSelection` provides. The nodes are rendered flat into a single outlet, so the depth an AT\n// reports comes from `aria-level` rather than from the DOM.\n@Directive({\n selector: 'kbq-tree-node',\n host: {\n role: 'treeitem',\n '[attr.aria-level]': 'level + 1'\n },\n exportAs: 'kbqTreeNode'\n})\nexport class KbqTreeNode<T> implements IFocusableOption, OnDestroy {\n protected elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n tree = inject<KbqTreeBase<T>>(KbqTreeBase);\n\n /**\n * The most recently created `KbqTreeNode`, across every tree on the page.\n *\n * @deprecated Kept for backwards compatibility only — the tree hands a node its data through\n * `KbqTreeBase.registerNode`, which is scoped to the tree that owns the node. Will be removed in 22.0.0.\n */\n static mostRecentTreeNode: KbqTreeNode<any> | null = null;\n\n protected destroyed = new Subject<void>();\n\n /**\n * Emits after the tree reused this node's view for a different data object, so a directive on the\n * same element can re-derive what it computed from the previous one.\n *\n * @docs-private\n */\n readonly refreshed = new Subject<void>();\n\n get data(): T {\n return this._data;\n }\n\n set data(value: T) {\n this._data = value;\n }\n\n private _data: T;\n\n get isExpanded(): boolean {\n return this.tree.treeControl.isExpanded(this.data);\n }\n\n get level(): number {\n const treeControl = this.tree.treeControl;\n\n return treeControl.getLevel ? treeControl.getLevel(this._data) : 0;\n }\n\n constructor() {\n KbqTreeNode.mostRecentTreeNode = this;\n\n this.tree.registerNode(this);\n }\n\n ngOnDestroy() {\n this.destroyed.next();\n this.destroyed.complete();\n\n this.refreshed.complete();\n }\n\n /**\n * Called by the tree once `data` has been replaced on a reused view. State a subclass derived from\n * the previous node — its value, its level — is stale at this point and has to be recomputed.\n *\n * @docs-private\n */\n refresh(): void {\n this.refreshed.next();\n }\n\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n inject,\n input,\n ViewEncapsulation\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { map } from 'rxjs/operators';\nimport { KbqTreeBase, KbqTreeNode } from './tree-base';\n\n/** @docs-private */\n@Directive()\nexport class KbqTreeNodeToggleBaseDirective<T> {\n private tree = inject<KbqTreeBase<T>>(KbqTreeBase);\n private treeNode = inject<KbqTreeNode<T>>(KbqTreeNode);\n\n readonly node = input<T>(undefined!);\n\n /** Whether toggling expands or collapses the whole subtree instead of the node alone. */\n readonly recursive = input(false, { alias: 'kbqTreeNodeToggleRecursive', transform: booleanAttribute });\n\n /**\n * Backing input of `disabled`. Bind through the `disabled` attribute; read the `disabled` getter,\n * which also reports the toggle disabled while a filter is active.\n *\n * @docs-private\n */\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n\n /** Set while a filter is active: filtering already decides what is expanded. */\n private readonly filterDisabled = toSignal(\n this.tree.treeControl.filterValue.pipe(map((value) => !!value?.length)),\n { initialValue: false }\n );\n\n private readonly disabledState = computed(() => this.disabledInput() || this.filterDisabled());\n\n get disabled(): boolean {\n return this.disabledState();\n }\n\n get iconState(): boolean {\n return this.tree.treeControl.isExpanded(this.node());\n }\n\n toggle(event: Event): void {\n if (this.disabled) return;\n\n if (this.recursive()) {\n this.tree.treeControl.toggleDescendants(this.treeNode.data);\n } else {\n this.tree.treeControl.toggle(this.treeNode.data);\n }\n\n this.tree.saveState();\n\n event.stopPropagation();\n }\n}\n\n@Component({\n selector: 'kbq-tree-node-toggle',\n imports: [KbqIcon],\n template: `\n <ng-content>\n <i kbq-icon=\"kbq-chevron-down-s_16\" [color]=\"'contrast-fade'\"></i>\n </ng-content>\n `,\n styleUrls: ['./toggle.scss', './tree-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-tree-node-toggle',\n // The expanded state is announced on the owning `treeitem` through `aria-expanded`, and the\n // Left/Right arrow keys drive it, so exposing the chevron as a second control would only add\n // a duplicate stop for assistive tech.\n 'aria-hidden': 'true',\n '[class.kbq-expanded]': 'iconState',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-disabled]': 'disabled || null',\n '(click)': 'toggle($event)'\n },\n exportAs: 'kbqTreeNodeToggle'\n})\nexport class KbqTreeNodeToggleComponent<T> extends KbqTreeNodeToggleBaseDirective<T> {}\n\n// No ARIA on this host: the directive is routinely applied to the `kbq-tree-option` element itself,\n// where the option already owns `role`, `aria-disabled` and the rest of the treeitem semantics.\n@Directive({\n selector: '[kbq-tree-node-toggle], [kbqTreeNodeToggle]',\n host: {\n '[attr.disabled]': 'disabled || null',\n '(click)': 'toggle($event)'\n },\n exportAs: 'kbqTreeNodeToggle'\n})\nexport class KbqTreeNodeToggleDirective<T> extends KbqTreeNodeToggleBaseDirective<T> {}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport {\n AfterContentInit,\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n contentChild,\n DestroyRef,\n DoCheck,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n inject,\n InjectionToken,\n input,\n linkedSignal,\n output,\n QueryList,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n hasModifierKey,\n KBQ_OPTION_ACTION_PARENT,\n KBQ_TITLE_TEXT_REF,\n KbqActionContainer,\n kbqFocusAndReveal,\n kbqFocusOptionActionOnTab,\n kbqGetElementHeight,\n KbqOptionActionComponent,\n KbqPseudoCheckbox,\n KbqPseudoCheckboxState,\n KbqTitleTextRef\n} from '@koobiq/components/core';\nimport { KbqDropdownTrigger } from '@koobiq/components/dropdown';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { Observable, Subject } from 'rxjs';\nimport { FlatTreeControl } from './control/flat-tree-control';\nimport { KbqTreeNodeToggleBaseDirective, KbqTreeNodeToggleComponent, KbqTreeNodeToggleDirective } from './toggle';\nimport { KbqTreeBase, KbqTreeNode } from './tree-base';\n\nexport interface KbqTreeOptionEvent {\n option: KbqTreeOption;\n}\n\n/**\n * The part of the tree an option talks to.\n *\n * Declared as an interface rather than as `KbqTreeSelection` so the token stays free of a circular\n * import, and so anything embedding options only has to provide these members.\n */\nexport interface KbqTreeOptionParent<T = any> {\n /** Whether the whole tree is disabled. */\n disabled: boolean;\n /** Whether more than one option can be selected at a time. */\n multiple: boolean;\n /** Whether the options render a checkbox. */\n showCheckbox: boolean;\n /** Whether the tree is rendered inside a select panel, which makes hovering an option focus it. */\n inSelect: boolean;\n /** Whether an option keeps focus while the tree loses it, as a select with a search field needs. */\n optionShouldHoldFocusOnBlur: boolean;\n /** State of the tree-level \"select all\" checkbox. */\n selectAllState: KbqPseudoCheckboxState;\n treeControl: FlatTreeControl<T>;\n selectionModel: SelectionModel<T>;\n unorderedOptions: QueryList<KbqTreeOption<T>>;\n setSelectedOptionsByClick(option: KbqTreeOption<T>, shiftKey: boolean, ctrlKey: boolean): void;\n}\n\n/** Injection token used to provide the parent component to options. */\nexport const KBQ_TREE_OPTION_PARENT_COMPONENT: InjectionToken<KbqTreeOptionParent> = new InjectionToken(\n 'KBQ_TREE_OPTION_PARENT_COMPONENT'\n);\n\n/** Represents a change event for a tree option. */\nexport class KbqTreeOptionChange {\n constructor(\n /** The tree option that has been modified or selected. */\n public source: KbqTreeOption\n ) {}\n}\n\nlet uniqueIdCounter: number = 0;\n\n/** What the tree control's predicates say about a row, as its host bindings show it. */\ninterface TreeOptionPredicates {\n disabled: boolean;\n /** `aria-expanded`: whether a branch is expanded, `null` on a leaf. */\n expanded: boolean | null;\n}\n\nconst samePredicates = (a: TreeOptionPredicates, b: TreeOptionPredicates): boolean =>\n a.disabled === b.disabled && a.expanded === b.expanded;\n\n@Component({\n selector: 'kbq-tree-option',\n imports: [\n KbqPseudoCheckbox,\n KbqActionContainer\n ],\n templateUrl: './tree-option.html',\n styleUrls: ['./tree-option.scss', './tree-tokens.scss'],\n providers: [\n { provide: KbqTreeNode, useExisting: KbqTreeOption },\n { provide: KBQ_TITLE_TEXT_REF, useExisting: KbqTreeOption },\n { provide: KBQ_OPTION_ACTION_PARENT, useExisting: KbqTreeOption }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-tree-option',\n // The \"select all\" row is a treeitem too: `role=\"checkbox\"` would be an invalid child of\n // `role=\"tree\"`, and `aria-checked` already carries its state.\n role: 'treeitem',\n '[class.kbq-tree-option_multiple]': 'tree.multiple',\n '[class.kbq-selected]': 'selected',\n '[class.kbq-focused]': 'hasFocus',\n '[class.kbq-disabled]': 'checkedDisabled',\n '[class.kbq-action-button-focused]': 'actionButton()?.active',\n '[attr.id]': 'id',\n '[attr.tabindex]': '-1',\n '[attr.aria-disabled]': 'checkedDisabled || null',\n '[attr.aria-expanded]': 'ariaExpanded',\n // `aria-level` comes from `KbqTreeNode`: a second binding here would read `level` twice.\n '[attr.aria-checked]': 'ariaChecked',\n '[attr.aria-selected]': 'ariaSelected',\n '(focusin)': 'focus()',\n '(mouseenter)': 'onMouseenter()',\n '(blur)': 'blur()',\n '(click)': 'selectViaInteraction($event)',\n '(keydown)': 'onKeydown($event)'\n },\n exportAs: 'kbqTreeOption'\n})\nexport class KbqTreeOption<T = any> extends KbqTreeNode<T> implements AfterContentInit, DoCheck, KbqTitleTextRef {\n private changeDetectorRef = inject(ChangeDetectorRef);\n private readonly environmentInjector = inject(EnvironmentInjector);\n private readonly destroyRef = inject(DestroyRef);\n // Intersected with the rendering base because `KbqTreeNode` resolves its level and expansion state\n // through it; the option itself only ever touches the `KbqTreeOptionParent` half.\n override tree: KbqTreeOptionParent<T> & KbqTreeBase<T>;\n\n private readonly focusEvents = new Subject<KbqTreeOptionEvent>();\n\n private readonly blurEvents = new Subject<KbqTreeOptionEvent>();\n\n /** Emits when the option takes focus. */\n readonly onFocus: Observable<KbqTreeOptionEvent> = this.focusEvents.asObservable();\n\n /** Emits when the option loses focus. */\n readonly onBlur: Observable<KbqTreeOptionEvent> = this.blurEvents.asObservable();\n\n preventBlur: boolean = false;\n\n private readonly titleContainer = viewChild<ElementRef<HTMLElement>>('kbqTitleContainer');\n\n /** Container of the option text, measured by `kbq-title`. */\n get parentTextElement(): ElementRef<HTMLElement> | undefined {\n return this.titleContainer();\n }\n\n // Same element as `parentTextElement` — `.kbq-option-text` clips the text, so it is measured against itself.\n get textElement(): ElementRef<HTMLElement> | undefined {\n return this.parentTextElement;\n }\n\n readonly toggleElementDirective = contentChild(KbqTreeNodeToggleDirective);\n readonly toggleElementComponent = contentChild(KbqTreeNodeToggleComponent);\n readonly pseudoCheckbox = contentChild(KbqPseudoCheckbox);\n readonly actionButton = contentChild(KbqOptionActionComponent);\n\n private readonly tooltipTriggerQuery = contentChild(KbqTooltipTrigger);\n private readonly dropdownTriggerQuery = contentChild(KbqDropdownTrigger);\n\n // Getters rather than the signal queries themselves: `KbqOptionActionComponent` reads the triggers as\n // directive instances through KBQ_OPTION_ACTION_PARENT — see #DS-5079.\n\n /** Tooltip trigger projected into the option. */\n get tooltipTrigger(): KbqTooltipTrigger | undefined {\n return this.tooltipTriggerQuery();\n }\n\n /** Dropdown trigger projected into the option. */\n get dropdownTrigger(): KbqDropdownTrigger | undefined {\n return this.dropdownTriggerQuery();\n }\n\n readonly checkboxThirdState = input<boolean>(false);\n\n get externalPseudoCheckbox(): boolean {\n return !!this.pseudoCheckbox();\n }\n\n get value(): any {\n return this._value;\n }\n\n set value(value: any) {\n this._value = value;\n }\n\n private _value: any;\n\n /** @docs-private */\n readonly disabledInput = input<boolean, boolean | string | null | undefined>(false, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n /** Whether the option is disabled: through its own input, the tree, or the tree control's `isDisabled`. */\n get disabled(): boolean {\n if (this.selectAllRow()) {\n return this.disabledInput() || this.tree.disabled;\n }\n\n return this.disabledInput() || this.tree.disabled || this.tree.treeControl.isDisabled(this.data);\n }\n\n /**\n * `disabled` as of the last check, which the host bindings read: the tree control's `isDisabled` predicate gives\n * no notice of a change and may be costly, so a check asks it once.\n */\n protected checkedDisabled = false;\n\n /**\n * What the tree control's `isDisabled` and `isExpandable` say about the row. Derived, so a predicate reading a\n * signal brings the row back once that signal changes; `ngDoCheck` sets it on every check for one reading plain\n * state. Read by a single host binding, see `ariaExpanded`.\n */\n private readonly predicates = linkedSignal(() => this.resolvePredicates(), { equal: samePredicates });\n\n // Values of the ARIA host bindings as of the last check, resolved by `ngDoCheck`.\n private checkedAriaSelected: boolean | null = null;\n private checkedSelectAllState: string | null = null;\n private checkedCheckboxRow = false;\n\n /**\n * Whether the option can be selected by user interaction (click, keyboard, select all).\n * A non-selectable option remains focusable, navigable and expandable.\n * Programmatic selection (`setSelected`, `select`, value accessor) is not affected.\n * Options that are not rendered (e.g. collapsed) are not checked by \"select all\".\n */\n readonly selectable = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /**\n * Whether this option is the tree's \"select all\" row rather than a rendered data node.\n *\n * Such a row has no `data`, so everything that would resolve the option against the tree control\n * (`getValue`, `isDisabled`, `isExpandable`, descendants) is skipped — those accessors belong to the\n * consumer and must never be handed a node their data source has never seen. Its checkbox state and\n * selection are driven from the outside instead.\n *\n * @docs-private\n */\n readonly selectAllRow = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** @docs-private */\n readonly showCheckboxInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'showCheckbox',\n transform: booleanAttribute\n });\n\n /** Whether the option renders a pseudo-checkbox. Falls back to the tree's own mode until bound. */\n get showCheckbox(): boolean {\n return this.showCheckboxInput() ?? this.tree.showCheckbox;\n }\n\n /** Emits whenever the selected state of the option changes. */\n readonly selectionChange = output<KbqTreeOptionChange>();\n\n /** @deprecated Use `selectionChange` instead. Will be removed in 22.0.0. */\n readonly onSelectionChange = output<KbqTreeOptionChange>({ alias: 'onSelectionChange' });\n\n // Not an `output()`: `KbqTreeSelect` merges this stream with rxjs, which an `OutputEmitterRef`\n // cannot feed without wrapping every call site in `outputToObservable`.\n readonly userInteraction = new EventEmitter<void>();\n\n get selected(): boolean {\n return this.selectedState();\n }\n\n set selected(value: boolean) {\n const isSelected = coerceBooleanProperty(value);\n\n if (isSelected !== this.selectedState()) {\n this.setSelected(isSelected);\n }\n }\n\n private readonly selectedState = signal(false);\n\n get id(): string {\n return this._id;\n }\n\n private _id = `kbq-tree-option-${uniqueIdCounter++}`;\n\n get viewValue(): string {\n // TODO: Add input property alternative for node envs.\n return (this.getHostElement().textContent || '').trim();\n }\n\n get hasFocus(): boolean {\n return this.focused();\n }\n\n set hasFocus(value: boolean) {\n this.focused.set(value);\n }\n\n private readonly focused = signal(false);\n\n get isExpandable(): boolean {\n if (this.selectAllRow()) {\n return false;\n }\n\n return !this.toggleElement?.disabled && this.tree.treeControl.isExpandable(this.data);\n }\n\n /** The \"select all\" row sits above the tree at root depth; `getLevel` has no node to resolve for it. */\n override get level(): number {\n return this.selectAllRow() ? 0 : super.level;\n }\n\n get toggleElement(): KbqTreeNodeToggleBaseDirective<T> | undefined {\n return this.toggleElementComponent() || this.toggleElementDirective();\n }\n\n get isToggleInDefaultPlace(): boolean {\n return !!(this.toggleElementDirective() || this.toggleElementComponent());\n }\n\n get checkboxState(): KbqPseudoCheckboxState {\n return this.checkbox();\n }\n\n set checkboxState(value: KbqPseudoCheckboxState) {\n this.checkbox.set(value);\n }\n\n private readonly checkbox = signal<KbqPseudoCheckboxState>('unchecked');\n\n /**\n * `aria-expanded` of the row as of the last check, reported for every branch and omitted on a leaf.\n *\n * Deliberately not `isExpandable`, which also asks whether the toggle is operable: filtering\n * disables every toggle while leaving the matched branches expanded, and a branch that stops\n * reporting `aria-expanded` is announced as a leaf while its children are on screen.\n */\n protected get ariaExpanded(): boolean | null {\n // The one tracked read of `predicates`, which subscribes the row to the signals the predicates read: the\n // other bindings read the snapshot `ngDoCheck` takes along with it, as a second read of this row's own signal\n // would walk the producers of every row checked before it.\n return this.predicates().expanded;\n }\n\n /**\n * `aria-checked` of the row: tri-state for a checkbox option, and the \"select all\" state for the\n * row that drives it. `null` for a plain option, which reports `aria-selected` instead.\n */\n protected get ariaChecked(): string | null {\n // The checkbox state is read here rather than in `ngDoCheck`: this read is what brings the row back once the\n // state changes.\n return this.checkedCheckboxRow ? this.toAriaChecked(this.checkboxState) : this.checkedSelectAllState;\n }\n\n /** `aria-selected` of the row as of the last check. Options with a checkbox report `aria-checked` instead. */\n protected get ariaSelected(): boolean | null {\n return this.checkedAriaSelected;\n }\n\n constructor() {\n const tree = inject(KBQ_TREE_OPTION_PARENT_COMPONENT) as KbqTreeOptionParent<T> & KbqTreeBase<T>;\n\n super();\n\n this.tree = tree;\n }\n\n ngDoCheck(): void {\n // Asked once per check, for a predicate reading plain state; a set to an equal value does nothing.\n const predicates = this.resolvePredicates();\n\n this.predicates.set(predicates);\n\n if (predicates.disabled !== this.checkedDisabled) {\n this.checkedDisabled = predicates.disabled;\n this.changeDetectorRef.markForCheck();\n }\n\n // Resolved here, untracked: a tree checks its rows under the one reactive consumer of its view, where a signal\n // read again costs a walk over every signal read before it. The host bindings read each signal of the row once\n // (`selected`, `checkboxState`, `predicates`, the mode through `tree.multiple`), which brings the row back here\n // on a change.\n if (this.selectAllRow()) {\n this.checkedAriaSelected = null;\n this.checkedCheckboxRow = false;\n this.checkedSelectAllState = this.toAriaChecked(this.tree.selectAllState);\n } else {\n const showCheckbox = this.showCheckbox;\n\n this.checkedAriaSelected = showCheckbox ? null : this.selected;\n this.checkedCheckboxRow = showCheckbox;\n this.checkedSelectAllState = null;\n }\n }\n\n ngAfterContentInit(): void {\n if (this.selectAllRow()) return;\n\n // Its own state only: rendering a row changes no ancestor's, and the tree recomputes every row once the data\n // nodes change.\n Promise.resolve().then(() => this.syncCheckboxState());\n\n this.value = this.tree.treeControl.getValue(this.data);\n }\n\n /**\n * The value and the checkbox state were derived from the node this view held before it was reused,\n * and `ngAfterContentInit` does not run again. A stale `value` drops the row out of the tree's\n * `renderedOptions`, so it renders but can no longer be focused, selected or copied.\n *\n * @docs-private\n */\n override refresh(): void {\n super.refresh();\n\n if (this.selectAllRow()) return;\n\n this.value = this.tree.treeControl.getValue(this.data);\n\n this.markForCheck();\n }\n\n descendantsAllSelected(): boolean {\n const descendants = this.tree.treeControl.getDescendants(this.data);\n\n return descendants.every((child) => this.tree?.selectionModel.isSelected(child));\n }\n\n descendantsPartiallySelected(): boolean {\n const descendants = this.tree.treeControl.getDescendants(this.data);\n\n return descendants.some((child) => this.tree?.selectionModel.isSelected(child));\n }\n\n updateParentsCheckboxState(node: T) {\n const parents = new Set(this.tree.treeControl.getParents(node, []));\n\n if (!parents.size) return;\n\n // Each ancestor reads its state off the selection rather than off its children, so recomputing it is enough.\n this.tree.unorderedOptions.forEach((option) => {\n if (parents.has(option.data)) option.syncCheckboxState();\n });\n }\n\n updateCheckboxState = () => {\n if (this.selectAllRow()) return;\n\n this.syncCheckboxState();\n this.updateParentsCheckboxState(this.data);\n };\n\n toggle(): void {\n // Untracked, like the other imperative methods: called from a consumer's `effect()`, the state read on the\n // way — `selected`, focus, `disabled`, the inputs — would make the effect run again whenever it changes.\n untracked(() => (this.selected = !this.selected));\n }\n\n setSelected(selected: boolean): void {\n untracked(() => {\n if (this.selectAllRow() || this.selectedState() === selected || !this.tree.selectionModel) {\n return;\n }\n\n this.selectedState.set(selected);\n\n if (selected) {\n this.tree.selectionModel.select(this.data);\n } else {\n this.tree.selectionModel.deselect(this.data);\n }\n\n if (this.showCheckbox) {\n this.updateCheckboxState();\n }\n });\n }\n\n focus(focusOrigin?: FocusOrigin) {\n untracked(() => {\n if (focusOrigin === 'program' || this.disabled || this.actionButton()?.hasFocus) return;\n\n // With the pointer already on this node, revealing it would shift the tree out from under it.\n kbqFocusAndReveal(this.elementRef.nativeElement, focusOrigin === 'mouse');\n\n if (!this.hasFocus) {\n this.focusEvents.next({ option: this });\n\n Promise.resolve().then(() => {\n this.hasFocus = true;\n\n this.markForCheck();\n });\n }\n });\n }\n\n blur(): void {\n if (this.preventBlur) {\n return;\n }\n\n // Deferred until the focus has settled: whatever takes it — this option's action button, or another option,\n // which marks itself focused on a microtask — records it only after this blur. Reported before that, the move\n // reads as the focus leaving the options: the option would drop its focused state while its own action button\n // holds the focus, and the tree its active option.\n afterNextRender(\n () => {\n // Focus can be back by the time this runs (a blur and a focus in the same task): then nothing was lost.\n if (_getFocusedElementPierceShadowDom() === this.elementRef.nativeElement) return;\n\n if (this.actionButton()?.hasFocus || this.tree.optionShouldHoldFocusOnBlur) {\n return;\n }\n\n this.hasFocus = false;\n\n this.blurEvents.next({ option: this });\n },\n // The environment injector, not the option's: an option removed while focused is blurred as its view is\n // destroyed, and the tree still has to hear about it to move focus.\n { injector: this.environmentInjector }\n );\n }\n\n /** @docs-private */\n getHeight(): number {\n return kbqGetElementHeight(this.elementRef.nativeElement);\n }\n\n /**\n * Label the key manager's type-ahead matches against.\n *\n * The \"select all\" row is navigable but is not a data node, and its label is a localized phrase —\n * answering type-ahead with it would hijack every query starting with that letter.\n *\n * @docs-private\n */\n getLabel(): string {\n return this.selectAllRow() ? '' : this.viewValue;\n }\n\n select(setFocus = true): void {\n untracked(() => {\n if (this.selectAllRow() || this.selectedState()) {\n return;\n }\n\n this.selectedState.set(true);\n\n if (setFocus && !this.hasFocus) {\n this.focus();\n }\n\n this.updateCheckboxState();\n this.emitSelectionChangeEvent();\n });\n }\n\n deselect(): void {\n untracked(() => {\n if (this.selectAllRow() || !this.selectedState()) {\n return;\n }\n\n this.selectedState.set(false);\n\n this.updateCheckboxState();\n this.emitSelectionChangeEvent();\n });\n }\n\n onKeydown($event) {\n kbqFocusOptionActionOnTab($event, this.actionButton());\n }\n\n selectViaInteraction($event?: KeyboardEvent | MouseEvent): void {\n untracked(() => {\n if (this.disabled || !this.selectable()) {\n return;\n }\n\n this.userInteraction.emit();\n\n const shiftKey = $event ? hasModifierKey($event, 'shiftKey') : false;\n // ctrlKey is for Windows, metaKey is for MacOS\n const ctrlKey = $event ? hasModifierKey($event, 'ctrlKey', 'metaKey') : false;\n\n this.tree.setSelectedOptionsByClick(this, shiftKey, ctrlKey);\n });\n }\n\n emitSelectionChangeEvent(): void {\n // The tree can still hold an option whose node was re-rendered away until it rebuilds its list.\n if (this.destroyRef.destroyed) return;\n\n const event = new KbqTreeOptionChange(this);\n\n this.selectionChange.emit(event);\n this.onSelectionChange.emit(event);\n }\n\n getHostElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n markForCheck() {\n this.changeDetectorRef.markForCheck();\n\n // Its own state only: after a selection, data or mode change the tree calls this on every option.\n if (this.showCheckbox) {\n this.syncCheckboxState();\n }\n }\n\n /** @docs-private */\n protected onMouseenter() {\n if (this.disabled || !this.tree.inSelect) return;\n\n this.focus('mouse');\n }\n\n /** Recomputes the option's own checkbox state, leaving its ancestors as they are. */\n private syncCheckboxState(): void {\n if (this.selectAllRow()) return;\n\n if (this.checkboxThirdState() && this.isExpandable) {\n // One descendant walk, not two: `getDescendants` is a linear scan of the whole data set, and\n // the roll-up runs this method for every ancestor.\n const descendants = this.tree.treeControl.getDescendants(this.data);\n const selectedCount = descendants.filter((child) => this.tree.selectionModel.isSelected(child)).length;\n\n if (selectedCount === descendants.length) {\n this.checkboxState = 'checked';\n } else if (selectedCount > 0) {\n this.checkboxState = 'indeterminate';\n } else {\n this.checkboxState = this.selected ? 'checked' : 'unchecked';\n }\n } else {\n this.checkboxState = this.selected ? 'checked' : 'unchecked';\n }\n }\n\n private toAriaChecked(state: KbqPseudoCheckboxState): string {\n return state === 'indeterminate' ? 'mixed' : `${state === 'checked'}`;\n }\n\n private resolvePredicates(): TreeOptionPredicates {\n const branch = !this.selectAllRow() && this.tree.treeControl.isExpandable(this.data);\n\n return { disabled: this.disabled, expanded: branch ? this.isExpanded : null };\n }\n}\n","<ng-content select=\"kbq-tree-node-toggle, [kbq-tree-node-toggle], [kbqTreeNodeToggle]\" />\n\n@if (externalPseudoCheckbox) {\n <ng-content select=\"kbq-pseudo-checkbox\" />\n} @else if (showCheckbox) {\n <kbq-pseudo-checkbox [disabled]=\"disabled\" [state]=\"checkboxState\" />\n}\n\n<ng-content select=\"kbq-checkbox\" />\n\n<ng-content select=\"[kbq-icon]\" />\n\n<ng-content select=\"kbq-progress-spinner\" />\n\n<span #kbqTitleContainer class=\"kbq-option-text\">\n <ng-content />\n</span>\n\n@if (actionButton()) {\n <kbq-action-container>\n <ng-content select=\"kbq-option-action\" />\n </kbq-action-container>\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { AfterViewInit, computed, Directive, effect, ElementRef, inject, input, Renderer2 } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KbqTreeBase, KbqTreeNode } from './tree-base';\nimport { KbqTreeOption } from './tree-option.component';\n\n/** Regex used to split a string on its CSS units. */\nconst cssUnitPattern = /([A-Za-z%]+)$/;\n\n@Directive({\n selector: '[kbqTreeNodePadding]',\n exportAs: 'kbqTreeNodePadding'\n})\nexport class KbqTreeNodePadding<T> implements AfterViewInit {\n protected treeNode = inject<KbqTreeNode<T>>(KbqTreeNode);\n protected tree = inject<KbqTreeBase<T>>(KbqTreeBase);\n private renderer = inject(Renderer2);\n private element = inject<ElementRef<HTMLElement>>(ElementRef);\n // Optional so the directive also works on a bare `kbq-tree-node`, which has no option around it.\n private option = inject(KbqTreeOption, { optional: true });\n private dir = inject(Directionality, { optional: true });\n get level(): number {\n return this._level;\n }\n\n set level(value: number) {\n this.setLevelInput(value);\n }\n\n private _level: number;\n\n /** Indentation added per nesting level. Accepts a bare number (px) or a value with CSS units. */\n readonly indent = input<number | string>(12, { alias: 'kbqTreeNodePaddingIndent' });\n\n private readonly parsedIndent = computed(() => {\n const indent = this.indent();\n\n if (typeof indent !== 'string') {\n return { value: coerceNumberProperty(indent), units: 'px' };\n }\n\n const [value, units] = indent.split(cssUnitPattern);\n\n return { value: coerceNumberProperty(value), units: units || 'px' };\n });\n\n get leftPadding(): number {\n return (this.withIcon ? 0 : this.iconWidth) + this.parsedIndent().value;\n }\n\n get leftPaddingForFirstLevel(): number {\n const border = 2;\n\n return (this.withIcon ? 0 : this.iconWidth) + this.parsedIndent().value - border;\n }\n\n /** CSS units used for the indentation value. */\n get indentUnits(): string {\n return this.parsedIndent().units;\n }\n\n withIcon: boolean;\n\n /**\n * Horizontal room a toggle takes up in a row: its own 16px box plus the option's 8px `gap`. A node\n * without a toggle reserves the same amount so its content lines up with a sibling that has one —\n * which is why widening the toggle itself pushes every branch row out of line.\n */\n iconWidth: number = 24;\n\n constructor() {\n this.dir?.change?.pipe(takeUntilDestroyed()).subscribe(() => this.setPadding());\n\n // The node the padding was computed from is gone once its view is reused, and the replacement\n // can sit at a different level.\n this.treeNode.refreshed.pipe(takeUntilDestroyed()).subscribe(() => this.setPadding());\n\n effect(() => {\n this.parsedIndent();\n\n this.setPadding();\n });\n }\n\n ngAfterViewInit(): void {\n this.withIcon = this.option?.isToggleInDefaultPlace ?? false;\n this.setPadding();\n }\n\n paddingIndent(): string | null {\n const treeControl = this.tree.treeControl;\n const nodeLevel = this.treeNode.data && treeControl.getLevel ? treeControl.getLevel(this.treeNode.data) : 0;\n\n const level = this.level || nodeLevel;\n const { value, units } = this.parsedIndent();\n\n return level > 0 ? `${level * value + this.leftPadding}${units}` : `${this.leftPaddingForFirstLevel}${units}`;\n }\n\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n */\n private setLevelInput(value: number) {\n // Set to null as the fallback value so that _setPadding can fall back to the node level if the\n // consumer set the directive as `kbqTreeNodePadding=\"\"`. We still want to take this value if\n // they set 0 explicitly.\n this._level = coerceNumberProperty(value, null)!;\n this.setPadding();\n }\n\n private setPadding() {\n const padding = this.paddingIndent();\n const paddingProp = this.dir?.value === 'rtl' ? 'paddingRight' : 'paddingLeft';\n\n this.renderer.setStyle(this.element.nativeElement, paddingProp, padding);\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { KbqStateSaving } from '@koobiq/components/core';\nimport { KbqTreeNodeOutlet } from './outlet';\nimport { KbqTreeBase } from './tree-base';\n\n@Component({\n selector: 'kbq-tree',\n imports: [\n KbqTreeNodeOutlet\n ],\n template: `\n <ng-container kbqTreeNodeOutlet />\n `,\n styleUrls: ['./tree.scss', 'tree-tokens.scss'],\n // `KbqTreeNode` reaches its tree through `KbqTreeBase`, as it does in `KbqTreeSelection`.\n providers: [{ provide: KbqTreeBase, useExisting: KbqTree }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-tree',\n role: 'tree'\n },\n // `useStateSaving` and `stateSavingKey` are the directive's inputs, surfaced on the tree.\n hostDirectives: [\n { directive: KbqStateSaving, inputs: ['useStateSaving', 'stateSavingKey'] }\n ],\n exportAs: 'kbqTree'\n})\nexport class KbqTree extends KbqTreeBase<any> {}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { Platform } from '@angular/cdk/platform';\nimport {\n AfterContentInit,\n afterNextRender,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n effect,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Injector,\n input,\n IterableDiffer,\n linkedSignal,\n OnDestroy,\n output,\n Provider,\n QueryList,\n signal,\n untracked,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DOWN_ARROW,\n END,\n ENTER,\n FocusKeyManager,\n getKbqSelectNonArrayValueError,\n getSelectAllState,\n hasModifierKey,\n HOME,\n isCopy,\n isSelectAll,\n isVerticalMovement,\n KBQ_SELECT_LOCALE_CONFIGURATION,\n kbqGetElementHeight,\n kbqLeaveTabOrderOnTabOut,\n KbqLocaleOverridesDirective,\n KbqMultipleInput,\n kbqOptionalNumberAttribute,\n KbqPseudoCheckbox,\n KbqPseudoCheckboxState,\n kbqQueryListFrom,\n KbqSelectAllAdapter,\n kbqSelectAllHandlerTransform,\n KbqStateSaving,\n LEFT_ARROW,\n MultipleMode,\n PAGE_DOWN,\n PAGE_UP,\n resolveMultipleMode,\n RIGHT_ARROW,\n SPACE,\n TAB,\n toggleSelectAll,\n UP_ARROW\n} from '@koobiq/components/core';\nimport { KBQ_FORM_FIELD } from '@koobiq/components/form-field';\nimport { merge, Observable, Subscription } from 'rxjs';\nimport { AsyncScheduler } from 'rxjs/internal/scheduler/AsyncScheduler';\nimport { delay } from 'rxjs/operators';\nimport { FlatTreeControl } from './control/flat-tree-control';\nimport { KbqTreeNodeOutlet } from './outlet';\nimport { KbqTreeNodePadding } from './padding.directive';\nimport { KbqTreeBase } from './tree-base';\nimport { getKbqTreeSelectionOwnedMultipleError } from './tree-errors';\nimport { KBQ_TREE_OPTION_PARENT_COMPONENT, KbqTreeOption, KbqTreeOptionEvent } from './tree-option.component';\n\nexport const KBQ_SELECTION_TREE_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KbqTreeSelection),\n multi: true\n};\n\n/** How long the key manager collects keystrokes before matching them against the option labels. */\nconst typeAheadDebounce = 200;\n\nexport class KbqTreeSelectAllEvent<T, N = any> {\n constructor(\n public source: KbqTreeSelection<N>,\n public options: T[]\n ) {}\n}\n\n/**\n * Event class that occurs when copying an item from the KbqTreeSelection.\n * Used to pass data about the copied item and copy context.\n *\n * @param source - instance of KbqTreeSelection\n * @param option - instance of KbqTreeOption\n * @param event - original keyboard event (optional) that triggered the copy\n */\nexport class KbqTreeCopyEvent<T, N = any> {\n constructor(\n public source: KbqTreeSelection<N>,\n public option: T,\n public event?: KeyboardEvent\n ) {}\n}\n\nexport class KbqTreeNavigationChange<T, N = any> {\n constructor(\n public source: KbqTreeSelection<N>,\n public option: T\n ) {}\n}\n\nexport class KbqTreeSelectionChange<T, N = any> {\n constructor(\n public source: KbqTreeSelection<N>,\n public option: T,\n public options?: T[]\n ) {}\n}\n\n@Component({\n selector: 'kbq-tree-selection',\n imports: [\n KbqTreeNodeOutlet,\n KbqTreeOption,\n KbqTreeNodePadding,\n KbqPseudoCheckbox\n ],\n // `kbqTreeNodePadding` on the \"select all\" row falls back to level 0 when the option has no `data`,\n // which is exactly where the row belongs: aligned with the root nodes below it.\n template: `\n @if (showSelectAll) {\n <!-- Every read of selectAllState re-filters the rendered nodes against the data set, so the\n two bindings below share one through @let. The row's own aria-checked host binding walks\n it a second time: Ivy evaluates that binding after this template, and the option reads\n the state through KBQ_TREE_OPTION_PARENT_COMPONENT rather than from here. -->\n @let selectAllCheckboxState = selectAllState;\n\n <!-- role and aria-checked come from the option's own host bindings: a host binding runs\n after the parent template's, so an override here would be the one that loses. -->\n <kbq-tree-option\n class=\"kbq-tree-option_select-all\"\n kbqTreeNodePadding\n [selectAllRow]=\"true\"\n [selectable]=\"false\"\n [class.kbq-selected]=\"selectAllCheckboxState === 'checked'\"\n (click)=\"toggleSelectAll()\"\n >\n <kbq-pseudo-checkbox [state]=\"selectAllCheckboxState\" />\n {{ selectAllText }}\n </kbq-tree-option>\n }\n <ng-container kbqTreeNodeOutlet />\n `,\n styleUrls: ['./tree-selection.scss', 'tree-tokens.scss'],\n providers: [\n KBQ_SELECTION_TREE_VALUE_ACCESSOR,\n { provide: KBQ_TREE_OPTION_PARENT_COMPONENT, useExisting: KbqTreeSelection },\n { provide: KbqTreeBase, useExisting: KbqTreeSelection }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-tree-selection',\n role: 'tree',\n '[attr.tabindex]': 'tabIndex',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-disabled]': 'disabled || null',\n '[attr.aria-multiselectable]': 'multiple || null',\n '[attr.aria-label]': 'resolvedAriaLabel',\n '[attr.aria-labelledby]': 'resolvedAriaLabelledby',\n // The active option takes real DOM focus (`KbqTreeOption.focus`) and is advertised here on top\n // of that, so an AT that follows either model reports the same row.\n '[attr.aria-activedescendant]': 'keyManager?.activeItem?.id',\n '(focus)': 'focus($event)',\n '(keydown)': 'onKeyDown($event)',\n '(window:resize)': 'updateScrollSize()'\n },\n // `useStateSaving` and `stateSavingKey` are the directive's inputs, surfaced on the tree.\n hostDirectives: [\n { directive: KbqStateSaving, inputs: ['useStateSaving', 'stateSavingKey'] },\n { directive: KbqLocaleOverridesDirective, inputs: ['kbqLocaleOverrides: localeOverrides'] }\n ],\n exportAs: 'kbqTreeSelection'\n})\nexport class KbqTreeSelection<T = any>\n extends KbqTreeBase<T, FlatTreeControl<T>>\n implements ControlValueAccessor, AfterContentInit, AfterViewInit, OnDestroy\n{\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private scheduler = inject(AsyncScheduler);\n private clipboard = inject(Clipboard, { optional: true });\n private readonly platform = inject(Platform);\n private readonly injector = inject(Injector);\n protected readonly focusMonitor = inject(FocusMonitor);\n\n /**\n * Whether this tree-selection is rendered inside a select panel (enables option\n * hover-to-focus). Defaults to detecting a wrapping `KbqFormField`, and is forced to `true`\n * by the host `KbqTreeSelect` so hover works even when the tree-select has no form-field\n * wrapper (e.g. the filter-bar pipes render the tree-select bare).\n */\n inSelect = !!inject(KBQ_FORM_FIELD, { optional: true, host: true });\n\n renderedOptions = new QueryList<KbqTreeOption<T>>();\n\n keyManager: FocusKeyManager<KbqTreeOption<T>>;\n\n /**\n * Accessible name of the tree. Set it whenever the tree has no visible label of its own; a tree\n * embedded in a `kbq-tree-select` is labelled by the select instead.\n */\n readonly ariaLabel = input<string>(undefined!, { alias: 'aria-label' });\n\n /** Id of the element that labels the tree, for when the label is rendered next to it. */\n readonly ariaLabelledby = input<string>(undefined!, { alias: 'aria-labelledby' });\n\n /**\n * Accessible name written to the host.\n *\n * The host is the very element the consumer writes, and a host binding runs after their own\n * `[attr.aria-label]` binding on that element — an unset input reporting `null` would erase the name\n * they just set, because `[attr.]` never reaches the aliased input. Whatever is already on the\n * element therefore stands in for an unset input.\n */\n protected get resolvedAriaLabel(): string | null {\n return this.ariaLabel() || this.elementRef.nativeElement.getAttribute('aria-label');\n }\n\n /** Labelling element of the host. Falls back to the element's own attribute, see `resolvedAriaLabel`. */\n protected get resolvedAriaLabelledby(): string | null {\n return this.ariaLabelledby() || this.elementRef.nativeElement.getAttribute('aria-labelledby');\n }\n\n /**\n * Model backing the selection.\n *\n * The instance is replaced whenever {@link multiple} changes the multiplicity, because CDK freezes that\n * flag at construction. Subscribe to {@link selectionChange} rather than to `selectionModel.changed`:\n * a subscription taken on the model directly is left behind on the discarded instance.\n *\n * `T` is the type of the data nodes, inferred from `[treeControl]` in a template. A query names it:\n * `viewChild.required<KbqTreeSelection<Node>>(KbqTreeSelection)`.\n */\n selectionModel: SelectionModel<T>;\n\n resetFocusedItemOnBlur: boolean = true;\n\n userTabIndex: number | null = null;\n\n // this parameter used when select has a search field\n optionShouldHoldFocusOnBlur: boolean = false;\n\n /**\n * Whether the tree acts on keyboard input itself. Turned off by an embedding host that owns the\n * keyboard, such as `KbqTreeSelect`.\n */\n ownsKeyboard: boolean = true;\n\n /** Reference to the built-in \"select all\" row, rendered only while `selectAll` is on. */\n readonly selectAllOption = viewChild<KbqTreeOption<T>>(KbqTreeOption);\n\n private readonly unorderedOptionsQuery = contentChildren(KbqTreeOption);\n private readonly unorderedOptionsList = kbqQueryListFrom(this.unorderedOptionsQuery);\n\n get unorderedOptions(): QueryList<KbqTreeOption<T>> {\n return this.unorderedOptionsList();\n }\n\n readonly navigationChange = output<KbqTreeNavigationChange<KbqTreeOption<T>, T>>();\n\n /**\n * Emits when the selection changes. A stream rather than an `output()`: `KbqTreeSelect` pipes it with rxjs.\n */\n readonly selectionChange = new EventEmitter<KbqTreeSelectionChange<KbqTreeOption<T>, T>>();\n\n /** @docs-private */\n readonly selectionChangeOutput = outputFromObservable(this.selectionChange, { alias: 'selectionChange' });\n\n /** Emits after \"select all\" ran, with the options it could act on. */\n readonly selectAllChange = output<KbqTreeSelectAllEvent<KbqTreeOption<T>, T>>();\n\n /** @deprecated Use `selectAllChange` instead. Will be removed in 22.0.0. */\n readonly onSelectAll = output<KbqTreeSelectAllEvent<KbqTreeOption<T>, T>>({ alias: 'onSelectAll' });\n\n /**\n * Emits when the active option is copied with Ctrl/Cmd + C. Subscribing replaces the built-in\n * clipboard handler, so the event has to stay an `EventEmitter`: the decision is made by reading\n * `observed`, which `OutputEmitterRef` does not have. A template listener subscribes to it through\n * the output below.\n */\n readonly copyChange = new EventEmitter<KbqTreeCopyEvent<KbqTreeOption<T>, T>>();\n\n /** @docs-private */\n readonly copyChangeOutput = outputFromObservable(this.copyChange, { alias: 'copyChange' });\n\n /** @deprecated Use `copyChange` instead. Will be removed in 22.0.0. */\n readonly onCopy = new EventEmitter<KbqTreeCopyEvent<KbqTreeOption<T>, T>>();\n\n /** @docs-private */\n readonly onCopyOutput = outputFromObservable(this.onCopy, { alias: 'onCopy' });\n\n private sortedNodes: T[] = [];\n\n private lastSyncedDataNodes: readonly T[] | null = null;\n\n /** @docs-private */\n readonly autoSelectInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'autoSelect',\n transform: booleanAttribute\n });\n\n /** `undefined` while the value is derived from the mode. Written by `KbqTreeSelect` as well. */\n private readonly autoSelectState = linkedSignal(() => this.autoSelectInput());\n\n /**\n * Whether clicking a node clears the rest of the selection. Defaults to `true`, and to `false` for\n * `multiple=\"checkbox\"`.\n *\n * Assigning it — from a template binding or imperatively, as `KbqTreeSelect` does — replaces the\n * derived default, so a later {@link multiple} change leaves the value alone.\n */\n get autoSelect(): boolean {\n return this.autoSelectState() ?? this.mode() !== MultipleMode.CHECKBOX;\n }\n\n set autoSelect(value: boolean) {\n this.autoSelectState.set(coerceBooleanProperty(value));\n }\n\n get optionFocusChanges(): Observable<KbqTreeOptionEvent> {\n return merge(...this.renderedOptions.map((option) => option.onFocus));\n }\n\n get optionBlurChanges(): Observable<KbqTreeOptionEvent> {\n return merge(...this.renderedOptions.map((option) => option.onBlur));\n }\n\n /**\n * Selection mode of the tree.\n *\n * `checkbox` renders a checkbox in every node, `keyboard` selects without one. A bare `multiple` and\n * `true` both mean `checkbox`; `single`, `false` and an absent attribute mean single selection. The mode\n * can be changed at any time — narrowing it to single selection keeps the first selected node and\n * reports the shortened value through the `ControlValueAccessor`.\n *\n * A tree rendered inside a `kbq-tree-select` shares its `SelectionModel` with the select, so the\n * select decides how many nodes may be selected: switching this input between single and multiple\n * selection there throws. Switching between `checkbox` and `keyboard` only changes the presentation\n * and is allowed.\n *\n * The getter reports whether more than one node can be selected; read {@link multipleMode} for the mode\n * itself.\n */\n get multiple(): boolean {\n return !!this.mode();\n }\n\n /** @docs-private */\n readonly multipleInput = input<KbqMultipleInput | undefined>(undefined, { alias: 'multiple' });\n\n /** Resolved selection mode, or `null` when only one node can be selected. */\n get multipleMode(): MultipleMode | null {\n return this.mode();\n }\n\n set multipleMode(value: MultipleMode | null) {\n this.setMultipleMode(value);\n }\n\n /**\n * Backing signal of {@link multipleMode}. A signal rather than a field because the mode is also written\n * from inside the component and by `KbqTreeSelect`: options read it through `multiple` and\n * `showCheckbox`, and only a signal read re-runs their `OnPush` views and host bindings.\n */\n private readonly mode = signal<MultipleMode | null>(null);\n\n /** @docs-private */\n readonly noUnselectLastInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'noUnselectLast',\n transform: booleanAttribute\n });\n\n /** `undefined` while the value is derived from the mode. Written by `KbqTreeSelect` as well. */\n private readonly noUnselectLastState = linkedSignal(() => this.noUnselectLastInput());\n\n /**\n * Whether the last selected node can be deselected.\n * Derived from the mode until assigned, like {@link autoSelect}.\n */\n get noUnselectLast(): boolean {\n return this.noUnselectLastState() ?? this.mode() !== MultipleMode.CHECKBOX;\n }\n\n set noUnselectLast(value: boolean) {\n this.noUnselectLastState.set(coerceBooleanProperty(value));\n }\n\n /**\n * Whether typing printable characters moves the focus to the next option whose label starts with\n * them. On by default.\n *\n * Turn it off wherever the tree shares its keystrokes with a text field: an embedder such as\n * `KbqTreeSelect` routes everything the user types — the search query included — into this key\n * manager, and type-ahead would move the active option out from under the query.\n */\n get typeAhead(): boolean {\n return this.typeAheadState();\n }\n\n // Written imperatively by `KbqTreeSelect`, like `autoSelect` and `noUnselectLast`.\n set typeAhead(value: boolean) {\n this.typeAheadState.set(value);\n }\n\n /** @docs-private */\n readonly typeAheadInput = input<boolean, boolean | string | null | undefined>(true, {\n alias: 'typeAhead',\n transform: booleanAttribute\n });\n\n private readonly typeAheadState = linkedSignal(() => this.typeAheadInput());\n\n /** When `true`, a repeated Ctrl/Cmd+A deselects all options. Off by default (Ctrl+A only selects). */\n readonly selectAllToggle = input(false, { transform: booleanAttribute });\n\n /**\n * Whether to render the \"select all\" master checkbox above the nodes. Multiple selection only.\n *\n * Enabling it also makes Ctrl/Cmd + A a two-way toggle, so the shortcut and the checkbox never\n * disagree (`selectAllToggle` is implied).\n */\n get selectAll(): boolean {\n return this.selectAllEnabled();\n }\n\n // Written imperatively by `KbqTreeSelect`, like `autoSelect` and `noUnselectLast`.\n set selectAll(value: boolean) {\n this.selectAllEnabled.set(value);\n }\n\n /** @docs-private */\n readonly selectAllInput = input<boolean, boolean | string | null | undefined>(false, {\n alias: 'selectAll',\n transform: booleanAttribute\n });\n\n private readonly selectAllEnabled = linkedSignal(() => this.selectAllInput());\n\n /** Whether the \"select all\" row is currently rendered. */\n protected get showSelectAll(): boolean {\n return this.selectAll && this.multiple && !this.isEmpty;\n }\n\n /** Whether every node \"select all\" can act on is selected. */\n get allOptionsSelected(): boolean {\n const targets = this.selectAllTargets;\n\n // `[].every()` is `true`: with nothing for \"select all\" to act on, claiming \"all selected\" would\n // send the toggle down the deselect branch and check the master checkbox over an untouchable tree.\n return targets.length > 0 && targets.every((node) => this.selectionModel.isSelected(node));\n }\n\n /** State of the \"select all\" master checkbox. */\n get selectAllState(): KbqPseudoCheckboxState {\n return getSelectAllState(this.selectAllAdapter);\n }\n\n /** Label of the \"select all\" row. Follows the active locale. */\n protected get selectAllText(): string {\n return this.localeConfiguration().selectAll;\n }\n\n private readonly localeConfiguration = inject(KbqLocaleOverridesDirective, { self: true }).read(\n 'select',\n KBQ_SELECT_LOCALE_CONFIGURATION\n );\n\n /**\n * Data nodes \"select all\" acts on, and the ones its checkbox state is derived from.\n *\n * While a filter is active only the rendered nodes qualify — the hidden ones are not what the user\n * is looking at, and selecting them would contradict a master checkbox that can only report on what\n * is on screen. Without a filter the whole data set qualifies, collapsed branches included.\n */\n private get selectAllTargets(): T[] {\n // `treeControl` is an input, so it is still unset on the change-detection pass that sets it:\n // a consumer reading `allOptionsSelected`/`selectAllState` off a template reference — which is\n // exactly how the docs suggest swapping the trigger label — would otherwise get a TypeError\n // before the tree is wired up. Nothing is selectable yet at that point, so an empty set is right.\n if (!this.treeControl) {\n return [];\n }\n\n const nonSelectableDataNodes = this.renderedOptions\n .filter((option) => option.disabled || !option.selectable())\n .map((option) => option.data);\n\n const candidates = this.treeControl.filterValue.value?.length\n ? this.renderedOptions.map((option) => option.data)\n : (this.treeControl.dataNodes ?? []);\n\n // The `includes` check comes first on purpose: the \"select all\" row is itself a non-selectable\n // rendered option with no `data`, and `isDisabled` belongs to the consumer — it must never be\n // handed a node their data source has never seen.\n return candidates.filter(\n (node) => !nonSelectableDataNodes.includes(node) && !this.treeControl.isDisabled(node)\n );\n }\n\n /** Adapter shared by the master checkbox and the Ctrl/Cmd + A handler, so the two cannot drift apart. */\n private get selectAllAdapter(): KbqSelectAllAdapter<T> {\n return {\n items: this.selectAllTargets,\n isSelectable: () => true,\n isSelected: (node) => this.selectionModel.isSelected(node),\n setSelected: (node, selected) =>\n selected ? this.selectionModel.select(node) : this.selectionModel.deselect(node)\n };\n }\n\n /** @docs-private */\n readonly disabledInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n /** Whether the tree is disabled, bound with `[disabled]` or set by a form control. */\n get disabled(): boolean {\n return this.disabledState();\n }\n\n private readonly disabledState = signal(false);\n\n /** @docs-private */\n readonly tabIndexInput = input<number | undefined, number | string | null | undefined>(undefined, {\n alias: 'tabIndex',\n transform: kbqOptionalNumberAttribute\n });\n\n /** Tab index of the tree, `-1` while it is disabled. */\n get tabIndex(): number {\n return this.disabled ? -1 : this.tabIndexState();\n }\n\n private readonly tabIndexState = signal(0);\n\n get showCheckbox(): boolean {\n return this.mode() === MultipleMode.CHECKBOX;\n }\n\n get isEmpty(): boolean {\n return this.sortedNodes.length === 0;\n }\n\n /**\n * Number of real, data-backed nodes currently rendered — unlike `renderedOptions.length`, never\n * includes the \"select all\" row, which is appended to `renderedOptions` on its own, later-processed\n * reactive pass and would otherwise make a consumer's own node count race against that pass.\n */\n get nodesCount(): number {\n return this.sortedNodes.length;\n }\n\n private optionFocusSubscription: Subscription | null;\n\n private optionBlurSubscription: Subscription | null;\n\n private selectionModelSubscription: Subscription | null = null;\n\n /** Whether a value report is queued for the end of the current tick. Cleared by `writeValue` to cancel it. */\n private pendingValueReport = false;\n\n /** The `multiple` binding the mode was last set from, see `applyMultipleInput`. */\n private appliedMultipleInput: KbqMultipleInput | undefined;\n\n /** The `disabled` binding the state was last set from, see `applyDisabledInput`. */\n private appliedDisabledInput: boolean | undefined;\n\n /** Backs {@link syncingSelection}: a change of the selection made by code is no change to report back. */\n private writingValue = false;\n\n /**\n * Whether the tree is changing the selection model itself — to a value the form wrote, or onto the nodes of\n * reloaded data — rather than acting on the user. A host sharing the model, such as `KbqTreeSelect`, reports\n * no such change.\n *\n * @docs-private\n */\n get syncingSelection(): boolean {\n return this.writingValue;\n }\n\n /**\n * The last value the form wrote while some of the nodes it names were not in the data yet. Applied again as the\n * data changes, until every node is found or the selection is reported to the form.\n */\n private unresolvedValue: { value: any } | null = null;\n\n private destroyed = false;\n\n /** `treeControl.dataNodes` the options' checkbox states were last recomputed against. */\n private checkboxSyncedDataNodes: T[] | null = null;\n\n /**\n * The model this tree built for itself. `KbqTreeSelect` overwrites {@link selectionModel} with one it\n * shares with the tree, and the two diverging is how a mode change knows the model is not ours to swap.\n */\n private ownSelectionModel: SelectionModel<T>;\n\n constructor() {\n super();\n\n this.destroyRef.onDestroy(() => (this.destroyed = true));\n\n // Single selection until the `multiple` input says otherwise. A model has to exist this early\n // because `KbqTreeOption.setSelected` refuses to touch the selection without one, and a static\n // `multiple` attribute reaches the input right after the constructor, before any node exists.\n this.selectionModel = this.ownSelectionModel = new SelectionModel<T>(false);\n\n effect(() => {\n this.multipleInput();\n\n untracked(() => this.applyMultipleInput());\n });\n\n effect(() => {\n this.disabledInput();\n\n untracked(() => this.applyDisabledInput());\n });\n\n // Unbound, the input leaves the default, which follows the rendered options; bound back to `undefined` or\n // `null`, it restores that default.\n effect(() => {\n const tabIndex = this.tabIndexInput();\n\n untracked(() => {\n if (tabIndex !== undefined) {\n this.userTabIndex = tabIndex;\n this.tabIndexState.set(tabIndex);\n } else if (this.userTabIndex !== null) {\n this.userTabIndex = null;\n this.updateTabIndex();\n }\n });\n });\n\n effect(() => {\n this.typeAheadState();\n\n untracked(() => this.applyTypeAhead());\n });\n\n // `unorderedOptions.changes` never fires for the \"select all\" row — it is a view child — so the\n // rendered list has to be rebuilt whenever the view query resolves or drops it.\n effect(() => {\n this.selectAllOption();\n\n if (this.renderedOptions) {\n // Untracked: the options are read too, and their changes come through `unorderedOptions.changes`.\n untracked(() => this.updateRenderedOptions());\n }\n });\n }\n\n /** Selects every node \"select all\" can act on, or deselects them all when they are already selected. */\n protected toggleSelectAll(): void {\n this.selectAllOptions(true);\n }\n\n /**\n * Sets the mode from the `multiple` binding, once per bound value: an unbound input leaves what\n * `KbqTreeSelect` or the {@link multipleMode} setter wrote, and a value bound back to `undefined` means\n * single selection.\n *\n * Called by an effect, and by `writeValue` ahead of it: a forms directive on this element writes the\n * value from its own `ngOnChanges`, which runs before any effect of the view.\n */\n private applyMultipleInput(): void {\n const multiple = this.multipleInput();\n\n if (multiple === this.appliedMultipleInput) return;\n\n this.appliedMultipleInput = multiple;\n this.setMultipleMode(resolveMultipleMode(multiple));\n }\n\n /**\n * Sets the disabled state from the `disabled` binding, once per bound value, so that whichever of the binding\n * and the form control changed last wins. An unbound input leaves what the form control wrote.\n *\n * Called by an effect, and by `setDisabledState` ahead of it: a forms directive on this element calls that\n * from its own `ngOnChanges`, after the binding is set but before any effect of the view runs.\n */\n private applyDisabledInput(): void {\n const disabled = this.disabledInput();\n\n if (disabled === this.appliedDisabledInput) return;\n\n this.appliedDisabledInput = disabled;\n this.disabledState.set(!!disabled);\n }\n\n /**\n * Applies a new selection mode, rebuilding the `SelectionModel` when the multiplicity itself changes —\n * CDK freezes that flag at construction, so the model has to be replaced rather than reconfigured.\n */\n private setMultipleMode(next: MultipleMode | null): void {\n if (next === this.mode()) {\n return;\n }\n\n const rebuildNeeded = this.selectionModel.isMultipleSelection() !== !!next;\n\n // `KbqTreeSelect` hands the tree its own model and subscribes to it as well, so the multiplicity is\n // the select's to decide; replacing a model we do not own would drop those subscriptions. Thrown\n // rather than ignored: Angular caches the bound value either way, so a silently dropped write\n // leaves the binding and the tree permanently out of step with no way to retry.\n if (rebuildNeeded && this.selectionModel !== this.ownSelectionModel) {\n throw getKbqTreeSelectionOwnedMultipleError();\n }\n\n this.mode.set(next);\n\n // While the checkbox is hidden, the options leave its state as it was.\n if (next === MultipleMode.CHECKBOX) this.scheduleCheckboxSync(true);\n\n if (rebuildNeeded) {\n this.rebuildSelectionModel(!!next);\n }\n }\n\n /** Replaces the `SelectionModel` with one of the given multiplicity, keeping what the new one can hold. */\n private rebuildSelectionModel(multiple: boolean): void {\n // Copied because CDK hands back its own cached array.\n const selected = [...this.selectionModel.selected];\n // Narrowing keeps one node: the first selected one in render order, falling back to the model's own\n // order when every selected node sits inside a collapsed branch and is therefore not rendered.\n // Asked of the model rather than of the option, whose mirror is only re-synced a macrotask later.\n const rendered = this.renderedOptions?.find((option) => this.selectionModel.isSelected(option.data))?.data;\n const kept = multiple ? selected : selected.slice(0, 1);\n\n if (!multiple && rendered !== undefined && selected.includes(rendered)) {\n kept[0] = rendered;\n }\n\n const dropped = selected.filter((node) => !kept.includes(node));\n const droppedOptions = (this.renderedOptions?.toArray() ?? []).filter((option) =>\n dropped.includes(option.data)\n );\n\n // `initiallySelectedValues` seeds the model without emitting.\n this.selectionModel = this.ownSelectionModel = new SelectionModel<T>(multiple, kept);\n this.bindSelectionModel();\n\n // Reconciles both directions against the model that is actually in use now, so no node is left\n // painted by a stale mirror — a node whose option was created while it was already selected has\n // one, and so does every node the narrowing just dropped.\n this.renderedOptions?.forEach((option) => option.setSelected(this.selectionModel.isSelected(option.data)));\n\n if (droppedOptions.length) {\n // The nodes lost their selection without going through the model, so nothing else would\n // announce it.\n this.selectionChange.emit(new KbqTreeSelectionChange(this, droppedOptions[0], droppedOptions));\n }\n\n // Reported on every multiplicity change, not only when the selection shrank: `getSelectedValues`\n // returns a bare value in single selection and an array in multiple, so widening changes the shape\n // the form control has to hold even though nothing was dropped.\n this.scheduleValueReport();\n }\n\n /**\n * Reports the value once the current change-detection pass is over: a bound `[multiple]` is written\n * during change detection, and reporting straight back to the form control there would raise\n * \"Expression has changed after it was checked\". Coalesced so that several mode changes in one tick\n * produce one notification, and dropped if the form writes a value or the tree is gone by the time it runs.\n */\n private scheduleValueReport(): void {\n if (this.pendingValueReport) {\n return;\n }\n\n this.pendingValueReport = true;\n\n Promise.resolve().then(() => {\n if (!this.pendingValueReport) return;\n\n this.pendingValueReport = false;\n\n if (!this.destroyed) {\n this.reportValue();\n }\n });\n }\n\n /** Reports the selection to the form, which then holds it instead of a value still waiting for its nodes. */\n private reportValue(): void {\n this.unresolvedValue = null;\n this.onChange(this.getSelectedValues());\n }\n\n /** (Re)points the change subscription at the current {@link selectionModel}. */\n private bindSelectionModel(): void {\n this.selectionModelSubscription?.unsubscribe();\n\n this.selectionModelSubscription = this.selectionModel.changed\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (!this.writingValue) {\n this.reportValue();\n }\n\n this.renderedOptions.notifyOnChanges();\n // The \"select all\" row renders the selection state.\n this.changeDetectorRef.markForCheck();\n });\n }\n\n ngAfterContentInit(): void {\n super.ngAfterContentInit();\n\n if (this.platform.isBrowser) {\n this.unorderedOptions.changes\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(this.updateRenderedOptions);\n }\n\n this.keyManager = new FocusKeyManager<KbqTreeOption<T>>(this.renderedOptions)\n .withVerticalOrientation(true)\n .withHorizontalOrientation(null);\n\n this.applyTypeAhead();\n\n this.keyManager.change.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n // `aria-activedescendant` is bound to the active option, and nothing else in this view\n // changes when the key manager moves.\n this.changeDetectorRef.markForCheck();\n\n if (this.keyManager.activeItem) {\n this.emitNavigationEvent(this.keyManager.activeItem);\n\n // todo need check this logic\n if (this.autoSelect && !this.keyManager.activeItem.disabled) {\n this.updateOptionsFocus();\n }\n }\n });\n\n kbqLeaveTabOrderOnTabOut(\n this.keyManager.tabOut,\n this.elementRef.nativeElement,\n () => this.tabIndex,\n this.destroyRef\n );\n\n this.bindSelectionModel();\n\n this.renderedOptions.changes\n .pipe(delay(0, this.scheduler), takeUntilDestroyed(this.destroyRef))\n .subscribe((options) => {\n this.resetOptions();\n\n // Check to see if we need to update our tab index\n this.updateTabIndex();\n\n this.syncSelectionModelToDataNodes();\n\n const selectedValues = this.multiple ? this.getSelectedValues() : [this.getSelectedValues()];\n\n options.forEach((option) => {\n if (selectedValues.includes(option.value)) {\n option.select(false);\n } else {\n option.deselect();\n }\n\n option.markForCheck();\n });\n });\n }\n\n /**\n * Rebuilds the tree around a selection model owned by an embedding host, such as `KbqTreeSelect`.\n *\n * The host has to take the model over before the tree starts reacting to it, and re-running\n * `ngAfterContentInit()` is not a way to do that: neither `unorderedOptions` nor `renderedOptions` is\n * ever re-created, so a second run would only leave a second set of subscribers on both — every options\n * change handled twice, and the whole option sweep run twice per emission. Only the subscription that\n * depends on the model has to move, which is exactly what `bindSelectionModel` does.\n */\n initializeForEmbedding(selectionModel: SelectionModel<T>): void {\n this.selectionModel = selectionModel;\n\n this.bindSelectionModel();\n }\n\n override ngAfterContentChecked(): void {\n // Syncs the list here so `changes` emits after the projected items are bound and before the host bindings.\n this.unorderedOptionsList();\n\n super.ngAfterContentChecked();\n }\n\n ngAfterViewInit(): void {\n // Reports the focus leaving only when it lands outside the tree (or nowhere): the host hands it to an option\n // on entry, and options hand it on to each other or to their action buttons, none of which blurs the tree.\n this.focusMonitor\n .monitor(this.elementRef, true)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((origin) => {\n if (!origin) this.blur();\n });\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n\n this.dropSubscriptions();\n\n this.focusMonitor.stopMonitoring(this.elementRef);\n }\n\n focus($event): void {\n if (this.renderedOptions.length === 0 || this.isFocusReceivedFromNestedOption($event)) {\n return;\n }\n\n this.keyManager.setFocusOrigin('keyboard');\n\n if (this.selectionModel.selected.length) {\n this.highlightSelectedOption();\n } else {\n this.keyManager.setFirstItemActive();\n }\n\n this.keyManager.setFocusOrigin('program');\n }\n\n /** @docs-private */\n highlightSelectedOption(): void {\n untracked(() => {\n // The selection can hold nodes that are not rendered — collapsed branches, or references left\n // over from a data replacement. Falling back keeps `focus()` from ending with nothing focused\n // at all, since it already took the branch that skips `setFirstItemActive`.\n const target =\n this.renderedOptions.find((item) => item.data === this.selectionModel.selected[0]) ??\n this.keyManager.activeItem;\n\n if (target) {\n target.focus();\n } else {\n this.keyManager.setFirstItemActive();\n }\n });\n }\n\n blur() {\n untracked(() => {\n if (!this.hasFocusedOption() && this.resetFocusedItemOnBlur) {\n this.keyManager.setActiveItem(-1);\n }\n\n this.onTouched();\n this.changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * Host listener for keyboard input.\n *\n * Does nothing while an embedding host owns the keyboard — `KbqTreeSelect` routes every key through\n * its own panel handler and calls back into `handleKeydown` for the parts it delegates, so without\n * this guard the same event would be acted on twice.\n */\n onKeyDown(event: KeyboardEvent): void {\n if (!this.ownsKeyboard) return;\n\n this.handleKeydown(event);\n }\n\n /** Runs the tree's own keyboard handling, whether or not it owns the keyboard. */\n handleKeydown(event: KeyboardEvent): void {\n this.keyManager.setFocusOrigin('keyboard');\n const keyCode = event.keyCode;\n\n if ([SPACE, LEFT_ARROW, RIGHT_ARROW].includes(keyCode) || isVerticalMovement(event)) {\n event.preventDefault();\n }\n\n if (this.multiple && isSelectAll(event)) {\n this.selectAllHandler(event, this);\n\n return;\n } else if (isCopy(event)) {\n this.copyActiveOption(event);\n\n return;\n } else if (keyCode === TAB) {\n this.keyManager.tabOut.next();\n\n return;\n } else if (keyCode === LEFT_ARROW && this.keyManager.activeItem) {\n const activeItem = this.keyManager.activeItem;\n\n if (activeItem.isExpandable && activeItem.isExpanded) {\n this.treeControl.collapse(activeItem.data);\n this.saveState();\n } else {\n this.setActiveParentOption(activeItem);\n }\n\n return;\n } else if (keyCode === RIGHT_ARROW && this.keyManager.activeItem) {\n const activeItem = this.keyManager.activeItem;\n\n if (activeItem.isExpandable && !activeItem.isExpanded) {\n this.treeControl.expand(activeItem.data);\n this.saveState();\n } else if (activeItem.isExpandable) {\n this.setActiveFirstChildOption(activeItem);\n }\n\n return;\n } else if (keyCode === DOWN_ARROW) {\n this.keyManager.setNextItemActive();\n } else if (keyCode === UP_ARROW) {\n this.keyManager.setPreviousItemActive();\n } else if ([SPACE, ENTER].includes(keyCode)) {\n this.toggleFocusedOption();\n\n return;\n } else if (keyCode === HOME) {\n this.keyManager.setFirstItemActive();\n } else if (keyCode === END) {\n this.keyManager.setLastItemActive();\n } else if (keyCode === PAGE_UP) {\n this.keyManager.setPreviousPageItemActive();\n } else if (keyCode === PAGE_DOWN) {\n this.keyManager.setNextPageItemActive();\n } else {\n // Whatever is left is either a printable character, which the key manager turns into a\n // type-ahead query, or a key nothing here reacts to. Every key handled above returns or is\n // matched before this point, so the manager only ever sees the leftovers.\n //\n // Ctrl/Cmd/Alt combinations are the application's shortcuts, not text: the key manager feeds\n // its letter stream from the `default` branch without a modifier guard of its own, so Ctrl+S\n // would otherwise type-ahead to the first option starting with \"S\" and move focus there.\n if (!hasModifierKey(event, 'ctrlKey', 'metaKey', 'altKey')) {\n this.keyManager.onKeydown(event);\n }\n\n return;\n }\n\n if (this.keyManager.activeItem && isVerticalMovement(event)) {\n this.setSelectedOptionsByKey(\n this.keyManager.activeItem,\n hasModifierKey(event, 'shiftKey'),\n // ctrlKey is for Windows, metaKey is for MacOS\n hasModifierKey(event, 'ctrlKey', 'metaKey')\n );\n }\n }\n\n /** @docs-private */\n updateScrollSize(): void {\n if (!this.renderedOptions.first) {\n return;\n }\n\n const optionHeight = this.renderedOptions.first.getHeight();\n\n // `getHeight()` is 0 whenever the option is not laid out (SSR, jsdom, `display: none`);\n // dividing by it would hand the key manager a `NaN` page size.\n if (!optionHeight) {\n return;\n }\n\n this.keyManager.withScrollSize(Math.floor(this.getHeight() / optionHeight));\n }\n\n /** @docs-private */\n setSelectedOptionsByKey(option: KbqTreeOption<T>, shiftKey: boolean, ctrlKey: boolean): void {\n if (shiftKey && this.multiple) {\n this.selectActiveOptions();\n\n this.emitChangeEvent(option);\n } else if (ctrlKey) {\n if (!this.canDeselectLast(option)) {\n return;\n }\n } else if (this.autoSelect && option.selectable()) {\n this.selectionModel.clear();\n this.selectionModel.toggle(option.data);\n\n this.emitChangeEvent(option);\n }\n }\n\n /** @docs-private */\n setSelectedOptionsByClick(option: KbqTreeOption<T>, shiftKey: boolean, ctrlKey: boolean): void {\n if (option.disabled || !option.selectable()) {\n return;\n }\n\n if (!shiftKey && !ctrlKey) {\n this.keyManager.setActiveItem(option);\n }\n\n if (shiftKey && this.multiple) {\n this.selectActiveOptions();\n } else if (ctrlKey) {\n if (!this.canDeselectLast(option)) {\n return;\n }\n\n this.selectionModel.toggle(option.data);\n this.keyManager.setActiveItem(option);\n } else if (this.autoSelect) {\n this.selectionModel.clear();\n this.selectionModel.toggle(option.data);\n } else {\n this.selectionModel.toggle(option.data);\n }\n\n this.emitChangeEvent(option);\n }\n\n /** @docs-private */\n protected selectActiveOptions(): void {\n const options = this.renderedOptions.toArray();\n\n let fromIndex = this.keyManager.previousActiveItemIndex;\n let toIndex = (this.keyManager.previousActiveItemIndex = this.keyManager.activeItemIndex);\n\n const selectedOptionState = options[fromIndex]?.selected;\n\n if (toIndex === fromIndex || fromIndex === -1) {\n if (options[toIndex]?.selectable()) {\n options[toIndex].toggle();\n }\n\n return;\n }\n\n if (fromIndex > toIndex) {\n [fromIndex, toIndex] = [toIndex, fromIndex];\n }\n\n options\n .slice(fromIndex, toIndex + 1)\n .filter((item) => !item.disabled && item.selectable())\n .forEach((renderedOption) => {\n if (!selectedOptionState && this.noUnselectLast && this.selectionModel.selected.length === 1) {\n return;\n }\n\n renderedOption.setSelected(selectedOptionState);\n });\n }\n\n /** @docs-private */\n protected toggleFocusedOption(): void {\n const focusedOption = this.keyManager.activeItem;\n\n // The row is not selectable, so nothing below would act on it. Handling it here covers both focus\n // positions — the row itself and the search field a wrapping select keeps focus in.\n if (focusedOption && focusedOption === this.selectAllOption()) {\n this.toggleSelectAll();\n\n return;\n }\n\n if (!focusedOption?.selectable()) return;\n\n if (focusedOption && (!focusedOption.selected || this.canDeselectLast(focusedOption))) {\n this.selectionModel.toggle(focusedOption.data);\n this.emitChangeEvent(focusedOption);\n }\n }\n\n /** @docs-private */\n renderNodeChanges(\n data: T[] | ReadonlyArray<T>,\n dataDiffer: IterableDiffer<T> = this.dataDiffer,\n viewContainer: ViewContainerRef = this.nodeOutlet.viewContainer,\n parentData?: T\n ): void {\n // Not `super.renderNodeChanges`: that would run change detection over this very view before\n // `sortedNodes` is refreshed, so the \"select all\" row — which is rendered off `isEmpty` — would\n // need a second pass to catch up. One pass, after the state its template reads is current.\n const changed = this.applyNodeChanges(data, dataDiffer, viewContainer, parentData);\n\n this.sortedNodes = this.getSortedNodes(viewContainer);\n\n this.changeDetectorRef.detectChanges();\n\n this.scheduleCheckboxSync(false);\n\n // The \"select all\" row is rendered ahead of what its state reads: new rows bind their inputs after it and join\n // `renderedOptions` only once bound, and `KbqTreeFlatDataSource` assigns `dataNodes` after it emits. Nothing\n // else in the tree reads that state but the checkbox sync above, so a tree without the row is done in this one\n // pass. Marked for check, which reaches the views above too: a template reading `allOptionsSelected` by\n // reference reads the same state.\n if (!this.showSelectAll) return;\n\n const dataNodes = this.treeControl.dataNodes;\n\n afterNextRender(\n () => {\n if (changed || this.treeControl.dataNodes !== dataNodes) this.changeDetectorRef.markForCheck();\n },\n { injector: this.injector }\n );\n }\n\n /**\n * Recomputes every option's checkbox state where no selection change follows to do it: after `dataNodes` is\n * replaced, which moves the descendants a branch counts, and once a hidden checkbox appears. A microtask later, as\n * a flat data source assigns `dataNodes` only after it emits.\n */\n private scheduleCheckboxSync(force: boolean): void {\n Promise.resolve().then(() => {\n const dataNodes = this.treeControl?.dataNodes ?? null;\n\n if (this.destroyed || (!force && dataNodes === this.checkboxSyncedDataNodes)) return;\n\n this.checkboxSyncedDataNodes = dataNodes;\n this.unorderedOptions.forEach((option) => option.markForCheck());\n });\n }\n\n /** @docs-private */\n protected emitNavigationEvent(option: KbqTreeOption<T>): void {\n this.navigationChange.emit(new KbqTreeNavigationChange(this, option));\n }\n\n /** @docs-private */\n protected emitChangeEvent(option: KbqTreeOption<T>): void {\n this.selectionChange.emit(new KbqTreeSelectionChange(this, option, [option]));\n }\n\n /** @docs-private */\n readonly selectAllHandlerInput = input<\n ((event: KeyboardEvent, tree: KbqTreeSelection<T>) => void) | undefined,\n ((event: KeyboardEvent, tree: KbqTreeSelection<T>) => void) | undefined\n >(undefined, {\n alias: 'selectAllHandler',\n transform: kbqSelectAllHandlerTransform\n });\n\n /**\n * Function for handling the combination Ctrl + A (select all). By default, the internal handler is used,\n * which toggles the selection of all non-disabled, selectable options.\n */\n get selectAllHandler(): (event: KeyboardEvent, tree: KbqTreeSelection<T>) => void {\n return this.selectAllHandlerInput() ?? this.defaultSelectAllHandler;\n }\n\n private defaultSelectAllHandler(event: KeyboardEvent, tree: KbqTreeSelection<T>): void {\n event.preventDefault();\n\n tree.selectAllOptions();\n }\n\n selectAllOptions(allowDeselect?: boolean): void {\n // Untracked, its default included, like the other imperative methods: called from a consumer's `effect()`,\n // the state read on the way — the options, `disabled`, the mode, the inputs — would make the effect run\n // again whenever it changes.\n untracked(() => {\n // The row's own `(click)` and the Ctrl/Cmd + A shortcut both funnel through here, so this is the\n // single place to refuse acting while the whole tree is disabled — mirrors the guard every other\n // row already gets via `KbqTreeOption.selectViaInteraction()`.\n if (this.disabled) return;\n\n // Selection is applied at the data-node level (incl. collapsed/non-rendered nodes unless a filter\n // is active), while the emitted events carry the selectable rendered options.\n const selectableOptions = this.renderedOptions.filter((option) => !option.disabled && option.selectable());\n\n // `toggleSelectAll` returns the data nodes whose selection actually flipped — the source of\n // truth, unlike the cached `option.selected` which lags until change detection.\n const changed = toggleSelectAll(this.selectAllAdapter, {\n allowDeselect: allowDeselect ?? (this.selectAll || this.selectAllToggle())\n });\n\n const changedData = new Set(changed);\n const changedOptions = selectableOptions.filter((option) => changedData.has(option.data));\n\n // Skip `selectionChange` on a no-op (e.g. Ctrl+A while everything is already selected and\n // `allowDeselect` is off) so `KbqTreeSelectionChange.option` is never `undefined`.\n if (changedOptions.length > 0) {\n this.selectionChange.emit(new KbqTreeSelectionChange(this, changedOptions[0], changedOptions));\n }\n\n const selectAllEvent = new KbqTreeSelectAllEvent(this, selectableOptions);\n\n this.selectAllChange.emit(selectAllEvent);\n this.onSelectAll.emit(selectAllEvent);\n });\n }\n\n copyActiveOption(event: KeyboardEvent): void {\n if (!this.keyManager.activeItem) return;\n\n const option = this.keyManager.activeItem;\n\n option.preventBlur = true;\n\n if (this.copyChange.observed || this.onCopy.observed) {\n const copyEvent = new KbqTreeCopyEvent(this, option, event);\n\n this.copyChange.emit(copyEvent);\n this.onCopy.emit(copyEvent);\n } else {\n this.onCopyDefaultHandler();\n\n event.preventDefault();\n }\n\n option.preventBlur = false;\n }\n\n writeValue(value: any): void {\n untracked(() => {\n this.applyMultipleInput();\n\n if (this.multiple && value && !Array.isArray(value)) {\n throw getKbqSelectNonArrayValueError();\n }\n\n // The form holds the value it writes, so a mode change has nothing left to report.\n this.pendingValueReport = false;\n\n this.applyWrittenValue(value);\n });\n }\n\n /** Selects the nodes of a value the form wrote, and keeps the value for the data still to come if any is missing. */\n private applyWrittenValue(value: any): void {\n // A node value can be falsy, `0` or `''`: only a missing value clears the single selection.\n const values: any[] | null = this.multiple\n ? Array.isArray(value)\n ? value\n : null\n : value === null || value === undefined\n ? null\n : [value];\n\n this.syncSelection(() => (values ? this.setOptionsFromValues(values) : this.selectionModel.clear()));\n\n this.unresolvedValue = values?.some((item) => !this.treeControl.hasValue(item)) ? { value } : null;\n }\n\n /** Runs a change of the selection made by code, which reports nothing back to the form or to a host. */\n private syncSelection(change: () => void): void {\n // Restored rather than cleared: a value written while this one is applied must not end the outer write.\n const wasWritingValue = this.writingValue;\n\n this.writingValue = true;\n\n try {\n change();\n } finally {\n this.writingValue = wasWritingValue;\n }\n }\n\n /**\n * Called when the value changes. Needed to properly implement `ControlValueAccessor`.\n *\n * @docs-private\n */\n onChange: (value: any) => void = () => {};\n\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Called when the control is blurred. Needed to properly implement `ControlValueAccessor`.\n *\n * @docs-private\n */\n onTouched = () => {};\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n */\n setDisabledState(isDisabled: boolean): void {\n untracked(() => {\n this.applyDisabledInput();\n this.disabledState.set(isDisabled);\n });\n }\n\n /** @docs-private */\n setOptionsFromValues(values: any[]): void {\n untracked(() => {\n this.selectionModel.clear();\n\n const valuesToSelect = values.reduce((result, value) => {\n return this.treeControl.hasValue(value) ? [...result, this.treeControl.hasValue(value)] : [...result];\n }, []);\n\n this.selectionModel.select(...valuesToSelect);\n });\n }\n\n /**\n * Rebinds orphan node references in selectionModel to current treeControl.dataNodes by value.\n * Needed after dataSource.data is replaced — selectionModel holds references to old node\n * objects, but options render with new ones, so toggle()/isSelected() break on identity.\n *\n * A value the form wrote ahead of its nodes is applied again instead, which resolves every node anew.\n * Either way the selection only follows the data, so nothing is reported.\n */\n private syncSelectionModelToDataNodes(): void {\n const currentNodes = this.treeControl.dataNodes;\n\n // Fast path: dataNodes ref hasn't changed since last sync → orphans impossible.\n // Skips work on filter / expand / selection-toggle re-renders where data ref is stable.\n if (currentNodes === this.lastSyncedDataNodes) return;\n this.lastSyncedDataNodes = currentNodes;\n\n if (this.unresolvedValue) {\n this.applyWrittenValue(this.unresolvedValue.value);\n\n return;\n }\n\n if (this.selectionModel.isEmpty() || !currentNodes?.length) return;\n\n const selected = this.selectionModel.selected;\n const currentNodesSet = new Set<T>(currentNodes);\n\n let hasOrphans = false;\n\n for (const node of selected) {\n if (!currentNodesSet.has(node)) {\n hasOrphans = true;\n break;\n }\n }\n\n if (!hasOrphans) return;\n\n const reconciled = selected.map((node) => {\n if (currentNodesSet.has(node)) return node;\n\n const replacement = this.treeControl.hasValue(this.treeControl.getValue(node));\n\n return replacement ?? node;\n });\n\n this.syncSelection(() => this.selectionModel.setSelection(...reconciled));\n }\n\n /** @docs-private */\n getSelectedValues(): any[] {\n const selectedValues = this.selectionModel.selected.map((selected) => this.treeControl.getValue(selected));\n\n return this.multiple ? selectedValues : selectedValues[0];\n }\n\n setStateChildren(option: KbqTreeOption<T>, state: boolean) {\n untracked(() => {\n const valuesToChange = this.treeControl.getDescendants(option.data);\n\n if (state) {\n this.selectionModel.select(...valuesToChange);\n } else {\n this.selectionModel.deselect(...valuesToChange);\n }\n });\n }\n\n private onCopyDefaultHandler(): void {\n this.clipboard?.copy(this.keyManager.activeItem!.value);\n }\n\n /**\n * Moves focus to the closest enabled ancestor of the active option — ArrowLeft on a leaf, on an\n * already-collapsed node, or on a node whose toggle is disabled.\n *\n * Ancestors are resolved against `renderedOptions` rather than `treeControl.dataNodes`: every\n * ancestor of a visible option is itself visible, options are rendered depth-first, and these are\n * the indices `keyManager` navigates — so the walk starts from `keyManager.activeItemIndex`.\n * Scanning backwards, the first option with a smaller level is the parent.\n *\n * A disabled option cannot take focus (`KbqTreeOption.focus` refuses it), so the walk steps over a\n * disabled ancestor and narrows `level` to that ancestor's level. Without narrowing, the scan would\n * continue against the original level and land on a preceding sibling of the parent.\n */\n private setActiveParentOption(activeOption: KbqTreeOption<T>): void {\n const options = this.renderedOptions.toArray();\n\n let level = activeOption.level;\n\n for (let index = this.keyManager.activeItemIndex - 1; index >= 0; index--) {\n const option = options[index];\n\n if (option.level >= level) {\n continue;\n }\n\n if (!option.disabled) {\n this.keyManager.setActiveItem(index);\n\n return;\n }\n\n level = option.level;\n }\n }\n\n /** `-1` is the key manager's way of keeping the letter stream running but never matching on it. */\n private applyTypeAhead(): void {\n this.keyManager?.withTypeAhead(typeAheadDebounce, this.typeAhead ? 0 : -1);\n }\n\n /**\n * Moves focus to the first child of an already-expanded option — ArrowRight on an expanded node.\n *\n * The mirror of `setActiveParentOption`: the first rendered option after the active one is its\n * first child whenever its level is greater, so nothing has to be re-derived from `treeControl`.\n * A disabled child cannot take focus, so the walk continues while the options stay inside the\n * subtree, and stops as soon as the level falls back to the active option's own.\n */\n private setActiveFirstChildOption(activeOption: KbqTreeOption<T>): void {\n const options = this.renderedOptions.toArray();\n\n for (let index = this.keyManager.activeItemIndex + 1; index < options.length; index++) {\n const option = options[index];\n\n if (option.level <= activeOption.level) {\n return;\n }\n\n if (!option.disabled) {\n this.keyManager.setActiveItem(index);\n\n return;\n }\n }\n }\n\n private getHeight(): number {\n return kbqGetElementHeight(this.elementRef.nativeElement);\n }\n\n /** A tree with nothing rendered leaves the tab order, unless a tab index other than `0` is bound. */\n private updateTabIndex(): void {\n this.tabIndexState.set(this.userTabIndex || (this.renderedOptions.length === 0 ? -1 : 0));\n }\n\n private updateRenderedOptions = () => {\n const orderedOptions: KbqTreeOption<T>[] = [];\n\n // The \"select all\" row is rendered by this component's own template, so it never reaches the\n // `unorderedOptions` content query — but it is the first thing on screen and has to lead the\n // list the key manager navigates.\n const selectAllOption = this.selectAllOption();\n\n if (selectAllOption) {\n orderedOptions.push(selectAllOption);\n }\n\n this.sortedNodes.forEach((node) => {\n // By node first: nodes do not have to carry distinct values, and a value match would hand every node with\n // the same value the first option holding it.\n const found =\n this.unorderedOptions.find((option) => option.data === node) ??\n this.unorderedOptions.find((option) => option.value === this.treeControl.getValue(node));\n\n if (found) {\n orderedOptions.push(found);\n }\n });\n\n this.renderedOptions.reset(orderedOptions);\n this.renderedOptions.notifyOnChanges();\n\n this.updateScrollSize();\n };\n\n private getSortedNodes(viewContainer: ViewContainerRef): T[] {\n const array: T[] = [];\n\n for (let i = 0; i < viewContainer.length; i++) {\n const viewRef = viewContainer.get(i) as any;\n\n array.push(viewRef.context.$implicit);\n }\n\n return array;\n }\n\n private resetOptions() {\n this.dropSubscriptions();\n this.listenToOptionsFocus();\n }\n\n private dropSubscriptions() {\n if (this.optionFocusSubscription) {\n this.optionFocusSubscription.unsubscribe();\n this.optionFocusSubscription = null;\n }\n\n if (this.optionBlurSubscription) {\n this.optionBlurSubscription.unsubscribe();\n this.optionBlurSubscription = null;\n }\n }\n\n private listenToOptionsFocus(): void {\n this.optionFocusSubscription = this.optionFocusChanges.subscribe((event) => {\n const index: number = this.renderedOptions.toArray().indexOf(event.option as KbqTreeOption);\n\n this.renderedOptions.filter((option) => option.hasFocus).forEach((option) => (option.hasFocus = false));\n\n if (this.isValidIndex(index)) {\n this.keyManager.updateActiveItem(index);\n }\n });\n\n // Moving the active option blurs the one being left, so an option blur alone does not mean the\n // options lost the focus — and resetting here would drop the active option the key manager has just\n // set, because `KbqTreeOption.hasFocus` is cleared synchronously but only raised a microtask later, so\n // `hasFocusedOption()` reports nothing focused for the whole move. Only a blur of the option the\n // key manager still points at is the focus actually leaving the options.\n this.optionBlurSubscription = this.optionBlurChanges.subscribe(({ option }) => {\n if (option === this.keyManager.activeItem && !this.hasFocusedOption() && this.resetFocusedItemOnBlur) {\n this.keyManager.setActiveItem(-1);\n }\n });\n }\n\n /**\n * Utility to ensure all indexes are valid.\n *\n * @param index The index to be checked.\n * @returns True if the index is valid for our list of options.\n */\n private isValidIndex(index: number): boolean {\n return index >= 0 && index < this.renderedOptions.length;\n }\n\n /** Checks whether any of the options is focused. */\n private hasFocusedOption() {\n return this.renderedOptions.some((option) => option.hasFocus);\n }\n\n private updateOptionsFocus() {\n this.renderedOptions.filter((option) => option.hasFocus).forEach((option) => (option.hasFocus = false));\n }\n\n private canDeselectLast(option: KbqTreeOption<T>): boolean {\n return !(this.noUnselectLast && this.selectionModel.selected.length === 1 && option.selected);\n }\n\n private isFocusReceivedFromNestedOption($event: FocusEvent) {\n if (!$event || !$event.relatedTarget) {\n return false;\n }\n\n return ($event.relatedTarget as HTMLElement).classList.contains('kbq-tree-option');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqActionContainer, KbqPseudoCheckboxModule } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { asyncScheduler } from 'rxjs';\nimport { AsyncScheduler } from 'rxjs/internal/scheduler/AsyncScheduler';\nimport { KbqTreeNodeDef } from './node';\nimport { KbqTreeNodeOutlet } from './outlet';\nimport { KbqTreeNodePadding } from './padding.directive';\nimport { KbqTreeNodeToggleComponent, KbqTreeNodeToggleDirective } from './toggle';\nimport { KbqTree } from './tree';\nimport { KbqTreeNode } from './tree-base';\nimport { KbqTreeOption } from './tree-option.component';\nimport { KbqTreeSelection } from './tree-selection.component';\n\nconst KBQ_TREE_DIRECTIVES = [\n KbqTreeNodeOutlet,\n KbqTreeNodeDef,\n KbqTreeNode,\n KbqTreeNodePadding,\n KbqTree,\n KbqTreeSelection,\n KbqTreeOption,\n KbqTreeNodeToggleComponent,\n KbqTreeNodeToggleDirective\n];\n\n@NgModule({\n imports: [\n KbqPseudoCheckboxModule,\n KbqIconModule,\n KbqActionContainer,\n ...KBQ_TREE_DIRECTIVES\n ],\n providers: [{ provide: AsyncScheduler, useValue: asyncScheduler }],\n exports: KBQ_TREE_DIRECTIVES\n})\nexport class KbqTreeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["observableOf"],"mappings":"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"}
|