@koobiq/components 20.4.1 → 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 +486 -165
- 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 -187
- 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-list.mjs","sources":["../../../packages/components/list/list-selection.component.ts","../../../packages/components/list/list-option.html","../../../packages/components/list/list.component.ts","../../../packages/components/list/list-item.html","../../../packages/components/list/list.module.ts","../../../packages/components/list/koobiq-components-list.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CDK_DRAG_HANDLE, CdkDrag, CdkDragDrop, CdkDragPreview, CdkDropList } from '@angular/cdk/drag-drop';\nimport { Platform } from '@angular/cdk/platform';\nimport { CdkVirtualForOf } from '@angular/cdk/scrolling';\nimport {\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n contentChild,\n contentChildren,\n ContentChildren,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostAttributeToken,\n inject,\n Input,\n input,\n isDevMode,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n output,\n Provider,\n QueryList,\n signal,\n ViewChild,\n viewChild,\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 getKbqSelectNonFunctionValueError,\n getSelectAllState,\n hasModifierKey,\n HOME,\n IFocusableOption,\n isCopy,\n isSelectAll,\n isVerticalMovement,\n KBQ_LOCALE_SERVICE,\n KBQ_OPTION_ACTION_PARENT,\n KBQ_TITLE_TEXT_REF,\n KBQ_WINDOW,\n KbqActionContainer,\n kbqFocusOptionActionOnTab,\n kbqGetElementHeight,\n KbqLocaleService,\n KbqOptgroup,\n KbqOptionActionComponent,\n KbqPseudoCheckbox,\n KbqPseudoCheckboxState,\n KbqSelectAllAdapter,\n KbqTitleTextRef,\n LEFT_ARROW,\n MultipleMode,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n runCompareWith,\n ruRULocaleData,\n SPACE,\n TAB,\n toggleSelectAll,\n UP_ARROW\n} from '@koobiq/components/core';\nimport { KbqDropdownTrigger } from '@koobiq/components/dropdown';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { fromEvent, merge, Observable, Subject, Subscription } from 'rxjs';\nimport { auditTime, startWith, switchMap, take } from 'rxjs/operators';\n\n/** How long consecutive `window.resize` ticks are collapsed before the scroll size is recalculated. */\nconst RESIZE_AUDIT_TIME = 100;\n\n/**\n * Marks the dragged option while the pointer is over no list that would take it. Styling reads it from the\n * body, which is what resolves the cursor once the options are out of hit testing.\n */\nconst DROP_FORBIDDEN_CLASS = 'kbq-list-option_drop-forbidden';\n\n/**\n * Put on the drag preview whichever shape it takes, so styling has one hook that survives the\n * `dragPreview` mode switch.\n */\nconst DRAG_PREVIEW_CLASS = 'kbq-list-drag-preview';\n\nexport interface KbqOptionEvent<T = any> {\n option: KbqListOption<T>;\n}\n\nexport const KBQ_SELECTION_LIST_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KbqListSelection),\n multi: true\n};\n\nexport class KbqListSelectionChange<T = any> {\n constructor(\n public source: KbqListSelection<T>,\n public option: KbqListOption<T>\n ) {}\n}\n\nexport class KbqListSelectAllEvent<T> {\n constructor(\n public source: KbqListSelection,\n public options: T[]\n ) {}\n}\n\n/**\n * Event class that occurs when copying an item from the KbqListSelection.\n * Used to pass data about the copied item and copy context.\n *\n * @param source - instance of KbqListSelection\n * @param option - instance of KbqListOption\n * @param event - original keyboard event (optional) that triggered the copy\n */\nexport class KbqListCopyEvent<T> {\n constructor(\n public source: KbqListSelection,\n public option: T,\n public event?: KeyboardEvent\n ) {}\n}\n\n/**\n * Data attached to the underlying `CdkDrag` while a list option is being dragged. Kept unexported:\n * `dropped` already hands the option over, so nothing outside this file has to read `CdkDrag.data`.\n */\ntype KbqListOptionDragData = { option: KbqListOption };\n\n/**\n * How the floating copy of an option is rendered while it is dragged.\n *\n * `text` shows a compact plate with the option's own text and nothing else, `full` a clone of the\n * whole row.\n */\nexport type KbqListDragPreview = 'text' | 'full';\n\n/**\n * Whether a draggable option advertises with the cursor that the whole row can be picked up.\n *\n * `auto` leaves the row the cursor it would have anyway, `grab` turns the row into a visible handle.\n * A projected `cdkDragHandle` takes the grab over either way.\n */\nexport type KbqListDragCursor = 'auto' | 'grab';\n\n/** Event emitted when an option changes its position by dragging. */\nexport type KbqListSelectionDroppedEvent = Pick<CdkDragDrop<KbqListSelection>, 'previousIndex' | 'currentIndex'> & {\n /** Option that has been moved. */\n option: KbqListOption;\n /** List the option has been moved into. */\n container: KbqListSelection;\n /** List the option has been taken from. Equal to `container` when reordering within a single list. */\n previousContainer: KbqListSelection;\n /** Pointer event that ended the drag. */\n event: MouseEvent | TouchEvent;\n};\n\n@Component({\n selector: 'kbq-list-selection',\n imports: [\n forwardRef(() => KbqListOption),\n KbqPseudoCheckbox\n ],\n template: `\n @if (showSelectAll) {\n <!-- Every read of selectAllState re-filters the whole option list, so the two bindings below\n share one through @let. The row's own aria-checked host binding walks it a second time:\n Ivy evaluates that binding after this template, and the option reads the state off the\n list rather than from here. -->\n @let selectAllCheckboxState = selectAllState;\n\n <!--\n aria-checked and aria-selected come from the option's own host bindings: a host binding\n runs after the parent template's, so an override here would be the one that loses. The\n class binding is the other way around, which is why the selected state is written here.\n -->\n <kbq-list-option\n #selectAllRow\n class=\"kbq-list-selection__select-all\"\n [selectAllRow]=\"true\"\n [class.kbq-selected]=\"selectAllCheckboxState === 'checked'\"\n (click)=\"toggleSelectAll()\"\n >\n <kbq-pseudo-checkbox aria-hidden=\"true\" [disabled]=\"disabled\" [state]=\"selectAllCheckboxState\" />\n {{ selectAllText }}\n </kbq-list-option>\n }\n <ng-content />\n @if (dropIndicatorOffset() !== null) {\n <!-- Purely decorative: the drop target is a pointer affordance, not a status message. -->\n <div\n class=\"kbq-list-selection__drop-indicator\"\n aria-hidden=\"true\"\n [style.--kbq-list-drop-indicator-offset.px]=\"dropIndicatorOffset()\"\n ></div>\n }\n `,\n styleUrls: ['./list.scss', 'list-tokens.scss'],\n providers: [KBQ_SELECTION_LIST_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-list-selection',\n role: 'listbox',\n '[class.kbq-disabled]': 'disabled',\n '[class.kbq-list-selection_horizontal]': 'horizontal()',\n '[class.kbq-list-selection_draggable]': 'draggable',\n '[attr.aria-multiselectable]': 'multiple',\n '[attr.aria-orientation]': 'horizontal() ? \"horizontal\" : null',\n '[attr.aria-disabled]': 'disabled || null',\n '[attr.tabindex]': 'tabIndex',\n '(keydown)': 'onKeyDown($event)',\n '(focus)': 'focus()',\n '(blur)': 'blur()'\n },\n // `id` is exposed so that a consumer-set id survives `CdkDropList`'s own `[attr.id]` host binding\n // and can be used as a `connectedTo` reference.\n hostDirectives: [{ directive: CdkDropList, inputs: ['id'] }],\n exportAs: 'kbqListSelection',\n preserveWhitespaces: false\n})\nexport class KbqListSelection<T = any> implements AfterContentInit, AfterViewInit, OnDestroy, ControlValueAccessor {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private changeDetectorRef = inject(ChangeDetectorRef);\n private clipboard = inject(Clipboard, { optional: true });\n protected readonly focusMonitor = inject(FocusMonitor);\n\n keyManager: FocusKeyManager<KbqListOption<T>>;\n\n @ContentChildren(forwardRef(() => KbqListOption), { descendants: true }) options: QueryList<KbqListOption<T>>;\n\n readonly onSelectAll = output<KbqListSelectAllEvent<KbqListOption<T>>>();\n\n /**\n * Kept as a decorator `@Output()`/`EventEmitter` on purpose: `copyActiveOption` branches on\n * `onCopy.observed` to decide between the consumer handler and the built-in clipboard copy.\n * `output()` exposes no subscriber introspection, so migrating it would silently run both\n * paths for every existing `(onCopy)` consumer. Mirrors `KbqTreeSelection.onCopy`.\n */\n @Output() readonly onCopy = new EventEmitter<KbqListCopyEvent<KbqListOption<T>>>();\n\n /**\n * Whether clicking an option clears the rest of the selection.\n * Stays an accessor input: the constructor turns it off for `multiple=\"checkbox\"`, which a\n * signal `input()` cannot do (inputs are read-only from inside the component).\n */\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 /**\n * Whether the last selected option can be deselected.\n * Stays an accessor input for the same reason as {@link autoSelect}.\n */\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 /**\n * Whether options can be reordered by dragging them.\n * Reordering never mutates the data — handle the `dropped` event and move the item yourself.\n */\n @Input({ transform: booleanAttribute })\n get draggable(): boolean {\n return this._draggable && !this.disabled;\n }\n\n set draggable(value: boolean) {\n this._draggable = value;\n this.syncDraggableState();\n }\n\n private _draggable: boolean = false;\n\n /**\n * Lists that options of this list can be moved into. Accepts `KbqListSelection` instances or the\n * `id` of another list. `cdkDropListGroup` on a common ancestor connects lists automatically.\n */\n readonly connectedTo = input<KbqListSelection<T> | string | readonly (KbqListSelection<T> | string)[]>([]);\n\n /**\n * What the option's floating copy looks like while it is dragged. Defaults to `text`: a compact\n * plate carrying the option's label and caption, capped at a readable width. Use `full` to drag a\n * clone of the whole row, checkbox, icons and action button included.\n */\n readonly dragPreview = input<KbqListDragPreview>('text');\n\n /**\n * Whether a draggable option shows the grab cursor over the whole row. Defaults to `auto`, which\n * leaves the row the cursor it has anyway. Use `grab` where the whole row is meant to read as a\n * handle. An option carrying a projected `cdkDragHandle` ignores this — the handle keeps the grab.\n */\n readonly dragCursor = input<KbqListDragCursor>('auto');\n\n /** Emits when an option changes its position by dragging. */\n readonly dropped = output<KbqListSelectionDroppedEvent>();\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 options. `multiple=\"checkbox\"` only —\n * a vertical list, since the row is a full-width heading of the column it governs.\n *\n * The row acts on every option the user can toggle, disabled ones excluded. Enabling it also makes\n * Ctrl/Cmd + A a two-way toggle, so the shortcut and the checkbox never disagree ({@link selectAllToggle}\n * is implied).\n *\n * Aliased rather than named `selectAll`, which is already taken by the imperative method of that name.\n */\n readonly selectAllEnabled = input(false, { alias: 'selectAll', transform: booleanAttribute });\n\n /**\n * Reference to the built-in \"select all\" row, rendered only while `selectAll` is on.\n *\n * Located by template reference rather than by the `KbqListOption` type: that class is declared\n * below this one in the same file, and a query locator is evaluated while this class is being\n * defined, which would read it in its temporal dead zone.\n */\n readonly selectAllOption = viewChild<KbqListOption<T>>('selectAllRow');\n\n /**\n * The options the key manager navigates: the \"select all\" row first, then the projected ones.\n *\n * Kept apart from {@link options} because that query is public API and means \"the options the consumer\n * projected\" — a synthetic entry there would corrupt `getSelectedOptionValues`, the drop-indicator\n * geometry and every consumer tally built on it.\n * @docs-private\n */\n readonly navigableOptions = new QueryList<KbqListOption<T>>();\n\n /**\n * The virtual scroller rendering the options, when the consumer projected one.\n *\n * A signal query rather than a DOM probe, mirroring `KbqSelect.cdkVirtualForOf`: it resolves on the\n * server as well as in the browser, and it follows a viewport that appears later behind the\n * consumer's own `@if`.\n */\n private readonly virtualScroll = contentChild(CdkVirtualForOf);\n\n /**\n * Whether the \"select all\" row is currently rendered.\n *\n * Suppressed inside a `cdk-virtual-scroll-viewport`: `options` then holds only the options currently\n * rendered, so the checkbox would report \"everything selected\" after touching a fraction of the data\n * — the same reason `kbq-select` refuses the row under `withVirtualScroll`. Suppressed on an empty\n * list too: a master checkbox over nothing has nothing to say.\n */\n protected get showSelectAll(): boolean {\n return (\n this.selectAllEnabled() &&\n this.multipleMode === MultipleMode.CHECKBOX &&\n !this.horizontal() &&\n !this.virtualScroll() &&\n !!this.options?.length\n );\n }\n\n /** Label of the \"select all\" row. Follows the active locale. */\n protected selectAllText: string = ruRULocaleData.select.selectAll;\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 /** Whether every option \"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 list.\n return targets.length > 0 && targets.every((option) => option.selected);\n }\n\n /** State of the \"select all\" master checkbox. */\n get selectAllState(): KbqPseudoCheckboxState {\n return getSelectAllState(this.selectAllAdapter(this.selectAllTargets));\n }\n\n /**\n * Options \"select all\" acts on, and the ones its checkbox state is derived from. Read from\n * {@link options}, so the row it renders itself is never among them.\n */\n private get selectAllTargets(): KbqListOption<T>[] {\n return this.options?.filter((option) => !option.disabled) ?? [];\n }\n\n /**\n * Adapter shared by the master checkbox and the Ctrl/Cmd + A handler, so the two cannot drift apart.\n *\n * Takes the items rather than reading {@link selectAllTargets} itself: the toggle needs that array for\n * the emitted event anyway, and deriving it here as well would walk the whole option list twice.\n */\n private selectAllAdapter(items: KbqListOption<T>[]): KbqSelectAllAdapter<KbqListOption<T>> {\n return {\n items,\n isSelectable: () => true,\n isSelected: (option) => option.selected,\n setSelected: (option, selected) => option.setSelected(selected)\n };\n }\n\n multipleMode: MultipleMode | null;\n\n get multiple(): boolean {\n return !!this.multipleMode;\n }\n\n readonly horizontal = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Tab index of the list.\n * Stays an accessor input: the getter is derived from {@link disabled} and the setter also\n * records the user-provided value, which the roving focus logic restores after `tabOut`.\n */\n @Input()\n get tabIndex(): number {\n return this.disabled ? -1 : this._tabIndex;\n }\n\n set tabIndex(value: number) {\n this.userTabIndex = value;\n this._tabIndex = value;\n }\n\n private _tabIndex = 0;\n\n /**\n * Whether the list is disabled.\n * Stays an accessor input: `setDisabledState` writes it from the `ControlValueAccessor`, which a\n * signal `input()` cannot do.\n */\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 this.syncDraggableState();\n }\n }\n\n private _disabled: boolean = false;\n\n /**\n * Function used for comparing an option against the selected value when determining which\n * options should appear as selected. The first argument is the value of an options. The second\n * one is a value from the selected value. A boolean must be returned.\n *\n * Bind a stable reference — a field or a bound method. An expression that builds a new function on\n * every change detection pass makes the list re-resolve every value against every option each pass.\n */\n readonly compareWith = input<(o1: T, o2: T) => boolean, (o1: T, o2: T) => boolean>((a1, a2) => a1 === a2, {\n // Mirrors `KbqSelect`, which throws from its setter: a comparator that is not callable would\n // otherwise surface as an empty selection and a warning per option.\n transform: (fn) => {\n if (typeof fn !== 'function') {\n throw getKbqSelectNonFunctionValueError();\n }\n\n return fn;\n }\n });\n\n userTabIndex: number | null = null;\n\n get showCheckbox(): boolean {\n return this.multipleMode === MultipleMode.CHECKBOX;\n }\n\n // Emits a change event whenever the selected state of an option changes.\n readonly selectionChange = output<KbqListSelectionChange<T>>();\n\n selectionModel: SelectionModel<KbqListOption<T>>;\n\n // Built over the navigable list, not `options`: the \"select all\" row lives in this component's own\n // view, so its focus would otherwise reach nobody and leave the key manager pointing at whichever\n // option was active before the user clicked the row.\n get optionFocusChanges(): Observable<KbqOptionEvent<T>> {\n return merge(...this.navigableOptions.map((option) => option.onFocus));\n }\n\n get optionBlurChanges(): Observable<KbqOptionEvent<T>> {\n return merge(...this.navigableOptions.map((option) => option.onBlur));\n }\n\n _value: T[] | null;\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly platform = inject(Platform);\n private readonly ngZone = inject(NgZone);\n private readonly window = inject(KBQ_WINDOW);\n private readonly dropList = inject<CdkDropList<KbqListSelection>>(CdkDropList, { host: true });\n\n /**\n * Distance from the list's content box to the gap the dragged option would land in, or `null`\n * while no drag is hovering this list. Drives the insertion indicator.\n */\n protected readonly dropIndicatorOffset = signal<number | null>(null);\n\n /** Gap the indicator currently marks, used as `currentIndex` when the drag is dropped here. */\n private dropIndex: number | null = null;\n\n private pendingMoveSubscription: Subscription | null;\n\n private hasWarnedOnDragContainer = false;\n\n /** Whether a deferred {@link initializeSelection} pass is already queued for this microtask turn. */\n private pendingSelectionInit = false;\n\n /** Whether a form control has ever written to the list, i.e. whether {@link _value} speaks for a model. */\n private hasWrittenValue = false;\n\n constructor() {\n const multiple = inject(new HostAttributeToken('multiple'), { optional: true });\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<KbqListOption<T>>(this.multiple);\n\n // A different comparator means a different set of options can match the model value. `compareWith`\n // is a signal input, so there is no setter to re-run matching from the way `KbqSelect` does.\n effect(() => {\n this.compareWith();\n this.initializeSelection();\n });\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n\n // The \"select all\" row is rendered by this component's own template, so `options.changes` never\n // fires for it — the navigable list has to be rebuilt whenever the view query resolves or drops it.\n effect(() => {\n this.selectAllOption();\n\n this.syncNavigableOptions();\n });\n\n this.setupDropListInitialProperties();\n }\n\n /** Rebuilds {@link navigableOptions}: the \"select all\" row, when rendered, leads the projected options. */\n private syncNavigableOptions(): void {\n const selectAllOption = this.selectAllOption();\n const options = this.options?.toArray() ?? [];\n\n this.navigableOptions.reset(selectAllOption ? [selectAllOption, ...options] : options);\n this.navigableOptions.notifyOnChanges();\n }\n\n /**\n * Marks the list for check after an option changed something the \"select all\" row is derived from —\n * its selection or its `disabled` state.\n *\n * An option marking itself only asks its ancestors to traverse down to it; it does not re-evaluate\n * their own bindings. Without this the row keeps painting a state the options have already left, and\n * a click on a checkbox showing `indeterminate` over an already-full selection takes the deselect\n * branch — doing the opposite of what the user was shown.\n * @docs-private\n */\n refreshSelectAllState(): void {\n if (this.showSelectAll) {\n this.changeDetectorRef.markForCheck();\n }\n }\n\n /** Whether the option is the built-in \"select all\" row rather than one the consumer projected. */\n private isSelectAllRow(option: KbqListOption<T> | null): boolean {\n return !!option && option === this.selectAllOption();\n }\n\n /**\n * Selects every option \"select all\" can act on, or deselects them all when they are already selected.\n *\n * Backs both the master checkbox and Ctrl/Cmd + A, so the two can never disagree. Reports the value\n * once for the whole batch instead of once per option.\n */\n toggleSelectAll(): void {\n // The row's own `(click)` and the shortcut both funnel through here, so this is the single place\n // to refuse acting on a disabled list — the guard every option already gets in `handleClick`.\n if (this.disabled) return;\n\n const targets = this.selectAllTargets;\n\n toggleSelectAll(this.selectAllAdapter(targets), { allowDeselect: this.allowSelectAllDeselect });\n\n // Reported unconditionally, as the shortcut has always done: a repeat that flips nothing still\n // re-reports the value, which is what normalizes a form value holding entries no option matches.\n this.reportValueChange();\n\n // Deliberately no `selectionChange`: that event carries a single option, and a batch is\n // reported through `onSelectAll` instead — the contract Ctrl/Cmd + A has always had.\n this.onSelectAll.emit(new KbqListSelectAllEvent(this, targets));\n }\n\n /**\n * Whether a repeated toggle deselects. Keyed on {@link showSelectAll} rather than on the raw input:\n * with no row on screen there is no checkbox for the shortcut to agree with, so the attribute must\n * not quietly change what Ctrl/Cmd + A does.\n */\n private get allowSelectAllDeselect(): boolean {\n return this.showSelectAll || this.selectAllToggle();\n }\n\n ngAfterContentInit(): void {\n this.keyManager = new FocusKeyManager<KbqListOption<T>>(this.navigableOptions)\n .withTypeAhead()\n .withVerticalOrientation(!this.horizontal())\n .withHorizontalOrientation(this.horizontal() ? 'ltr' : null);\n\n this.keyManager.tabOut.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this._tabIndex = -1;\n\n setTimeout(() => {\n this._tabIndex = this.userTabIndex || 0;\n this.changeDetectorRef.markForCheck();\n });\n });\n\n // The initial value is applied by the `options.changes` subscription below, which starts with the\n // options already present. Applying it synchronously here instead would settle the selection after\n // the parent view was checked and raise NG0100.\n // Repairs each option's `_selected` mirror after the model changes on its own — single-selection\n // mode drops the previous winner whenever another option is selected. Deliberately not moved\n // earlier: writes that happen during input binding would flip a host binding mid-pass (NG0100).\n // `setSelected` consults the model too, so a write that lands before this is still recoverable.\n this.selectionModel.changed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n for (const item of event.added) {\n item.selected = true;\n }\n\n for (const item of event.removed) {\n item.selected = false;\n }\n\n this.refreshSelectAllState();\n });\n\n this.listenToOptionsFocus();\n\n this.options.changes.pipe(startWith(null), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.syncNavigableOptions();\n this.updateTabIndex();\n this.initializeSelection();\n // `showSelectAll` is derived from the option count, and nothing else in this view changes\n // when an option is added or removed — without this the row would not appear on the first\n // option, nor go away with the last one.\n this.changeDetectorRef.markForCheck();\n });\n\n if (!this.platform.isBrowser) return;\n\n this.warnOnUnsupportedSelectAllContainer();\n this.warnOnUnsupportedDragContainer();\n this.updateScrollSize();\n\n // `updateScrollSize` only feeds the key manager's page size — nothing rendered depends on it,\n // so the listener stays outside the zone and never schedules change detection. `auditTime`\n // collapses a resize drag into one pair of forced layout reads per interval.\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.window, 'resize')\n .pipe(auditTime(RESIZE_AUDIT_TIME), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.updateScrollSize());\n });\n }\n\n ngAfterViewInit(): void {\n this.focusMonitor.monitor(this.elementRef, true);\n }\n\n ngOnDestroy(): void {\n this.focusMonitor.stopMonitoring(this.elementRef);\n }\n\n focus(): void {\n if (this.options.length === 0) {\n return;\n }\n\n if (this.selectionModel.selected.length) {\n this.options.find((option) => option.selected)?.focus();\n } else {\n this.keyManager.setFirstItemActive();\n }\n }\n\n /** Clears the active key-manager item (unless an option is still focused) and marks the list as touched. */\n blur(): void {\n if (!this.hasFocusedOption()) {\n this.keyManager.setActiveItem(-1);\n }\n\n this.onTouched();\n this.changeDetectorRef.markForCheck();\n }\n\n /**\n * Selects every option and reports the new value to the `ControlValueAccessor`.\n *\n * Unlike the `selectAll` attribute and Ctrl/Cmd + A, this acts on disabled options as well — it is\n * an imperative command, not something the user performed. See {@link toggleSelectAll} for the\n * behaviour the master checkbox has.\n */\n selectAll(): void {\n this.options.forEach((option) => option.setSelected(true));\n\n this.reportValueChange();\n }\n\n /** Deselects every option, disabled ones included, and reports the new value. See {@link selectAll}. */\n deselectAll(): void {\n this.options.forEach((option) => option.setSelected(false));\n\n this.reportValueChange();\n }\n\n updateScrollSize(): void {\n if (this.horizontal() || !this.options.first) {\n return;\n }\n\n const optionHeight = this.options.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 setSelectedOptionsByClick(option: KbqListOption<T>, shiftKey: boolean, ctrlKey: boolean): void {\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);\n } else if (this.autoSelect) {\n this.selectionModel.clear();\n this.selectionModel.toggle(option);\n } else {\n this.selectionModel.toggle(option);\n }\n\n this.emitChangeEvent(option);\n this.reportValueChange();\n }\n\n setSelectedOptionsByKey(option: KbqListOption<T>, shiftKey: boolean, ctrlKey: boolean): void {\n if (shiftKey && this.multiple) {\n this.selectActiveOptions();\n } else if (ctrlKey) {\n if (!this.canDeselectLast(option)) {\n return;\n }\n } else if (this.autoSelect) {\n this.options.forEach((item) => item.setSelected(false));\n option.setSelected(true);\n }\n\n if (shiftKey || ctrlKey || this.autoSelect) {\n this.emitChangeEvent(option);\n this.reportValueChange();\n }\n }\n\n selectActiveOptions(): void {\n // Indexed against the navigable list, which is what the key manager reports positions in. The\n // \"select all\" row leads that list when rendered and is filtered back out below, so a range\n // extended across it selects the options it spans and leaves the row itself alone.\n const options = this.navigableOptions.toArray();\n let fromIndex = this.keyManager.previousActiveItemIndex;\n let toIndex = (this.keyManager.previousActiveItemIndex = this.keyManager.activeItemIndex);\n\n // `previousActiveItemIndex` stays -1 until the key manager has moved at least once, so a\n // shift + click before any keyboard navigation has no anchor to extend the range from.\n if (toIndex === fromIndex || !this.isValidIndex(fromIndex) || !this.isValidIndex(toIndex)) {\n return;\n }\n\n const anchor = options[fromIndex];\n\n // The row carries no selection of its own, so a range anchored on it has no state to apply.\n if (this.isSelectAllRow(anchor)) {\n return;\n }\n\n const selectedOptionState = anchor.selected;\n\n if (fromIndex > toIndex) {\n [fromIndex, toIndex] = [toIndex, fromIndex];\n }\n\n options\n .slice(fromIndex, toIndex + 1)\n .filter((item) => !item.disabled && !this.isSelectAllRow(item))\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 // Implemented as part of ControlValueAccessor.\n writeValue(values: T[] | T | null): void {\n this.hasWrittenValue = true;\n\n // A form control may push a bare value instead of an array; normalize it here so that\n // `_value` always matches its declared type and stays safe to iterate over.\n this._value = values == null ? null : Array.isArray(values) ? values : [values];\n\n if (this.options) {\n this.setOptionsFromValues(this._value ?? []);\n }\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: T[]) => void): void {\n this.onChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n // Implemented as a part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n // `KbqListOption.disabled` reads the list through its getter, so disabling the list cascades\n // to every option without overwriting their own `disabled` inputs.\n this.disabled = isDisabled;\n this.changeDetectorRef.markForCheck();\n }\n\n /** Values of the currently selected options. */\n getSelectedOptionValues(): T[] {\n return this.options.filter((option) => option.selected).map((option) => option.value);\n }\n\n // Toggles the selected state of the currently focused option.\n toggleFocusedOption(): void {\n const focusedIndex = this.keyManager.activeItemIndex;\n\n if (focusedIndex != null && this.isValidIndex(focusedIndex)) {\n const focusedOption: KbqListOption<T> = this.navigableOptions.toArray()[focusedIndex];\n\n // The row holds no selection of its own, so `toggle()` would be a no-op on it. Space and\n // Enter have to reach the batch toggle instead, exactly as a click on the row does.\n if (this.isSelectAllRow(focusedOption)) {\n this.toggleSelectAll();\n\n return;\n }\n\n if (focusedOption && !focusedOption.disabled && this.canDeselectLast(focusedOption)) {\n focusedOption.toggle();\n\n // Emit a change event because the focused option changed its state through user interaction.\n this.emitChangeEvent(focusedOption);\n this.reportValueChange();\n }\n }\n }\n\n /** Whether `listOption` is allowed to be deselected, given {@link noUnselectLast}. */\n canDeselectLast(listOption: KbqListOption<T>): boolean {\n return !(this.noUnselectLast && this.selectionModel.selected.length === 1 && listOption.selected);\n }\n\n /**\n * Rendered height of the element, or 0 when it is not laid out (SSR, jsdom, `display: none`).\n * @docs-private\n */\n getHeight(): number {\n return kbqGetElementHeight(this.elementRef.nativeElement);\n }\n\n // View to model callback that should be called if the list or its options lost focus.\n onTouched: () => void = () => {};\n\n // Removes an option from the selection list and updates the active item.\n removeOptionFromList(option: KbqListOption<T>): void {\n if (!option.hasFocus) {\n return;\n }\n\n const optionIndex = this.navigableOptions.toArray().indexOf(option);\n\n // Check whether the option is the last item\n if (optionIndex === this.navigableOptions.length - 1) {\n this.keyManager.setPreviousItemActive();\n } else {\n this.keyManager.setNextItemActive();\n }\n }\n\n /** Handles keydown events on the list. */\n onKeyDown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n\n if ([SPACE, ENTER, 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 ([SPACE, ENTER].includes(keyCode)) {\n this.toggleFocusedOption();\n\n return;\n } else if (keyCode === TAB) {\n this.keyManager.tabOut.next();\n\n return;\n } else if (this.horizontal() ? keyCode === RIGHT_ARROW : keyCode === DOWN_ARROW) {\n this.keyManager.setNextItemActive();\n } else if (this.horizontal() ? keyCode === LEFT_ARROW : keyCode === UP_ARROW) {\n this.keyManager.setPreviousItemActive();\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 // Everything the list does not navigate on itself goes to the key manager, which is what\n // drives type-ahead. Arrow keys never reach it — the branches above own them — so the\n // manager's own orientation config cannot double-handle them.\n this.keyManager.onKeydown(event);\n }\n\n // Navigating onto the \"select all\" row must not select it: it holds no selection of its own,\n // and in `autoSelect` mode the branch below would clear the list to select nothing.\n if (\n this.keyManager.activeItem &&\n this.isNavigationKey(event) &&\n !this.isSelectAllRow(this.keyManager.activeItem)\n ) {\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 /** Whether the key just handled moved the active option, taking the list orientation into account. */\n private isNavigationKey(event: KeyboardEvent): boolean {\n if (this.horizontal() && [LEFT_ARROW, RIGHT_ARROW].includes(event.keyCode)) {\n return true;\n }\n\n return isVerticalMovement(event);\n }\n\n // Reports a value change to the ControlValueAccessor\n reportValueChange(): void {\n if (this.options) {\n const value = this.getSelectedOptionValues();\n\n this.onChange(value);\n this._value = value;\n }\n }\n\n // Emits a change event if the selected state of an option changed.\n emitChangeEvent(option: KbqListOption<T>): void {\n this.selectionChange.emit(new KbqListSelectionChange<T>(this, option));\n }\n\n private initializeSelection(): void {\n // Several triggers land in the same turn — `options.changes`, the comparator effect, a form write.\n // They would all apply the identical value, so the first one queued does the work for all of them.\n if (this.pendingSelectionInit) {\n return;\n }\n\n this.pendingSelectionInit = true;\n\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n this.pendingSelectionInit = false;\n\n // `options` is a content query: the comparator effect can reach this before it has settled.\n // Once a form control has written, an empty value applies as an empty selection instead of\n // being skipped, so that swapping the comparator also clears what the previous one matched.\n // Without a control the list has no model to speak for, and `[selected]` options stand.\n if (this.options && (this._value || this.hasWrittenValue)) {\n this.setOptionsFromValues(this._value ?? []);\n }\n });\n }\n\n protected updateTabIndex(): void {\n // Counted over `options`, not the navigable list: the \"select all\" row only renders when there\n // is at least one option, so the two are empty together — and `navigableOptions` is rebuilt a\n // pass later, which would leave an emptied list holding a tab stop with nothing to focus.\n this._tabIndex = this.userTabIndex || (this.options.length === 0 ? -1 : 0);\n }\n\n private onCopyDefaultHandler(): void {\n this.clipboard?.copy(String(this.keyManager.activeItem!.value));\n }\n\n /**\n * Re-points the focus/blur streams at the current options every time the query list changes.\n * `switchMap` tears down the previous `merge` for us, so no manual subscription bookkeeping.\n */\n private listenToOptionsFocus(): void {\n // Re-subscribed on the navigable list rather than on `options`: the latter never fires when the\n // \"select all\" row alone appears or disappears, which would leave its focus unheard.\n this.navigableOptions.changes\n .pipe(\n startWith(null),\n switchMap(() => this.optionFocusChanges),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((event) => {\n const index: number = this.navigableOptions.toArray().indexOf(event.option);\n\n if (this.isValidIndex(index)) {\n this.keyManager.updateActiveItem(index);\n }\n });\n\n this.navigableOptions.changes\n .pipe(\n startWith(null),\n switchMap(() => this.optionBlurChanges),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => this.blur());\n }\n\n /** Checks whether any of the options is focused. */\n private hasFocusedOption(): boolean {\n // Asked of the navigable list so that focus resting on the \"select all\" row does not read as\n // \"nothing is focused\" and clear the key manager out from under it.\n return this.navigableOptions.some((option) => option.hasFocus);\n }\n\n // Returns the option with the specified value.\n private getOptionByValue(value: T): KbqListOption<T> | undefined {\n const compareWith = this.compareWith();\n\n // `null`/`undefined` are left to the comparator rather than rejected here: an option declared\n // without a `[value]` reports `undefined` back through the form control, and has to be able to\n // find itself again when that value is re-applied.\n return this.options.find((option) => runCompareWith(compareWith, option.value, value));\n }\n\n // Sets the selected options based on the specified values.\n private setOptionsFromValues(values: T[]): void {\n // Resolved up front and applied as a delta: `setSelected` early-returns on an unchanged state, so\n // re-applying the same value writes nothing to the `SelectionModel` and schedules no change\n // detection. Deselecting everything first would churn both on every call.\n const selection = new Set(values.map((value) => this.getOptionByValue(value)));\n\n this.options.forEach((option) => option.setSelected(selection.has(option)));\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 // Bounded by the navigable list, the index space the key manager reports in.\n return index >= 0 && index < this.navigableOptions.length;\n }\n\n // Returns the index of the specified list option.\n private getOptionIndex(option: KbqListOption<T>): number {\n return this.options.toArray().indexOf(option);\n }\n\n private setupDropListInitialProperties(): void {\n // Lets the `dropped` handler map a `CdkDropList` back to the list that owns it.\n this.dropList.data = this;\n // The drop position is shown by an insertion indicator instead of by opening a gap, so CDK must\n // not sort: the options stay put and the dragged one keeps its slot as a faded placeholder.\n // Both flags are re-read from the directive on every drag start, so assigning once is enough.\n this.dropList.sortingDisabled = true;\n // Without an anchor the placeholder follows the option into the connected list, leaving the\n // origin list with a hole instead of the faded row.\n this.dropList.hasAnchor = true;\n this.syncDraggableState();\n\n effect(() => {\n this.dropList.orientation = this.horizontal() ? 'horizontal' : 'vertical';\n // `CdkDropList` resolves its siblings on every drag start, so a late assignment is picked up.\n this.dropList.connectedTo = this.resolveConnectedDropLists();\n });\n\n // `enter()` is not gated on `sortingDisabled`, so the placeholder follows the option into\n // whichever list it is dragged over and pushes that list's options apart. Only the list the\n // drag started in may show it — there it is the faded row left behind. Toggled imperatively\n // because the placeholder is already in the DOM by the time this runs, and waiting for change\n // detection would let the shifted layout paint for a frame.\n this.dropList.entered.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(({ item }) => {\n item.getPlaceholderElement().classList.toggle(\n 'kbq-list-option_foreign-placeholder',\n item.dropContainer.data !== this\n );\n });\n\n this.dropList.dropped\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(({ previousIndex, previousContainer, container, item, event }) => {\n const { option }: KbqListOptionDragData = item.data;\n const target: KbqListSelection = container.data;\n // Sorting is disabled, so CDK reports the untouched starting index. The gap the indicator\n // marked is the real target; without one the pointer was either outside every list we know\n // or over the place the option already occupies, and both resolve to a move that changes\n // nothing.\n const currentIndex = target.dropIndex ?? previousIndex;\n\n this.clearDropIndicators(option);\n\n this.dropped.emit({\n option,\n previousIndex,\n currentIndex,\n previousContainer: previousContainer.data,\n container: target,\n event\n });\n\n this.followMovedOption(option, target);\n });\n }\n\n /**\n * Says once, in dev mode, why `selectAll` produced no row: the master checkbox could only ever act on\n * the options the scroller happens to have rendered, so the row is dropped rather than left lying.\n */\n private warnOnUnsupportedSelectAllContainer(): void {\n if (!isDevMode() || !this.selectAllEnabled() || !this.virtualScroll()) {\n return;\n }\n\n // eslint-disable-next-line no-console\n console.warn(\n 'KbqListSelection: `selectAll` is not supported inside `cdk-virtual-scroll-viewport`. The ' +\n 'row is not rendered, because it could only act on the options currently rendered.'\n );\n }\n\n /**\n * `CdkDropList` numbers only the options it has rendered, so inside a virtual scroll the indices\n * `dropped` reports do not address the consumer's backing array and the move silently lands on the\n * wrong item. Warn instead of letting it pass unnoticed.\n */\n private warnOnUnsupportedDragContainer(): void {\n // Runs on every `draggable`/`disabled` change as well as on init, so it has to tolerate being\n // called before the content children exist and to stay quiet once it has had its say.\n if (this.hasWarnedOnDragContainer || !isDevMode() || !this.draggable || !this.platform.isBrowser) {\n return;\n }\n\n const insideVirtualScroll = !!this.virtualScroll();\n\n if (insideVirtualScroll) {\n // eslint-disable-next-line no-console\n console.warn(\n 'KbqListSelection: `draggable` is not supported inside `cdk-virtual-scroll-viewport`. The ' +\n 'indices reported by `dropped` count only the rendered options.'\n );\n }\n\n this.hasWarnedOnDragContainer = insideVirtualScroll;\n }\n\n /** Keeps the underlying CDK directives in sync with the resolved `draggable` state. */\n private syncDraggableState(): void {\n this.dropList.disabled = !this.draggable;\n this.options?.forEach((option) => option.syncDraggableState());\n this.warnOnUnsupportedDragContainer();\n this.changeDetectorRef.markForCheck();\n }\n\n private normalizeConnectedTo(): readonly (KbqListSelection | string)[] {\n const connectedTo = this.connectedTo();\n\n return Array.isArray(connectedTo) ? connectedTo : [connectedTo as KbqListSelection | string];\n }\n\n private resolveConnectedLists(): KbqListSelection[] {\n return this.normalizeConnectedTo().filter((item): item is KbqListSelection => typeof item !== 'string');\n }\n\n private resolveConnectedDropLists(): (CdkDropList<KbqListSelection> | string)[] {\n return this.normalizeConnectedTo().map((item) => (typeof item === 'string' ? item : item.dropList));\n }\n\n /**\n * Tracks the dragged option and paints the insertion indicator in whichever list the pointer is\n * over. Lists connected by `id` alone cannot be resolved to an instance, so they never light up.\n *\n * @docs-private\n */\n onOptionDragMoved(option: KbqListOption, pointer: { x: number; y: number }): void {\n const lists: KbqListSelection[] = [this, ...this.resolveConnectedLists()];\n const hovered = lists.find((list) => list.containsPoint(pointer));\n\n for (const list of lists) {\n if (list !== hovered) {\n list.clearDropIndicator();\n }\n }\n\n hovered?.showDropIndicator(option, pointer);\n\n // Toggled on the element rather than through a signal: `moved` arrives outside the Angular zone,\n // and the cursor may not lag a frame behind the pointer.\n option.getHostElement().classList.toggle(DROP_FORBIDDEN_CLASS, !hovered);\n }\n\n /**\n * Drops the indicator in every list that could be showing one for this drag.\n *\n * @docs-private\n */\n clearDropIndicators(option: KbqListOption): void {\n const lists: KbqListSelection[] = [this, ...this.resolveConnectedLists(), option.listSelection];\n\n for (const list of lists) {\n list.clearDropIndicator();\n }\n\n option.getHostElement().classList.remove(DROP_FORBIDDEN_CLASS);\n }\n\n private clearDropIndicator(): void {\n this.dropIndex = null;\n this.dropIndicatorOffset.set(null);\n }\n\n private containsPoint({ x, y }: { x: number; y: number }): boolean {\n if (!this.draggable) {\n return false;\n }\n\n const { top, right, bottom, left } = this.elementRef.nativeElement.getBoundingClientRect();\n\n return x >= left && x <= right && y >= top && y <= bottom;\n }\n\n /**\n * Resolves the gap the pointer sits in and positions the indicator on it. Geometry is read on every\n * move rather than cached at drag start: nothing in the list reflows while dragging, but CDK\n * auto-scrolls near the edges, which would silently invalidate a cache.\n */\n private showDropIndicator(dragged: KbqListOption, pointer: { x: number; y: number }): void {\n const horizontal = this.horizontal();\n // The dragged option is left out on purpose: CDK pulls its host element out of the flow, and\n // excluding it makes the resulting gap index directly usable as `currentIndex` — that is exactly\n // the index space `moveItemInArray` and `transferArrayItem` expect.\n const rects = this.options\n .filter((option) => option !== dragged)\n .map((option) => option.getHostElement().getBoundingClientRect());\n\n const startOf = (rect: DOMRect) => (horizontal ? rect.left : rect.top);\n const endOf = (rect: DOMRect) => (horizontal ? rect.right : rect.bottom);\n const midpointOf = (rect: DOMRect) => (startOf(rect) + endOf(rect)) / 2;\n\n const position = horizontal ? pointer.x : pointer.y;\n const index = rects.filter((rect) => position >= midpointOf(rect)).length;\n\n // The dragged option is not among `rects`, so the gaps above and below it collapse into the one\n // carrying its own index — the place it already occupies. Marking it would promise a move that\n // changes nothing, so the indicator stays hidden and the drop falls back to `previousIndex`.\n if (index === this.getOptionIndex(dragged)) {\n this.clearDropIndicator();\n\n return;\n }\n\n const container = this.elementRef.nativeElement.getBoundingClientRect();\n const scrolled = horizontal\n ? this.elementRef.nativeElement.scrollLeft\n : this.elementRef.nativeElement.scrollTop;\n\n // The gap sits before the first option, or right after the one that precedes it. An empty list\n // has no options to measure, so the indicator goes to the top of its content box.\n let boundary = startOf(container);\n\n if (rects.length) {\n boundary = index === 0 ? startOf(rects[0]) : endOf(rects[index - 1]);\n }\n\n this.dropIndex = index;\n this.dropIndicatorOffset.set(boundary - startOf(container) + scrolled);\n this.changeDetectorRef.markForCheck();\n }\n\n /**\n * Points the key manager at the option's new place, but only once the consumer has actually applied\n * the move — the list never reorders its own content, so nothing happens if `dropped` is left\n * unhandled. `setActiveItem` also re-anchors `previousActiveItemIndex`, which `options.changes`\n * leaves behind on the slot the option came from and shift-range selection would extend from.\n */\n private followMovedOption(option: KbqListOption, container: KbqListSelection): void {\n const { value } = option;\n\n // Tracked on the list the move is awaited on, so that a move into a connected list does not\n // cancel one still pending here. A move that is never applied leaves its subscription pending,\n // so drop the previous one first.\n container.pendingMoveSubscription?.unsubscribe();\n\n container.pendingMoveSubscription = container.options.changes\n .pipe(take(1), takeUntilDestroyed(container.destroyRef))\n .subscribe(() => {\n // Resolved against the navigable list: `setActiveItem` takes an index in the key\n // manager's own space, which the \"select all\" row leads when the target list renders one.\n const options = container.navigableOptions.toArray();\n // Reordering within a list keeps the instance; moving between lists recreates it.\n const index = options.includes(option)\n ? options.indexOf(option)\n : options.findIndex(\n (item) =>\n !container.isSelectAllRow(item) &&\n runCompareWith(container.compareWith(), item.value, value)\n );\n\n if (index !== -1) {\n container.keyManager.setActiveItem(index);\n }\n });\n }\n\n // View to model callback that should be called whenever the selected options change.\n private onChange: (value: T[]) => void = () => {};\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 options.\n */\n @Input()\n get selectAllHandler(): (event: KeyboardEvent, list: KbqListSelection<T>) => void {\n return this._selectAllHandler;\n }\n\n set selectAllHandler(fn: (event: KeyboardEvent, list: KbqListSelection<T>) => 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, list: KbqListSelection<T>): void {\n event.preventDefault();\n\n // Funnelled through the same method the master checkbox uses, so the shortcut and the row can\n // never disagree about what \"select all\" acted on.\n list.toggleSelectAll();\n }\n\n private copyActiveOption(event: KeyboardEvent): void {\n if (!this.keyManager.activeItem) return;\n\n const option = this.keyManager.activeItem;\n\n // The row carries no value; copying it would put the string \"undefined\" on the clipboard.\n if (this.isSelectAllRow(option)) return;\n\n option.preventBlur = true;\n\n if (this.onCopy.observed) {\n this.onCopy.emit(new KbqListCopyEvent(this, option, event));\n } else {\n this.onCopyDefaultHandler();\n\n event.preventDefault();\n }\n\n option.preventBlur = false;\n }\n}\n\n/**\n * Marker directive for the secondary line of a `kbq-list-option`.\n *\n * Purely a styling hook: it adds the `kbq-list-option-caption` class the list theme keys its\n * muted caption typography and per-state colors off.\n */\n@Directive({\n selector: '[kbq-list-option-caption]',\n host: {\n class: 'kbq-list-option-caption'\n }\n})\nexport class KbqListOptionCaption {}\n\n/**\n * Component for list-options of selection-list. Each list-option can automatically\n * generate a checkbox and can put current item into the selectionModel of selection-list\n * if the current item is selected.\n */\n@Component({\n selector: 'kbq-list-option',\n imports: [\n CdkDragPreview,\n KbqPseudoCheckbox,\n KbqActionContainer\n ],\n templateUrl: './list-option.html',\n providers: [\n { provide: KBQ_OPTION_ACTION_PARENT, useExisting: KbqListOption },\n { provide: KBQ_TITLE_TEXT_REF, useExisting: KbqListOption }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-list-option',\n role: 'option',\n '[class.kbq-selected]': 'selected',\n '[class.kbq-list-option_multiple]': 'listSelection.multiple',\n '[class.kbq-list-option_draggable]': 'draggable',\n '[class.kbq-list-option_grab-cursor]': 'showsGrabCursor',\n '[class.kbq-disabled]': 'disabled',\n '[class.kbq-focused]': 'hasFocus',\n '[class.kbq-action-button-focused]': 'actionButton()?.active',\n '[attr.aria-selected]': 'ariaSelected',\n '[attr.aria-checked]': 'ariaChecked',\n '[attr.aria-disabled]': 'disabled || null',\n '[attr.tabindex]': 'tabIndex',\n '(focusin)': 'focus()',\n '(blur)': 'blur()',\n '(click)': 'handleClick($event)',\n '(keydown)': 'onKeydown($event)'\n },\n hostDirectives: [CdkDrag],\n exportAs: 'kbqListOption',\n preserveWhitespaces: false\n})\nexport class KbqListOption<T = any> implements OnDestroy, OnInit, IFocusableOption, KbqTitleTextRef {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private changeDetector = inject(ChangeDetectorRef);\n private ngZone = inject(NgZone);\n private readonly drag = inject<CdkDrag<KbqListOptionDragData>>(CdkDrag, { host: true });\n private readonly destroyRef = inject(DestroyRef);\n listSelection: KbqListSelection<T> = inject(KbqListSelection);\n readonly group = inject(KbqOptgroup, { optional: true });\n hasFocus: boolean = false;\n preventBlur: boolean = false;\n\n readonly onFocus = new Subject<KbqOptionEvent<T>>();\n\n readonly onBlur = new Subject<KbqOptionEvent<T>>();\n\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 — see #DS-5079.\n @ContentChild(KbqTooltipTrigger) tooltipTrigger?: KbqTooltipTrigger;\n @ContentChild(KbqDropdownTrigger) dropdownTrigger?: KbqDropdownTrigger;\n readonly pseudoCheckbox = contentChild(KbqPseudoCheckbox);\n\n /**\n * Drag handles the consumer has projected into the option. Nothing else reads them — `CdkDrag`\n * collects its own through DI — they only tell the option whether the whole row starts a drag.\n */\n private readonly dragHandles = contentChildren(CDK_DRAG_HANDLE, { descendants: true });\n\n readonly text = viewChild.required<ElementRef>('text');\n\n /**\n * Not a duplicate of {@link text}: this is the `KbqTitleTextRef` property that `title.directive.ts`\n * reads through `KBQ_TITLE_TEXT_REF`. The interface is a plain `ElementRef`, so it cannot become a\n * signal query without breaking that contract — same class of constraint as #DS-5079.\n */\n @ViewChild('kbqTitleText', { static: false }) textElement: ElementRef;\n\n // Whether the label should appear before or after the checkbox. Defaults to 'after'\n readonly checkboxPosition = input<'before' | 'after'>(undefined!);\n\n /**\n * Whether this option is the list's \"select all\" row rather than one the consumer projected.\n *\n * Such a row has no `value` and no place in the `SelectionModel`, so everything that would resolve\n * it against the list's selection is skipped; its checkbox state and its selected look are driven\n * from the outside instead. It also stays out of the drag-and-drop registry — see the constructor.\n * @docs-private\n */\n readonly selectAllRow = input(false, { transform: booleanAttribute });\n\n /**\n * This is set to true after the first OnChanges cycle so we don't clear the value of `selected`\n * in the first cycle.\n */\n private inputsInitialized = false;\n\n /**\n * Value of the option, reported through the list's `ControlValueAccessor`.\n * Stays an accessor input: the setter drops the selection when the value is replaced.\n */\n @Input()\n get value(): T {\n return this._value;\n }\n set value(newValue: T) {\n // An equal-but-new object — an immutable refetch, a `@for` tracked by id — must not drop the\n // selection, so the incoming value is put to the model rather than to the value it replaces.\n // That keeps the comparator in its documented `(optionValue, modelValue)` order, which an\n // asymmetric comparator (options carry objects, the model carries ids) depends on.\n //\n // The reference check ahead of it is not just a fast path: it is what keeps an unchanged value\n // from being dropped when the comparator throws, since a swallowed throw also reads as \"no match\".\n const modelValues = this.listSelection._value;\n\n if (\n this.inputsInitialized &&\n this.selected &&\n newValue !== this._value &&\n modelValues != null &&\n !modelValues.some((modelValue) => runCompareWith(this.listSelection.compareWith(), newValue, modelValue))\n ) {\n this.selected = false;\n }\n\n this._value = newValue;\n }\n private _value: T;\n\n /**\n * Whether the option is disabled.\n * Stays an accessor input: the getter also reports the disabled state inherited from the list\n * and the option group, which a signal `input()` cannot express.\n */\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n const listSelectionDisabled = this.listSelection && this.listSelection.disabled;\n const groupDisabled = this.group && this.group.disabled;\n\n return listSelectionDisabled || groupDisabled || this._disabled;\n }\n\n set disabled(value: boolean) {\n if (value !== this._disabled) {\n this._disabled = value;\n this.syncDraggableState();\n // A disabled option leaves the set \"select all\" acts on, which changes the row's checkbox.\n this.listSelection.refreshSelectAllState();\n }\n }\n\n private _disabled = false;\n\n /**\n * Whether the option can be reordered by dragging. Set it to `false` to pin a single option while\n * the rest of the list stays draggable. Unrelated to `disabled`: the option keeps taking focus and\n * selection.\n *\n * Stays an accessor input: the getter reports the resolved state, which the option can only narrow —\n * the list gates its whole drop list, so an option cannot opt back in on its own.\n */\n @Input({ transform: booleanAttribute })\n get draggable(): boolean {\n // The \"select all\" row is a command, not one of the items being ordered.\n return !this.selectAllRow() && this._draggable && this.listSelection.draggable && !this.disabled;\n }\n\n set draggable(value: boolean) {\n this._draggable = value;\n this.syncDraggableState();\n }\n\n private _draggable = true;\n\n /**\n * Whether the option renders a pseudo-checkbox.\n * Stays an accessor input: when unset the getter falls back to the list's own mode.\n */\n @Input()\n get showCheckbox(): boolean {\n return this._showCheckbox !== undefined ? this._showCheckbox : this.listSelection.showCheckbox;\n }\n\n set showCheckbox(value: BooleanInput) {\n this._showCheckbox = coerceBooleanProperty(value);\n }\n\n private _showCheckbox: boolean | undefined;\n\n /**\n * Whether the option is selected.\n * Stays an accessor input: the state lives in the list's `SelectionModel`, not on the option.\n */\n @Input({ transform: booleanAttribute })\n get selected(): boolean {\n return this.listSelection.selectionModel?.isSelected(this) || false;\n }\n\n set selected(value: boolean) {\n if (value !== this._selected) {\n this.setSelected(value);\n }\n }\n\n private _selected = false;\n\n get tabIndex(): number | null {\n return this.disabled ? null : -1;\n }\n\n /** `aria-selected` of the row. The \"select all\" row reports `aria-checked` instead. */\n protected get ariaSelected(): boolean | null {\n return this.selectAllRow() ? null : this.selected;\n }\n\n /**\n * Tri-state of the \"select all\" row, `mixed` included. `null` for an ordinary option, which\n * reports `aria-selected` instead.\n */\n protected get ariaChecked(): string | null {\n if (!this.selectAllRow()) {\n return null;\n }\n\n const state = this.listSelection.selectAllState;\n\n return state === 'indeterminate' ? 'mixed' : `${state === 'checked'}`;\n }\n\n protected get externalPseudoCheckbox(): boolean {\n return !!this.pseudoCheckbox();\n }\n\n /**\n * Whether the row itself advertises the grab. Gated on `draggable` so that a pinned option inside a\n * `dragCursor=\"grab\"` list does not promise a pick-up it would refuse. The handle case is left to\n * CSS, which already hands the grab over to a projected `cdkDragHandle`.\n */\n protected get showsGrabCursor(): boolean {\n return this.draggable && this.listSelection.dragCursor() === 'grab';\n }\n\n constructor() {\n this.syncDraggableState();\n\n // The only class that lands on the preview in both modes: the text one is a plate of our own,\n // the full one a clone of the option. Styling keys \"a drag is in progress\" off it.\n this.drag.previewClass = DRAG_PREVIEW_CLASS;\n\n // Without a projected handle the whole row starts the drag, so a touch has to lose to a scroll\n // gesture first. A handle is unambiguous and may start immediately. `CdkDrag` re-reads the delay\n // on every `beforeStarted`, so assigning it whenever the query settles is enough.\n effect(() => {\n this.drag.dragStartDelay = this.dragHandles().length ? 0 : { touch: 300, mouse: 0 };\n });\n\n // Assigned lazily: referencing `this` while the host directive is still being constructed\n // would capture a half-initialized option.\n // Nothing is cleared on `ended`: it fires *before* `dropped`, so tearing the indicator down\n // there would take the resolved target index with it and turn every drop into a no-op.\n this.drag.started.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.drag.data = { option: this };\n this.listSelection.clearDropIndicators(this);\n });\n\n // Sorting is disabled, so CDK gives no running feedback about where the option would land —\n // the owning list derives it from the pointer and paints the insertion indicator itself.\n this.drag.moved.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(({ pointerPosition }) => {\n this.listSelection.onOptionDragMoved(this, pointerPosition);\n });\n }\n\n /**\n * Keeps the underlying `CdkDrag` in sync with the resolved `draggable` state.\n *\n * @docs-private\n */\n syncDraggableState(): void {\n this.drag.disabled = !this.draggable;\n this.changeDetector.markForCheck();\n }\n\n ngOnInit(): void {\n if (this.selectAllRow()) {\n // `CdkDrag` registers itself with the enclosing drop list from its own constructor, and the\n // row is rendered inside `kbq-list-selection`, so it lands in the registry like any option.\n // Left there it would take drag item #0 and shift the `previousIndex` every `dropped` event\n // reports, while `currentIndex` — derived from `options`, which the row is not part of —\n // would stay put. `disabled` alone does not unregister it. Deferred to here rather than done\n // in the constructor because a signal input is not set yet at construction time.\n this.drag.dropContainer?.removeItem(this.drag);\n\n // `syncDraggableState()` already ran from the constructor, where this input still read its\n // default — so on a list that was draggable from the first render the row was left with an\n // enabled `CdkDrag`. Unregistering it is not enough: `removeItem` leaves `DragRef` pointing\n // at the drop container, so a pointer-down would still start a drag reporting index -1.\n this.syncDraggableState();\n\n this.inputsInitialized = true;\n\n return;\n }\n\n // Resolving the model value is the list's job, not the option's. An option that matched itself\n // here answered a different question than `getOptionByValue` does — every match self-selected,\n // while the list picks the first — so a comparator that matches more than one option produced a\n // different selection depending on which path ran. The list re-resolves on `options.changes`.\n const wasSelected = this._selected;\n\n // List options that are selected at initialization can't be reported properly to the form\n // control. This is because it takes some time until the selection-list knows about all\n // available options. Also it can happen that the ControlValueAccessor has an initial value\n // that should be used instead. Deferring the value change report to the next tick ensures\n // that the form control value is not being overwritten.\n Promise.resolve().then(() => {\n if (this._selected || wasSelected) {\n this.selected = true;\n this.changeDetector.markForCheck();\n }\n });\n\n this.inputsInitialized = true;\n }\n\n ngOnDestroy(): void {\n // The row owns no selection, so there is nothing to release — but it does hold a place in the\n // navigable list, and a focused row that disappears still has to hand the key manager on.\n if (this.selectAllRow()) {\n this.listSelection.removeOptionFromList(this);\n\n return;\n }\n\n if (this.selected) {\n // We have to delay this until the next tick in order\n // to avoid changed after checked errors.\n Promise.resolve().then(() => (this.selected = false));\n }\n\n this.listSelection.removeOptionFromList(this);\n }\n\n /** Toggles the selected state of this option. */\n toggle(): void {\n this.selected = !this.selected;\n }\n\n getLabel(): string {\n // The \"select all\" row is kept out of type-ahead: its localized label would otherwise shadow\n // an option starting with the same letter.\n if (this.selectAllRow()) {\n return '';\n }\n\n const text = this.text();\n\n return text ? (text.nativeElement.textContent ?? '') : '';\n }\n\n /**\n * Splits the option's text into the two lines the `text` drag preview shows. The caption is\n * projected into the same container as the label, so the label is whatever that container holds\n * apart from the caption — subtracting one string from the other would be guesswork.\n *\n * Taken off a clone rather than by walking the container's children, the way `KbqDropdownItem`\n * drops icons out of its own label: `textContent` on an element skips the comment nodes Angular\n * leaves behind for its anchors, while reading one of those nodes directly would hand back the\n * anchor's name.\n *\n * Trimmed because `htmlWhitespaceSensitivity: 'ignore'` lets the indentation of the consumer's\n * template into the projected text.\n *\n * @docs-private\n */\n getDragPreviewText(): { label: string; caption: string } {\n const clone = (this.text().nativeElement as HTMLElement).cloneNode(true) as HTMLElement;\n const caption = clone.querySelector('.kbq-list-option-caption');\n\n caption?.remove();\n\n return { label: (clone.textContent ?? '').trim(), caption: (caption?.textContent ?? '').trim() };\n }\n\n /** Sets the selected state directly on the list's `SelectionModel`, bypassing the `selected` input setter. */\n setSelected(selected: boolean): void {\n const { selectionModel } = this.listSelection;\n\n // The row has no place in the selection model — its look is driven by `selectAllState`.\n if (!selectionModel || this.selectAllRow()) {\n return;\n }\n\n // The model is consulted alongside the mirror so that an option the model dropped behind the\n // mirror's back — single-selection mode does that whenever another option is selected — can still\n // be re-applied instead of being early-returned away.\n if (this._selected === selected && selectionModel.isSelected(this) === selected) {\n return;\n }\n\n this._selected = selected;\n\n if (selected) {\n this.listSelection.selectionModel.select(this);\n } else {\n this.listSelection.selectionModel.deselect(this);\n }\n\n this.changeDetector.markForCheck();\n }\n\n /**\n * Rendered height of the element, or 0 when it is not laid out (SSR, jsdom, `display: none`).\n * @docs-private\n */\n getHeight(): number {\n return kbqGetElementHeight(this.elementRef.nativeElement);\n }\n\n /** Handles click events on the list option. */\n protected handleClick($event: MouseEvent): void {\n // The row's own `(click)` in the list's template runs the batch toggle; this handler would\n // otherwise put the row itself through the ordinary selection path on the same click.\n if (this.disabled || this.selectAllRow()) {\n return;\n }\n\n this.listSelection.setSelectedOptionsByClick(\n this,\n hasModifierKey($event, 'shiftKey'),\n // ctrlKey is for Windows, metaKey is for MacOS\n hasModifierKey($event, 'ctrlKey', 'metaKey')\n );\n }\n\n /** Handles keydown events on the list option. */\n protected onKeydown($event: KeyboardEvent): void {\n kbqFocusOptionActionOnTab($event, this.actionButton());\n }\n\n /** Moves DOM focus to this option, unless it is disabled or already focused. */\n focus(): void {\n if (this.disabled || this.hasFocus || this.actionButton()?.hasFocus) {\n return;\n }\n\n this.elementRef.nativeElement.focus();\n\n this.onFocus.next({ option: this });\n\n Promise.resolve().then(() => {\n this.hasFocus = true;\n\n this.changeDetector.markForCheck();\n });\n }\n\n /** Marks this option as blurred once the zone stabilizes, unless {@link preventBlur} is set. */\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 list\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 this.hasFocus = false;\n\n if (this.actionButton()?.hasFocus) {\n return;\n }\n\n this.onBlur.next({ option: this });\n });\n });\n }\n\n /** The option's host DOM element. */\n getHostElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n}\n","@if (externalPseudoCheckbox) {\n <ng-content select=\"kbq-pseudo-checkbox\" />\n} @else if (showCheckbox) {\n <!-- Decorative: assistive technology reads the selected state from the option's own aria-selected. -->\n <kbq-pseudo-checkbox aria-hidden=\"true\" [disabled]=\"disabled\" [state]=\"selected ? 'checked' : 'unchecked'\" />\n}\n\n<ng-content select=\"[kbq-icon]\" />\n\n<div #kbqTitleText #text class=\"kbq-list-text\">\n <ng-content />\n <ng-content select=\"[kbq-list-option-caption]\" />\n</div>\n\n@if (actionButton()) {\n <kbq-action-container>\n <ng-content select=\"kbq-option-action\" />\n </kbq-action-container>\n}\n\n@if (listSelection.dragPreview() === 'text') {\n <!--\n Registers with the host `CdkDrag` through `CDK_DRAG_PARENT`, not through a content query, which\n is why it can live in the option's own view. The template body is a single element and nothing\n else: CDK wraps the view in a plain div otherwise, and that wrapper — not this plate — would\n become the preview. The plate is decorative, it repeats text the listbox already exposes.\n -->\n <ng-template cdkDragPreview>\n <div class=\"kbq-list-drag-preview_text\" aria-hidden=\"true\">\n <!-- Read on render rather than cached on `started`: CDK builds the preview before it emits. -->\n @let text = getDragPreviewText();\n <div class=\"kbq-list-drag-preview__label\">{{ text.label }}</div>\n @if (text.caption) {\n <div class=\"kbq-list-drag-preview__caption\">{{ text.caption }}</div>\n }\n </div>\n </ng-template>\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n QueryList,\n ViewEncapsulation,\n inject\n} from '@angular/core';\nimport { KbqLine, KbqLineSetter } from '@koobiq/components/core';\n\n/**\n * A plain, non-selectable list container.\n *\n * Intentionally carries no ARIA role: it is used both as a semantic list (consumers add\n * `role=\"list\"` themselves, as `kbq-file-upload` does) and as a purely visual grouping.\n * For a selectable listbox use `kbq-list-selection` instead.\n */\n@Component({\n selector: 'kbq-list',\n template: '<ng-content />',\n styleUrls: ['./list.scss', 'list-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kbq-list' }\n})\nexport class KbqList {}\n\n/** A single row of a `kbq-list`. Non-selectable — see `kbq-list-option` for the selectable variant. */\n@Component({\n selector: 'kbq-list-item, a[kbq-list-item]',\n templateUrl: './list-item.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-list-item',\n '(focus)': 'handleFocus()',\n '(blur)': 'handleBlur()'\n },\n preserveWhitespaces: false\n})\nexport class KbqListItem implements AfterContentInit {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n @ContentChildren(KbqLine) lines: QueryList<KbqLine>;\n\n ngAfterContentInit(): void {\n new KbqLineSetter(this.lines, this.elementRef);\n }\n\n getHostElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n protected handleFocus(): void {\n this.elementRef.nativeElement.classList.add('kbq-focused');\n }\n\n protected handleBlur(): void {\n this.elementRef.nativeElement.classList.remove('kbq-focused');\n }\n}\n","<ng-content select=\"[kbq-list-icon], [mcListIcon]\" />\n\n<div class=\"kbq-list-text\">\n <ng-content select=\"[kbq-line], [mcLine]\" />\n</div>\n\n<ng-content />\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { NgModule } from '@angular/core';\nimport { KbqActionContainer, KbqLine, KbqOptionModule, KbqPseudoCheckboxModule } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqListOption, KbqListOptionCaption, KbqListSelection } from './list-selection.component';\nimport { KbqList, KbqListItem } from './list.component';\n\n@NgModule({\n imports: [\n A11yModule,\n // Re-exported so that a drag handle can be projected into an option without the consumer\n // reaching into `@angular/cdk/drag-drop` — the list hides CDK everywhere else.\n CdkDragHandle,\n KbqPseudoCheckboxModule,\n KbqLine,\n KbqOptionModule,\n KbqActionContainer,\n KbqIconModule,\n KbqList,\n KbqListSelection,\n KbqListItem,\n KbqListOption,\n KbqListOptionCaption\n ],\n exports: [\n CdkDragHandle,\n KbqList,\n KbqListSelection,\n KbqListItem,\n KbqListOption,\n KbqListOptionCaption,\n KbqOptionModule\n ]\n})\nexport class KbqListModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"koobiq-components-list.mjs","sources":["../../../packages/components/list/list-selection.component.ts","../../../packages/components/list/list-option.html","../../../packages/components/list/list.component.ts","../../../packages/components/list/list-item.html","../../../packages/components/list/list.module.ts","../../../packages/components/list/koobiq-components-list.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CDK_DRAG_HANDLE, CdkDrag, CdkDragDrop, CdkDragPreview, CdkDropList } from '@angular/cdk/drag-drop';\nimport { _getFocusedElementPierceShadowDom, Platform } from '@angular/cdk/platform';\nimport { CdkVirtualForOf } from '@angular/cdk/scrolling';\nimport {\n AfterContentChecked,\n AfterContentInit,\n afterNextRender,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n contentChild,\n contentChildren,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n forwardRef,\n inject,\n input,\n isDevMode,\n NgZone,\n OnDestroy,\n OnInit,\n output,\n Provider,\n QueryList,\n signal,\n untracked,\n viewChild,\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 getKbqSelectNonFunctionValueError,\n getSelectAllState,\n hasModifierKey,\n HOME,\n IFocusableOption,\n isCopy,\n isSelectAll,\n isVerticalMovement,\n KBQ_OPTION_ACTION_PARENT,\n KBQ_SELECT_LOCALE_CONFIGURATION,\n KBQ_TITLE_TEXT_REF,\n KBQ_WINDOW,\n KbqActionContainer,\n kbqFocusOptionActionOnTab,\n kbqGetElementHeight,\n kbqInjectLocaleConfiguration,\n kbqLeaveTabOrderOnTabOut,\n KbqMultipleInput,\n KbqOptgroup,\n KbqOptionActionComponent,\n kbqOptionalNumberAttribute,\n KbqPseudoCheckbox,\n KbqPseudoCheckboxState,\n kbqQueryListFrom,\n KbqSelectAllAdapter,\n kbqSelectAllHandlerTransform,\n KbqTitleTextRef,\n LEFT_ARROW,\n MultipleMode,\n PAGE_DOWN,\n PAGE_UP,\n resolveMultipleMode,\n RIGHT_ARROW,\n runCompareWith,\n SPACE,\n TAB,\n toggleSelectAll,\n UP_ARROW\n} from '@koobiq/components/core';\nimport { KbqDropdownTrigger } from '@koobiq/components/dropdown';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { fromEvent, merge, Observable, Subject, Subscription } from 'rxjs';\nimport { auditTime, startWith, switchMap, take } from 'rxjs/operators';\n\n/** How long consecutive `window.resize` ticks are collapsed before the scroll size is recalculated. */\nconst RESIZE_AUDIT_TIME = 100;\n\n/**\n * Marks the dragged option while the pointer is over no list that would take it. Styling reads it from the\n * body, which is what resolves the cursor once the options are out of hit testing.\n */\nconst DROP_FORBIDDEN_CLASS = 'kbq-list-option_drop-forbidden';\n\n/**\n * Put on the drag preview whichever shape it takes, so styling has one hook that survives the\n * `dragPreview` mode switch.\n */\nconst DRAG_PREVIEW_CLASS = 'kbq-list-drag-preview';\n\nexport interface KbqOptionEvent<T = any> {\n option: KbqListOption<T>;\n}\n\nexport const KBQ_SELECTION_LIST_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KbqListSelection),\n multi: true\n};\n\nexport class KbqListSelectionChange<T = any> {\n constructor(\n public source: KbqListSelection<T>,\n public option: KbqListOption<T>\n ) {}\n}\n\nexport class KbqListSelectAllEvent<T> {\n constructor(\n public source: KbqListSelection,\n public options: T[]\n ) {}\n}\n\n/**\n * Event class that occurs when copying an item from the KbqListSelection.\n * Used to pass data about the copied item and copy context.\n *\n * @param source - instance of KbqListSelection\n * @param option - instance of KbqListOption\n * @param event - original keyboard event (optional) that triggered the copy\n */\nexport class KbqListCopyEvent<T> {\n constructor(\n public source: KbqListSelection,\n public option: T,\n public event?: KeyboardEvent\n ) {}\n}\n\n/**\n * Data attached to the underlying `CdkDrag` while a list option is being dragged. Kept unexported:\n * `dropped` already hands the option over, so nothing outside this file has to read `CdkDrag.data`.\n */\ntype KbqListOptionDragData = { option: KbqListOption };\n\n/**\n * How the floating copy of an option is rendered while it is dragged.\n *\n * `text` shows a compact plate with the option's own text and nothing else, `full` a clone of the\n * whole row.\n */\nexport type KbqListDragPreview = 'text' | 'full';\n\n/**\n * Whether a draggable option advertises with the cursor that the whole row can be picked up.\n *\n * `auto` leaves the row the cursor it would have anyway, `grab` turns the row into a visible handle.\n * A projected `cdkDragHandle` takes the grab over either way.\n */\nexport type KbqListDragCursor = 'auto' | 'grab';\n\n/** Event emitted when an option changes its position by dragging. */\nexport type KbqListSelectionDroppedEvent = Pick<CdkDragDrop<KbqListSelection>, 'previousIndex' | 'currentIndex'> & {\n /** Option that has been moved. */\n option: KbqListOption;\n /** List the option has been moved into. */\n container: KbqListSelection;\n /** List the option has been taken from. Equal to `container` when reordering within a single list. */\n previousContainer: KbqListSelection;\n /** Pointer event that ended the drag. */\n event: MouseEvent | TouchEvent;\n};\n\n@Component({\n selector: 'kbq-list-selection',\n imports: [\n forwardRef(() => KbqListOption),\n KbqPseudoCheckbox\n ],\n template: `\n @if (showSelectAll) {\n <!-- Every read of selectAllState walks the whole option list, so the two bindings below\n share one through @let. The row's own aria-checked host binding walks it a second time:\n Ivy evaluates that binding after this template, and the option reads the state off the\n list rather than from here. -->\n @let selectAllCheckboxState = selectAllState;\n\n <!--\n aria-checked and aria-selected come from the option's own host bindings: a host binding\n runs after the parent template's, so an override here would be the one that loses. The\n class binding is the other way around, which is why the selected state is written here.\n -->\n <kbq-list-option\n #selectAllRow\n class=\"kbq-list-selection__select-all\"\n [selectAllRow]=\"true\"\n [class.kbq-selected]=\"selectAllCheckboxState === 'checked'\"\n (click)=\"toggleSelectAll()\"\n >\n <kbq-pseudo-checkbox aria-hidden=\"true\" [disabled]=\"disabled\" [state]=\"selectAllCheckboxState\" />\n {{ selectAllText }}\n </kbq-list-option>\n }\n <ng-content />\n @if (dropIndicatorOffset() !== null) {\n <!-- Purely decorative: the drop target is a pointer affordance, not a status message. -->\n <div\n class=\"kbq-list-selection__drop-indicator\"\n aria-hidden=\"true\"\n [style.--kbq-list-drop-indicator-offset.px]=\"dropIndicatorOffset()\"\n ></div>\n }\n `,\n styleUrls: ['./list.scss', 'list-tokens.scss'],\n providers: [KBQ_SELECTION_LIST_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-list-selection',\n role: 'listbox',\n '[class.kbq-disabled]': 'disabled',\n '[class.kbq-list-selection_horizontal]': 'horizontal()',\n '[class.kbq-list-selection_draggable]': 'draggable',\n '[attr.aria-multiselectable]': 'multiple',\n '[attr.aria-orientation]': 'horizontal() ? \"horizontal\" : null',\n '[attr.aria-disabled]': 'disabled || null',\n '[attr.tabindex]': 'tabIndex',\n '(keydown)': 'onKeyDown($event)',\n '(focus)': 'focus()'\n },\n // `id` is exposed so that a consumer-set id survives `CdkDropList`'s own `[attr.id]` host binding\n // and can be used as a `connectedTo` reference.\n hostDirectives: [{ directive: CdkDropList, inputs: ['id'] }],\n exportAs: 'kbqListSelection',\n preserveWhitespaces: false\n})\nexport class KbqListSelection<T = any>\n implements AfterContentChecked, AfterContentInit, AfterViewInit, OnDestroy, ControlValueAccessor\n{\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private changeDetectorRef = inject(ChangeDetectorRef);\n private clipboard = inject(Clipboard, { optional: true });\n protected readonly focusMonitor = inject(FocusMonitor);\n\n keyManager: FocusKeyManager<KbqListOption<T>>;\n\n private readonly optionsQuery = contentChildren<KbqListOption<T>>(\n forwardRef(() => KbqListOption),\n { descendants: true }\n );\n private readonly optionsList = kbqQueryListFrom(this.optionsQuery);\n\n get options(): QueryList<KbqListOption<T>> {\n return this.optionsList();\n }\n\n /** Whether `ngAfterContentInit` has run. The options are not settled before that, so nothing reads them. */\n private contentReady = false;\n\n readonly onSelectAll = output<KbqListSelectAllEvent<KbqListOption<T>>>();\n\n /**\n * Emits when the active option is copied with Ctrl/Cmd + C. Subscribing replaces the built-in clipboard\n * copy, so the event stays an `EventEmitter`: the decision is made by reading `observed`, which\n * `OutputEmitterRef` does not have. A template listener subscribes to it through the output below.\n */\n readonly onCopy = new EventEmitter<KbqListCopyEvent<KbqListOption<T>>>();\n\n /** @docs-private */\n readonly onCopyOutput = outputFromObservable(this.onCopy, { alias: 'onCopy' });\n\n /** @docs-private */\n readonly autoSelectInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'autoSelect',\n transform: booleanAttribute\n });\n\n /**\n * Whether clicking an option clears the rest of the selection. Defaults to `true`, and to `false` for\n * `multiple=\"checkbox\"`, where a click is expected to toggle a single row. A bound value replaces the\n * default derived from {@link multiple}.\n */\n get autoSelect(): boolean {\n return this.autoSelectInput() ?? this.mode() !== MultipleMode.CHECKBOX;\n }\n\n /** @docs-private */\n readonly noUnselectLastInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'noUnselectLast',\n transform: booleanAttribute\n });\n\n /** Whether the last selected option can be deselected. Derived from the mode like {@link autoSelect}. */\n get noUnselectLast(): boolean {\n return this.noUnselectLastInput() ?? this.mode() !== MultipleMode.CHECKBOX;\n }\n\n /** @docs-private */\n readonly draggableInput = input<boolean, boolean | string | null | undefined>(false, {\n alias: 'draggable',\n transform: booleanAttribute\n });\n\n /**\n * Whether options can be reordered by dragging them.\n * Reordering never mutates the data — handle the `dropped` event and move the item yourself.\n */\n get draggable(): boolean {\n return this.resolvedDraggable();\n }\n\n private readonly resolvedDraggable = computed(() => this.draggableInput() && !this.disabled);\n\n /**\n * Lists that options of this list can be moved into. Accepts `KbqListSelection` instances or the\n * `id` of another list. `cdkDropListGroup` on a common ancestor connects lists automatically.\n */\n readonly connectedTo = input<KbqListSelection<T> | string | readonly (KbqListSelection<T> | string)[]>([]);\n\n /**\n * What the option's floating copy looks like while it is dragged. Defaults to `text`: a compact\n * plate carrying the option's label and caption, capped at a readable width. Use `full` to drag a\n * clone of the whole row, checkbox, icons and action button included.\n */\n readonly dragPreview = input<KbqListDragPreview>('text');\n\n /**\n * Whether a draggable option shows the grab cursor over the whole row. Defaults to `auto`, which\n * leaves the row the cursor it has anyway. Use `grab` where the whole row is meant to read as a\n * handle. An option carrying a projected `cdkDragHandle` ignores this — the handle keeps the grab.\n */\n readonly dragCursor = input<KbqListDragCursor>('auto');\n\n /** Emits when an option changes its position by dragging. */\n readonly dropped = output<KbqListSelectionDroppedEvent>();\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 options. `multiple=\"checkbox\"` only —\n * a vertical list, since the row is a full-width heading of the column it governs.\n *\n * The row acts on every option the user can toggle, disabled ones excluded. Enabling it also makes\n * Ctrl/Cmd + A a two-way toggle, so the shortcut and the checkbox never disagree ({@link selectAllToggle}\n * is implied).\n *\n * Aliased rather than named `selectAll`, which is already taken by the imperative method of that name.\n */\n readonly selectAllEnabled = input(false, { alias: 'selectAll', transform: booleanAttribute });\n\n /**\n * Reference to the built-in \"select all\" row, rendered only while `selectAll` is on.\n *\n * Located by template reference rather than by the `KbqListOption` type: that class is declared\n * below this one in the same file, and a query locator is evaluated while this class is being\n * defined, which would read it in its temporal dead zone.\n */\n readonly selectAllOption = viewChild<KbqListOption<T>>('selectAllRow');\n\n /**\n * The options the key manager navigates: the \"select all\" row first, then the projected ones.\n *\n * Kept apart from {@link options} because that query is public API and means \"the options the consumer\n * projected\" — a synthetic entry there would corrupt `getSelectedOptionValues`, the drop-indicator\n * geometry and every consumer tally built on it.\n *\n * @docs-private\n */\n readonly navigableOptions = new QueryList<KbqListOption<T>>();\n\n /**\n * The virtual scroller rendering the options, when the consumer projected one.\n *\n * A signal query rather than a DOM probe, mirroring `KbqSelect.cdkVirtualForOf`: it resolves on the\n * server as well as in the browser, and it follows a viewport that appears later behind the\n * consumer's own `@if`.\n */\n private readonly virtualScroll = contentChild(CdkVirtualForOf);\n\n /**\n * Whether the \"select all\" row is currently rendered.\n *\n * Suppressed inside a `cdk-virtual-scroll-viewport`: `options` then holds only the options currently\n * rendered, so the checkbox would report \"everything selected\" after touching a fraction of the data\n * — the same reason `kbq-select` refuses the row under `withVirtualScroll`. Suppressed on an empty\n * list too: a master checkbox over nothing has nothing to say.\n */\n protected get showSelectAll(): boolean {\n return (\n this.selectAllEnabled() &&\n this.mode() === MultipleMode.CHECKBOX &&\n !this.horizontal() &&\n !this.virtualScroll() &&\n !!this.options?.length\n );\n }\n\n /** Label of the \"select all\" row. Follows the active locale. */\n protected get selectAllText(): string {\n return this.selectConfiguration().selectAll;\n }\n\n private readonly selectConfiguration = kbqInjectLocaleConfiguration('select', KBQ_SELECT_LOCALE_CONFIGURATION);\n\n /** Whether every option \"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 list.\n return targets.length > 0 && targets.every((option) => option.selected);\n }\n\n /** State of the \"select all\" master checkbox. */\n get selectAllState(): KbqPseudoCheckboxState {\n return getSelectAllState(this.selectAllAdapter(this.selectAllTargets));\n }\n\n /**\n * Options \"select all\" acts on, and the ones its checkbox state is derived from. Read from\n * {@link options}, so the row it renders itself is never among them.\n */\n private get selectAllTargets(): readonly KbqListOption<T>[] {\n return this.selectAllTargetsState();\n }\n\n // A signal of its own: the template and the row's `aria-checked` host binding both read the targets in the list's\n // view, where the `disabled` state of every option read twice would cost a scan of all that view has read so far.\n private readonly selectAllTargetsState = computed(() => this.optionsQuery().filter((option) => !option.disabled));\n\n /**\n * Adapter shared by the master checkbox and the Ctrl/Cmd + A handler, so the two cannot drift apart. Takes the\n * items, which the toggle emits as well.\n */\n private selectAllAdapter(items: readonly KbqListOption<T>[]): KbqSelectAllAdapter<KbqListOption<T>> {\n return {\n items,\n isSelectable: () => true,\n isSelected: (option) => option.selected,\n setSelected: (option, selected) => option.setSelected(selected)\n };\n }\n\n /**\n * Selection mode of the list.\n *\n * `checkbox` renders a checkbox in every option, `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 option and\n * reports the shortened value through the `ControlValueAccessor`.\n *\n * The getter reports whether more than one option can be selected; read {@link multipleMode} for the\n * mode 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 option 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: options read it through `multiple` and `showCheckbox`, and only a signal\n * read re-runs their `OnPush` views and host bindings.\n */\n private readonly mode = signal<MultipleMode | null>(null);\n\n readonly horizontal = input<boolean, unknown>(false, { transform: booleanAttribute });\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 list, `-1` while it is disabled. */\n get tabIndex(): number {\n return this.disabled ? -1 : this.ownTabIndex();\n }\n\n /** Tab index the list holds while enabled. Also written outside any listener, hence a signal. */\n private readonly ownTabIndex = signal(0);\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 list 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 /**\n * Function used for comparing an option against the selected value when determining which\n * options should appear as selected. The first argument is the value of an options. The second\n * one is a value from the selected value. A boolean must be returned.\n *\n * Bind a stable reference — a field or a bound method. An expression that builds a new function on\n * every change detection pass makes the list re-resolve every value against every option each pass.\n */\n readonly compareWith = input<(o1: T, o2: T) => boolean, (o1: T, o2: T) => boolean>((a1, a2) => a1 === a2, {\n // Mirrors `KbqSelect`, which throws from its transform too: a comparator that is not callable would\n // otherwise surface as an empty selection and a warning per option.\n transform: (fn) => {\n if (typeof fn !== 'function') {\n throw getKbqSelectNonFunctionValueError();\n }\n\n return fn;\n }\n });\n\n userTabIndex: number | null = null;\n\n get showCheckbox(): boolean {\n return this.mode() === MultipleMode.CHECKBOX;\n }\n\n // Emits a change event whenever the selected state of an option changes.\n readonly selectionChange = output<KbqListSelectionChange<T>>();\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 selectionModel: SelectionModel<KbqListOption<T>>;\n\n // Built over the navigable list, not `options`: the \"select all\" row lives in this component's own\n // view, so its focus would otherwise reach nobody and leave the key manager pointing at whichever\n // option was active before the user clicked the row.\n get optionFocusChanges(): Observable<KbqOptionEvent<T>> {\n return merge(...this.navigableOptions.map((option) => option.onFocus));\n }\n\n get optionBlurChanges(): Observable<KbqOptionEvent<T>> {\n return merge(...this.navigableOptions.map((option) => option.onBlur));\n }\n\n _value: T[] | null;\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly platform = inject(Platform);\n private readonly ngZone = inject(NgZone);\n private readonly window = inject(KBQ_WINDOW);\n private readonly dropList = inject<CdkDropList<KbqListSelection>>(CdkDropList, { host: true });\n\n /**\n * Distance from the list's content box to the gap the dragged option would land in, or `null`\n * while no drag is hovering this list. Drives the insertion indicator.\n */\n protected readonly dropIndicatorOffset = signal<number | null>(null);\n\n /** Gap the indicator currently marks, used as `currentIndex` when the drag is dropped here. */\n private dropIndex: number | null = null;\n\n private pendingMoveSubscription: Subscription | null;\n\n private hasWarnedOnDragContainer = false;\n\n /** Whether a deferred {@link initializeSelection} pass is already queued for this microtask turn. */\n private pendingSelectionInit = false;\n\n /** Whether a form control has ever written to the list, i.e. whether {@link _value} speaks for a model. */\n private hasWrittenValue = false;\n\n private selectionModelSubscription: Subscription | null = null;\n\n /** Whether a value report is already queued for the end of the current tick. */\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 private destroyed = false;\n\n constructor() {\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 `KbqListOption.setSelected` refuses to touch the selection without one, and a static\n // `multiple` attribute reaches the input right after the constructor, before any option exists.\n this.selectionModel = new SelectionModel<KbqListOption<T>>(false);\n\n // A different comparator means a different set of options can match the model value.\n effect(() => {\n this.compareWith();\n this.initializeSelection();\n });\n\n // The \"select all\" row is rendered by this component's own template, so `options.changes` never\n // fires for it — the navigable list has to be rebuilt whenever the view query resolves or drops it.\n effect(() => {\n this.selectAllOption();\n\n // Untracked: the options are read here too, and their changes are handled by `options.changes`.\n untracked(() => this.syncNavigableOptions());\n });\n\n this.setupDropListInitialProperties();\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 options; bound back to `undefined` or `null`, it\n // restores that default.\n effect(() => {\n const tabIndex = this.tabIndexInput();\n\n untracked(() => {\n if (tabIndex !== undefined) {\n this.userTabIndex = tabIndex;\n this.ownTabIndex.set(tabIndex);\n } else if (this.userTabIndex !== null) {\n this.userTabIndex = null;\n this.updateTabIndex();\n }\n });\n });\n\n effect(() => {\n this.resolvedDraggable();\n\n untracked(() => this.syncDraggableState());\n });\n }\n\n /** Rebuilds {@link navigableOptions}: the \"select all\" row, when rendered, leads the projected options. */\n private syncNavigableOptions(): void {\n const selectAllOption = this.selectAllOption();\n const options = this.options?.toArray() ?? [];\n\n this.navigableOptions.reset(selectAllOption ? [selectAllOption, ...options] : options);\n this.navigableOptions.notifyOnChanges();\n }\n\n /**\n * Marks the list for check after an option changed something the \"select all\" row is derived from —\n * its selection or its `disabled` state.\n *\n * An option marking itself only asks its ancestors to traverse down to it; it does not re-evaluate\n * their own bindings. Without this the row keeps painting a state the options have already left, and\n * a click on a checkbox showing `indeterminate` over an already-full selection takes the deselect\n * branch — doing the opposite of what the user was shown.\n *\n * @docs-private\n */\n refreshSelectAllState(): void {\n if (this.showSelectAll) {\n this.changeDetectorRef.markForCheck();\n }\n }\n\n /** Whether the option is the built-in \"select all\" row rather than one the consumer projected. */\n private isSelectAllRow(option: KbqListOption<T> | null): boolean {\n return !!option && option === this.selectAllOption();\n }\n\n /**\n * Selects every option \"select all\" can act on, or deselects them all when they are already selected.\n *\n * Backs both the master checkbox and Ctrl/Cmd + A, so the two can never disagree. Reports the value\n * once for the whole batch instead of once per option.\n */\n toggleSelectAll(): void {\n // Untracked, like the other imperative methods: called from a consumer's `effect()`, the state read on the\n // way — the options, `disabled`, the mode, the inputs — would make the effect run again on every change.\n untracked(() => {\n // The row's own `(click)` and the shortcut both funnel through here, so this is the single place\n // to refuse acting on a disabled list — the guard every option already gets in `handleClick`.\n if (this.disabled) return;\n\n const targets = this.selectAllTargets;\n\n toggleSelectAll(this.selectAllAdapter(targets), { allowDeselect: this.allowSelectAllDeselect });\n\n // Reported unconditionally, as the shortcut has always done: a repeat that flips nothing still\n // re-reports the value, which is what normalizes a form value holding entries no option matches.\n this.reportValueChange();\n\n // Deliberately no `selectionChange`: that event carries a single option, and a batch is\n // reported through `onSelectAll` instead — the contract Ctrl/Cmd + A has always had. A copy, since the\n // targets are memoized and the event hands its array to the consumer.\n this.onSelectAll.emit(new KbqListSelectAllEvent(this, [...targets]));\n });\n }\n\n /**\n * Whether a repeated toggle deselects. Keyed on {@link showSelectAll} rather than on the raw input:\n * with no row on screen there is no checkbox for the shortcut to agree with, so the attribute must\n * not quietly change what Ctrl/Cmd + A does.\n */\n private get allowSelectAllDeselect(): boolean {\n return this.showSelectAll || this.selectAllToggle();\n }\n\n /**\n * Sets the mode from the `multiple` binding, once per bound value: an unbound input leaves what the\n * {@link multipleMode} setter wrote, and a value bound back to `undefined` means 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 this.mode.set(next);\n\n if (this.selectionModel.isMultipleSelection() !== !!next) {\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 // Read from the model rather than from the content query: inside a virtual scroll only the options\n // in view are instantiated, and the ones outside it are selected just the same. Copied because\n // CDK hands back its own cached array.\n const selected = [...this.selectionModel.selected];\n // Narrowing keeps one option: the first selected one in DOM order, falling back to the model's own\n // order when that option is not currently rendered.\n const rendered = this.options?.find((option) => this.selectionModel.isSelected(option));\n const kept = multiple ? selected : selected.slice(0, 1);\n\n if (!multiple && rendered && selected.includes(rendered)) {\n kept[0] = rendered;\n }\n\n const dropped = selected.filter((option) => !kept.includes(option));\n\n // `initiallySelectedValues` seeds the model without emitting.\n this.selectionModel = new SelectionModel<KbqListOption<T>>(multiple, kept);\n this.bindSelectionModel();\n\n // Reconciles both directions against the model that is actually in use now, so no option is left\n // painted by a stale mirror.\n this.options?.forEach((option) => option.setSelected(this.selectionModel.isSelected(option)));\n\n if (dropped.length) {\n // The options lost their selection without going through the model, so nothing else would\n // announce it.\n dropped.forEach((option) => this.emitChangeEvent(option));\n this.scheduleValueReport();\n }\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 list 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 this.pendingValueReport = false;\n\n if (!this.destroyed) {\n this.reportValueChange();\n }\n });\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((event) => {\n for (const item of event.added) {\n item.setSelected(true);\n }\n\n for (const item of event.removed) {\n item.setSelected(false);\n }\n\n this.refreshSelectAllState();\n });\n }\n\n ngAfterContentInit(): void {\n this.contentReady = true;\n this.keyManager = new FocusKeyManager<KbqListOption<T>>(this.navigableOptions)\n .withTypeAhead()\n .withVerticalOrientation(!this.horizontal())\n .withHorizontalOrientation(this.horizontal() ? 'ltr' : null);\n\n kbqLeaveTabOrderOnTabOut(\n this.keyManager.tabOut,\n this.elementRef.nativeElement,\n () => this.tabIndex,\n this.destroyRef\n );\n\n // The initial value is applied by the `options.changes` subscription below, which starts with the\n // options already present. Applying it synchronously here instead would settle the selection after\n // the parent view was checked and raise NG0100.\n // Repairs each option's `_selected` mirror after the model changes on its own — single-selection\n // mode drops the previous winner whenever another option is selected. Deliberately not moved\n // earlier: writes that happen during input binding would flip a host binding mid-pass (NG0100).\n // `setSelected` consults the model too, so a write that lands before this is still recoverable.\n this.bindSelectionModel();\n\n this.listenToOptionsFocus();\n\n this.options.changes.pipe(startWith(null), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.syncNavigableOptions();\n this.updateTabIndex();\n this.initializeSelection();\n });\n\n if (!this.platform.isBrowser) return;\n\n this.warnOnUnsupportedSelectAllContainer();\n this.warnOnUnsupportedDragContainer();\n this.updateScrollSize();\n\n // `updateScrollSize` only feeds the key manager's page size — nothing rendered depends on it,\n // so the listener stays outside the zone and never schedules change detection. `auditTime`\n // collapses a resize drag into one pair of forced layout reads per interval.\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.window, 'resize')\n .pipe(auditTime(RESIZE_AUDIT_TIME), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.updateScrollSize());\n });\n }\n\n ngAfterContentChecked(): void {\n // Syncs the list here so `changes` emits after the projected items are bound and before the host bindings.\n this.optionsList();\n }\n\n ngAfterViewInit(): void {\n // Reports the focus leaving only when it lands outside the list (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 list.\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 this.focusMonitor.stopMonitoring(this.elementRef);\n }\n\n focus(): void {\n untracked(() => {\n if (this.options.length === 0) {\n return;\n }\n\n if (this.selectionModel.selected.length) {\n this.options.find((option) => option.selected)?.focus();\n } else {\n this.keyManager.setFirstItemActive();\n }\n });\n }\n\n /** Clears the active key-manager item (unless an option is still focused) and marks the list as touched. */\n blur(): void {\n untracked(() => {\n if (!this.hasFocusedOption()) {\n this.keyManager.setActiveItem(-1);\n }\n\n this.onTouched();\n this.changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * Selects every option and reports the new value to the `ControlValueAccessor`.\n *\n * Unlike the `selectAll` attribute and Ctrl/Cmd + A, this acts on disabled options as well — it is\n * an imperative command, not something the user performed. See {@link toggleSelectAll} for the\n * behaviour the master checkbox has.\n */\n selectAll(): void {\n untracked(() => {\n this.options.forEach((option) => option.setSelected(true));\n\n this.reportValueChange();\n });\n }\n\n /** Deselects every option, disabled ones included, and reports the new value. See {@link selectAll}. */\n deselectAll(): void {\n untracked(() => {\n this.options.forEach((option) => option.setSelected(false));\n\n this.reportValueChange();\n });\n }\n\n updateScrollSize(): void {\n if (this.horizontal() || !this.options.first) {\n return;\n }\n\n const optionHeight = this.options.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 setSelectedOptionsByClick(option: KbqListOption<T>, shiftKey: boolean, ctrlKey: boolean): void {\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);\n } else if (this.autoSelect) {\n this.selectionModel.clear();\n this.selectionModel.toggle(option);\n } else {\n this.selectionModel.toggle(option);\n }\n\n this.emitChangeEvent(option);\n this.reportValueChange();\n }\n\n setSelectedOptionsByKey(option: KbqListOption<T>, shiftKey: boolean, ctrlKey: boolean): void {\n if (shiftKey && this.multiple) {\n this.selectActiveOptions();\n } else if (ctrlKey) {\n if (!this.canDeselectLast(option)) {\n return;\n }\n } else if (this.autoSelect) {\n this.options.forEach((item) => item.setSelected(false));\n option.setSelected(true);\n }\n\n if (shiftKey || ctrlKey || this.autoSelect) {\n this.emitChangeEvent(option);\n this.reportValueChange();\n }\n }\n\n selectActiveOptions(): void {\n // Indexed against the navigable list, which is what the key manager reports positions in. The\n // \"select all\" row leads that list when rendered and is filtered back out below, so a range\n // extended across it selects the options it spans and leaves the row itself alone.\n const options = this.navigableOptions.toArray();\n let fromIndex = this.keyManager.previousActiveItemIndex;\n let toIndex = (this.keyManager.previousActiveItemIndex = this.keyManager.activeItemIndex);\n\n // `previousActiveItemIndex` stays -1 until the key manager has moved at least once, so a\n // shift + click before any keyboard navigation has no anchor to extend the range from.\n if (toIndex === fromIndex || !this.isValidIndex(fromIndex) || !this.isValidIndex(toIndex)) {\n return;\n }\n\n const anchor = options[fromIndex];\n\n // The row carries no selection of its own, so a range anchored on it has no state to apply.\n if (this.isSelectAllRow(anchor)) {\n return;\n }\n\n const selectedOptionState = anchor.selected;\n\n if (fromIndex > toIndex) {\n [fromIndex, toIndex] = [toIndex, fromIndex];\n }\n\n options\n .slice(fromIndex, toIndex + 1)\n .filter((item) => !item.disabled && !this.isSelectAllRow(item))\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 // Implemented as part of ControlValueAccessor.\n writeValue(values: T[] | T | null): void {\n untracked(() => {\n this.applyMultipleInput();\n this.hasWrittenValue = true;\n\n // A form control may push a bare value instead of an array; normalize it here so that\n // `_value` always matches its declared type and stays safe to iterate over.\n this._value = values == null ? null : Array.isArray(values) ? values : [values];\n\n if (this.contentReady) {\n this.setOptionsFromValues(this._value ?? []);\n }\n });\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: T[]) => void): void {\n this.onChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n // Implemented as a part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n untracked(() => {\n this.applyDisabledInput();\n\n // `KbqListOption.disabled` reads the list through its getter, so disabling the list cascades\n // to every option without overwriting their own `disabled` inputs.\n this.disabledState.set(isDisabled);\n });\n }\n\n /** Values of the currently selected options. */\n getSelectedOptionValues(): T[] {\n return this.options.filter((option) => option.selected).map((option) => option.value);\n }\n\n // Toggles the selected state of the currently focused option.\n toggleFocusedOption(): void {\n untracked(() => {\n const focusedIndex = this.keyManager.activeItemIndex;\n\n if (focusedIndex != null && this.isValidIndex(focusedIndex)) {\n const focusedOption: KbqListOption<T> = this.navigableOptions.toArray()[focusedIndex];\n\n // The row holds no selection of its own, so `toggle()` would be a no-op on it. Space and\n // Enter have to reach the batch toggle instead, exactly as a click on the row does.\n if (this.isSelectAllRow(focusedOption)) {\n this.toggleSelectAll();\n\n return;\n }\n\n if (focusedOption && !focusedOption.disabled && this.canDeselectLast(focusedOption)) {\n focusedOption.toggle();\n\n // Emit a change event because the focused option changed its state through user interaction.\n this.emitChangeEvent(focusedOption);\n this.reportValueChange();\n }\n }\n });\n }\n\n /** Whether `listOption` is allowed to be deselected, given {@link noUnselectLast}. */\n canDeselectLast(listOption: KbqListOption<T>): boolean {\n return !(this.noUnselectLast && this.selectionModel.selected.length === 1 && listOption.selected);\n }\n\n /**\n * Rendered height of the element, or 0 when it is not laid out (SSR, jsdom, `display: none`).\n *\n * @docs-private\n */\n getHeight(): number {\n return kbqGetElementHeight(this.elementRef.nativeElement);\n }\n\n /**\n * Called when the control is blurred. Needed to properly implement `ControlValueAccessor`.\n *\n * @docs-private\n */\n onTouched: () => void = () => {};\n\n // Removes an option from the selection list and updates the active item.\n removeOptionFromList(option: KbqListOption<T>): void {\n untracked(() => {\n if (!option.hasFocus) {\n return;\n }\n\n const optionIndex = this.navigableOptions.toArray().indexOf(option);\n\n // Check whether the option is the last item\n if (optionIndex === this.navigableOptions.length - 1) {\n this.keyManager.setPreviousItemActive();\n } else {\n this.keyManager.setNextItemActive();\n }\n });\n }\n\n /** Handles keydown events on the list. */\n onKeyDown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n\n if ([SPACE, ENTER, 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 ([SPACE, ENTER].includes(keyCode)) {\n this.toggleFocusedOption();\n\n return;\n } else if (keyCode === TAB) {\n this.keyManager.tabOut.next();\n\n return;\n } else if (this.horizontal() ? keyCode === RIGHT_ARROW : keyCode === DOWN_ARROW) {\n this.keyManager.setNextItemActive();\n } else if (this.horizontal() ? keyCode === LEFT_ARROW : keyCode === UP_ARROW) {\n this.keyManager.setPreviousItemActive();\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 // Everything the list does not navigate on itself goes to the key manager, which is what\n // drives type-ahead. Arrow keys never reach it — the branches above own them — so the\n // manager's own orientation config cannot double-handle them.\n this.keyManager.onKeydown(event);\n }\n\n // Navigating onto the \"select all\" row must not select it: it holds no selection of its own,\n // and in `autoSelect` mode the branch below would clear the list to select nothing.\n if (\n this.keyManager.activeItem &&\n this.isNavigationKey(event) &&\n !this.isSelectAllRow(this.keyManager.activeItem)\n ) {\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 /** Whether the key just handled moved the active option, taking the list orientation into account. */\n private isNavigationKey(event: KeyboardEvent): boolean {\n if (this.horizontal() && [LEFT_ARROW, RIGHT_ARROW].includes(event.keyCode)) {\n return true;\n }\n\n return isVerticalMovement(event);\n }\n\n // Reports a value change to the ControlValueAccessor\n reportValueChange(): void {\n untracked(() => {\n if (this.contentReady) {\n const value = this.getSelectedOptionValues();\n\n this.onChange(value);\n this._value = value;\n }\n });\n }\n\n // Emits a change event if the selected state of an option changed.\n emitChangeEvent(option: KbqListOption<T>): void {\n this.selectionChange.emit(new KbqListSelectionChange<T>(this, option));\n }\n\n private initializeSelection(): void {\n // Several triggers land in the same turn — `options.changes`, the comparator effect, a form write.\n // They would all apply the identical value, so the first one queued does the work for all of them.\n if (this.pendingSelectionInit) {\n return;\n }\n\n this.pendingSelectionInit = true;\n\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n this.pendingSelectionInit = false;\n\n // `options` is a content query: the comparator effect can reach this before it has settled.\n // Once a form control has written, an empty value applies as an empty selection instead of\n // being skipped, so that swapping the comparator also clears what the previous one matched.\n // Without a control the list has no model to speak for, and `[selected]` options stand.\n if (this.contentReady && (this._value || this.hasWrittenValue)) {\n this.setOptionsFromValues(this._value ?? []);\n }\n });\n }\n\n protected updateTabIndex(): void {\n // Counted over `options`, not the navigable list: the \"select all\" row only renders when there\n // is at least one option, so the two are empty together — and `navigableOptions` is rebuilt a\n // pass later, which would leave an emptied list holding a tab stop with nothing to focus.\n this.ownTabIndex.set(this.userTabIndex || (this.options.length === 0 ? -1 : 0));\n }\n\n private onCopyDefaultHandler(): void {\n this.clipboard?.copy(String(this.keyManager.activeItem!.value));\n }\n\n /**\n * Re-points the focus/blur streams at the current options every time the query list changes.\n * `switchMap` tears down the previous `merge` for us, so no manual subscription bookkeeping.\n */\n private listenToOptionsFocus(): void {\n // Re-subscribed on the navigable list rather than on `options`: the latter never fires when the\n // \"select all\" row alone appears or disappears, which would leave its focus unheard.\n this.navigableOptions.changes\n .pipe(\n startWith(null),\n switchMap(() => this.optionFocusChanges),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((event) => {\n const index: number = this.navigableOptions.toArray().indexOf(event.option);\n\n if (this.isValidIndex(index)) {\n this.keyManager.updateActiveItem(index);\n }\n });\n\n this.navigableOptions.changes\n .pipe(\n startWith(null),\n switchMap(() => this.optionBlurChanges),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n if (!this.hasFocusedOption()) {\n this.keyManager.setActiveItem(-1);\n }\n });\n }\n\n /** Checks whether any of the options is focused. */\n private hasFocusedOption(): boolean {\n // Asked of the navigable list so that focus resting on the \"select all\" row does not read as\n // \"nothing is focused\" and clear the key manager out from under it.\n return this.navigableOptions.some((option) => option.hasFocus);\n }\n\n // Returns the option with the specified value.\n private getOptionByValue(value: T): KbqListOption<T> | undefined {\n const compareWith = this.compareWith();\n\n // `null`/`undefined` are left to the comparator rather than rejected here: an option declared\n // without a `[value]` reports `undefined` back through the form control, and has to be able to\n // find itself again when that value is re-applied.\n return this.options.find((option) => runCompareWith(compareWith, option.value, value));\n }\n\n // Sets the selected options based on the specified values.\n private setOptionsFromValues(values: T[]): void {\n // Resolved up front and applied as a delta: `setSelected` early-returns on an unchanged state, so\n // re-applying the same value writes nothing to the `SelectionModel` and schedules no change\n // detection. Deselecting everything first would churn both on every call.\n const selection = new Set(values.map((value) => this.getOptionByValue(value)));\n\n this.options.forEach((option) => option.setSelected(selection.has(option)));\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 // Bounded by the navigable list, the index space the key manager reports in.\n return index >= 0 && index < this.navigableOptions.length;\n }\n\n // Returns the index of the specified list option.\n private getOptionIndex(option: KbqListOption<T>): number {\n return this.options.toArray().indexOf(option);\n }\n\n private setupDropListInitialProperties(): void {\n // Lets the `dropped` handler map a `CdkDropList` back to the list that owns it.\n this.dropList.data = this;\n // The drop position is shown by an insertion indicator instead of by opening a gap, so CDK must\n // not sort: the options stay put and the dragged one keeps its slot as a faded placeholder.\n // Both flags are re-read from the directive on every drag start, so assigning once is enough.\n this.dropList.sortingDisabled = true;\n // Without an anchor the placeholder follows the option into the connected list, leaving the\n // origin list with a hole instead of the faded row.\n this.dropList.hasAnchor = true;\n this.syncDraggableState();\n\n effect(() => {\n this.dropList.orientation = this.horizontal() ? 'horizontal' : 'vertical';\n // `CdkDropList` resolves its siblings on every drag start, so a late assignment is picked up.\n this.dropList.connectedTo = this.resolveConnectedDropLists();\n });\n\n // `enter()` is not gated on `sortingDisabled`, so the placeholder follows the option into\n // whichever list it is dragged over and pushes that list's options apart. Only the list the\n // drag started in may show it — there it is the faded row left behind. Toggled imperatively\n // because the placeholder is already in the DOM by the time this runs, and waiting for change\n // detection would let the shifted layout paint for a frame.\n this.dropList.entered.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(({ item }) => {\n item.getPlaceholderElement().classList.toggle(\n 'kbq-list-option_foreign-placeholder',\n item.dropContainer.data !== this\n );\n });\n\n this.dropList.dropped\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(({ previousIndex, previousContainer, container, item, event }) => {\n const { option }: KbqListOptionDragData = item.data;\n const target: KbqListSelection = container.data;\n // Sorting is disabled, so CDK reports the untouched starting index. The gap the indicator\n // marked is the real target; without one the pointer was either outside every list we know\n // or over the place the option already occupies, and both resolve to a move that changes\n // nothing.\n const currentIndex = target.dropIndex ?? previousIndex;\n\n this.clearDropIndicators(option);\n\n this.dropped.emit({\n option,\n previousIndex,\n currentIndex,\n previousContainer: previousContainer.data,\n container: target,\n event\n });\n\n this.followMovedOption(option, target);\n });\n }\n\n /**\n * Says once, in dev mode, why `selectAll` produced no row: the master checkbox could only ever act on\n * the options the scroller happens to have rendered, so the row is dropped rather than left lying.\n */\n private warnOnUnsupportedSelectAllContainer(): void {\n if (!isDevMode() || !this.selectAllEnabled() || !this.virtualScroll()) {\n return;\n }\n\n // eslint-disable-next-line no-console\n console.warn(\n 'KbqListSelection: `selectAll` is not supported inside `cdk-virtual-scroll-viewport`. The ' +\n 'row is not rendered, because it could only act on the options currently rendered.'\n );\n }\n\n /**\n * `CdkDropList` numbers only the options it has rendered, so inside a virtual scroll the indices\n * `dropped` reports do not address the consumer's backing array and the move silently lands on the\n * wrong item. Warn instead of letting it pass unnoticed.\n */\n private warnOnUnsupportedDragContainer(): void {\n // Runs on every `draggable`/`disabled` change as well as on init, so it has to tolerate being\n // called before the content children exist and to stay quiet once it has had its say.\n if (this.hasWarnedOnDragContainer || !isDevMode() || !this.draggable || !this.platform.isBrowser) {\n return;\n }\n\n const insideVirtualScroll = !!this.virtualScroll();\n\n if (insideVirtualScroll) {\n // eslint-disable-next-line no-console\n console.warn(\n 'KbqListSelection: `draggable` is not supported inside `cdk-virtual-scroll-viewport`. The ' +\n 'indices reported by `dropped` count only the rendered options.'\n );\n }\n\n this.hasWarnedOnDragContainer = insideVirtualScroll;\n }\n\n /** Keeps the underlying CDK directives in sync with the resolved `draggable` state. */\n private syncDraggableState(): void {\n this.dropList.disabled = !this.draggable;\n this.options?.forEach((option) => option.syncDraggableState());\n this.warnOnUnsupportedDragContainer();\n this.changeDetectorRef.markForCheck();\n }\n\n private normalizeConnectedTo(): readonly (KbqListSelection | string)[] {\n const connectedTo = this.connectedTo();\n\n return Array.isArray(connectedTo) ? connectedTo : [connectedTo as KbqListSelection | string];\n }\n\n private resolveConnectedLists(): KbqListSelection[] {\n return this.normalizeConnectedTo().filter((item): item is KbqListSelection => typeof item !== 'string');\n }\n\n private resolveConnectedDropLists(): (CdkDropList<KbqListSelection> | string)[] {\n return this.normalizeConnectedTo().map((item) => (typeof item === 'string' ? item : item.dropList));\n }\n\n /**\n * Tracks the dragged option and paints the insertion indicator in whichever list the pointer is\n * over. Lists connected by `id` alone cannot be resolved to an instance, so they never light up.\n *\n * @docs-private\n */\n onOptionDragMoved(option: KbqListOption, pointer: { x: number; y: number }): void {\n const lists: KbqListSelection[] = [this, ...this.resolveConnectedLists()];\n const hovered = lists.find((list) => list.containsPoint(pointer));\n\n for (const list of lists) {\n if (list !== hovered) {\n list.clearDropIndicator();\n }\n }\n\n hovered?.showDropIndicator(option, pointer);\n\n // Toggled on the element rather than through a signal: `moved` arrives outside the Angular zone,\n // and the cursor may not lag a frame behind the pointer.\n option.getHostElement().classList.toggle(DROP_FORBIDDEN_CLASS, !hovered);\n }\n\n /**\n * Drops the indicator in every list that could be showing one for this drag.\n *\n * @docs-private\n */\n clearDropIndicators(option: KbqListOption): void {\n const lists: KbqListSelection[] = [this, ...this.resolveConnectedLists(), option.listSelection];\n\n for (const list of lists) {\n list.clearDropIndicator();\n }\n\n option.getHostElement().classList.remove(DROP_FORBIDDEN_CLASS);\n }\n\n private clearDropIndicator(): void {\n this.dropIndex = null;\n this.dropIndicatorOffset.set(null);\n }\n\n private containsPoint({ x, y }: { x: number; y: number }): boolean {\n if (!this.draggable) {\n return false;\n }\n\n const { top, right, bottom, left } = this.elementRef.nativeElement.getBoundingClientRect();\n\n return x >= left && x <= right && y >= top && y <= bottom;\n }\n\n /**\n * Resolves the gap the pointer sits in and positions the indicator on it. Geometry is read on every\n * move rather than cached at drag start: nothing in the list reflows while dragging, but CDK\n * auto-scrolls near the edges, which would silently invalidate a cache.\n */\n private showDropIndicator(dragged: KbqListOption, pointer: { x: number; y: number }): void {\n const horizontal = this.horizontal();\n // The dragged option is left out on purpose: CDK pulls its host element out of the flow, and\n // excluding it makes the resulting gap index directly usable as `currentIndex` — that is exactly\n // the index space `moveItemInArray` and `transferArrayItem` expect.\n const rects = this.options\n .filter((option) => option !== dragged)\n .map((option) => option.getHostElement().getBoundingClientRect());\n\n const startOf = (rect: DOMRect) => (horizontal ? rect.left : rect.top);\n const endOf = (rect: DOMRect) => (horizontal ? rect.right : rect.bottom);\n const midpointOf = (rect: DOMRect) => (startOf(rect) + endOf(rect)) / 2;\n\n const position = horizontal ? pointer.x : pointer.y;\n const index = rects.filter((rect) => position >= midpointOf(rect)).length;\n\n // The dragged option is not among `rects`, so the gaps above and below it collapse into the one\n // carrying its own index — the place it already occupies. Marking it would promise a move that\n // changes nothing, so the indicator stays hidden and the drop falls back to `previousIndex`.\n if (index === this.getOptionIndex(dragged)) {\n this.clearDropIndicator();\n\n return;\n }\n\n const container = this.elementRef.nativeElement.getBoundingClientRect();\n const scrolled = horizontal\n ? this.elementRef.nativeElement.scrollLeft\n : this.elementRef.nativeElement.scrollTop;\n\n // The gap sits before the first option, or right after the one that precedes it. An empty list\n // has no options to measure, so the indicator goes to the top of its content box.\n let boundary = startOf(container);\n\n if (rects.length) {\n boundary = index === 0 ? startOf(rects[0]) : endOf(rects[index - 1]);\n }\n\n this.dropIndex = index;\n this.dropIndicatorOffset.set(boundary - startOf(container) + scrolled);\n }\n\n /**\n * Points the key manager at the option's new place, but only once the consumer has actually applied\n * the move — the list never reorders its own content, so nothing happens if `dropped` is left\n * unhandled. `setActiveItem` also re-anchors `previousActiveItemIndex`, which `options.changes`\n * leaves behind on the slot the option came from and shift-range selection would extend from.\n */\n private followMovedOption(option: KbqListOption, container: KbqListSelection): void {\n const { value } = option;\n\n // Tracked on the list the move is awaited on, so that a move into a connected list does not\n // cancel one still pending here. A move that is never applied leaves its subscription pending,\n // so drop the previous one first.\n container.pendingMoveSubscription?.unsubscribe();\n\n container.pendingMoveSubscription = container.options.changes\n .pipe(take(1), takeUntilDestroyed(container.destroyRef))\n .subscribe(() => {\n // Resolved against the navigable list: `setActiveItem` takes an index in the key\n // manager's own space, which the \"select all\" row leads when the target list renders one.\n const options = container.navigableOptions.toArray();\n // Reordering within a list keeps the instance; moving between lists recreates it.\n const index = options.includes(option)\n ? options.indexOf(option)\n : options.findIndex(\n (item) =>\n !container.isSelectAllRow(item) &&\n runCompareWith(container.compareWith(), item.value, value)\n );\n\n if (index !== -1) {\n container.keyManager.setActiveItem(index);\n }\n });\n }\n\n // View to model callback that should be called whenever the selected options change.\n private onChange: (value: T[]) => void = () => {};\n\n /** @docs-private */\n readonly selectAllHandlerInput = input<\n ((event: KeyboardEvent, list: KbqListSelection<T>) => void) | undefined,\n ((event: KeyboardEvent, list: KbqListSelection<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 options.\n */\n get selectAllHandler(): (event: KeyboardEvent, list: KbqListSelection<T>) => void {\n return this.selectAllHandlerInput() ?? this.defaultSelectAllHandler;\n }\n\n private defaultSelectAllHandler(event: KeyboardEvent, list: KbqListSelection<T>): void {\n event.preventDefault();\n\n // Funnelled through the same method the master checkbox uses, so the shortcut and the row can\n // never disagree about what \"select all\" acted on.\n list.toggleSelectAll();\n }\n\n private copyActiveOption(event: KeyboardEvent): void {\n if (!this.keyManager.activeItem) return;\n\n const option = this.keyManager.activeItem;\n\n // The row carries no value; copying it would put the string \"undefined\" on the clipboard.\n if (this.isSelectAllRow(option)) return;\n\n option.preventBlur = true;\n\n if (this.onCopy.observed) {\n this.onCopy.emit(new KbqListCopyEvent(this, option, event));\n } else {\n this.onCopyDefaultHandler();\n\n event.preventDefault();\n }\n\n option.preventBlur = false;\n }\n}\n\n/**\n * Marker directive for the secondary line of a `kbq-list-option`.\n *\n * Purely a styling hook: it adds the `kbq-list-option-caption` class the list theme keys its\n * muted caption typography and per-state colors off.\n */\n@Directive({\n selector: '[kbq-list-option-caption]',\n host: {\n class: 'kbq-list-option-caption'\n }\n})\nexport class KbqListOptionCaption {}\n\n/**\n * Component for list-options of selection-list. Each list-option can automatically\n * generate a checkbox and can put current item into the selectionModel of selection-list\n * if the current item is selected.\n */\n@Component({\n selector: 'kbq-list-option',\n imports: [\n CdkDragPreview,\n KbqPseudoCheckbox,\n KbqActionContainer\n ],\n templateUrl: './list-option.html',\n providers: [\n { provide: KBQ_OPTION_ACTION_PARENT, useExisting: KbqListOption },\n { provide: KBQ_TITLE_TEXT_REF, useExisting: KbqListOption }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n // A signal is read by one of these bindings, or by two with nothing read in between (`selectAllRow`, by the two\n // ARIA states). Host bindings run in the reactive consumer of the declaring view, shared by every option in it,\n // and a signal that consumer reads again after others is found by a scan of all it has read so far: a repeated\n // read costs O(N²) per check across N options.\n class: 'kbq-list-option',\n role: 'option',\n '[class.kbq-selected]': 'selected',\n '[class.kbq-list-option_multiple]': 'listSelection.multiple',\n '[class.kbq-list-option_draggable]': 'draggable',\n '[class.kbq-list-option_grab-cursor]': 'showsGrabCursor',\n '[class.kbq-disabled]': 'disabled',\n '[class.kbq-focused]': 'hasFocus',\n '[class.kbq-action-button-focused]': 'actionButton()?.active',\n '[attr.aria-selected]': 'ariaSelected',\n '[attr.aria-checked]': 'ariaChecked',\n '[attr.aria-disabled]': 'ariaDisabled()',\n '[attr.tabindex]': 'tabIndex',\n '(focusin)': 'focus()',\n '(blur)': 'blur()',\n '(click)': 'handleClick($event)',\n '(keydown)': 'onKeydown($event)'\n },\n hostDirectives: [CdkDrag],\n exportAs: 'kbqListOption',\n preserveWhitespaces: false\n})\nexport class KbqListOption<T = any> implements OnDestroy, OnInit, IFocusableOption, KbqTitleTextRef {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private changeDetector = inject(ChangeDetectorRef);\n private readonly environmentInjector = inject(EnvironmentInjector);\n private readonly drag = inject<CdkDrag<KbqListOptionDragData>>(CdkDrag, { host: true });\n private readonly destroyRef = inject(DestroyRef);\n listSelection: KbqListSelection<T> = inject(KbqListSelection);\n readonly group = inject(KbqOptgroup, { optional: true });\n\n get hasFocus(): boolean {\n return this.focused();\n }\n\n set hasFocus(value: boolean) {\n this.focused.set(value);\n }\n\n // A signal, as on `KbqTreeOption`: focus can arrive while a view is being checked, which a `markForCheck` misses.\n private readonly focused = signal(false);\n\n preventBlur: boolean = false;\n\n readonly onFocus = new Subject<KbqOptionEvent<T>>();\n\n readonly onBlur = new Subject<KbqOptionEvent<T>>();\n\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 readonly pseudoCheckbox = contentChild(KbqPseudoCheckbox);\n\n /**\n * Drag handles the consumer has projected into the option. Nothing else reads them — `CdkDrag`\n * collects its own through DI — they only tell the option whether the whole row starts a drag.\n */\n private readonly dragHandles = contentChildren(CDK_DRAG_HANDLE, { descendants: true });\n\n readonly text = viewChild.required<ElementRef>('text');\n\n private readonly titleText = viewChild<ElementRef<HTMLElement>>('kbqTitleText');\n\n /**\n * Not a duplicate of {@link text}: this is the `KbqTitleTextRef` property that `title.directive.ts`\n * reads through `KBQ_TITLE_TEXT_REF`, a plain `ElementRef` rather than a signal.\n */\n get textElement(): ElementRef<HTMLElement> | undefined {\n return this.titleText();\n }\n\n // Whether the label should appear before or after the checkbox. Defaults to 'after'\n readonly checkboxPosition = input<'before' | 'after'>(undefined!);\n\n /**\n * Whether this option is the list's \"select all\" row rather than one the consumer projected.\n *\n * Such a row has no `value` and no place in the `SelectionModel`, so everything that would resolve\n * it against the list's selection is skipped; its checkbox state and its selected look are driven\n * from the outside instead. It also stays out of the drag-and-drop registry — see the constructor.\n *\n * @docs-private\n */\n readonly selectAllRow = input(false, { transform: booleanAttribute });\n\n /** @docs-private */\n readonly valueInput = input<T>(undefined!, { alias: 'value' });\n\n /** Value of the option, reported through the list's `ControlValueAccessor`. */\n get value(): T {\n return this.valueInput();\n }\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, its group or the list. */\n get disabled(): boolean {\n return this.disabledState();\n }\n\n // A signal per option for the host bindings, since the list's and the group's are the same for all its options.\n private readonly disabledState = computed(\n () => this.listSelection.disabled || !!this.group?.disabled() || this.disabledInput()\n );\n\n /**\n * Value of `aria-disabled`: the disabled state, but a signal of its own, since `kbq-disabled` reads that one.\n *\n * @internal\n */\n protected readonly ariaDisabled = computed(() => this.disabled || null);\n\n /** @docs-private */\n readonly draggableInput = input<boolean, boolean | string | null | undefined>(true, {\n alias: 'draggable',\n transform: booleanAttribute\n });\n\n /**\n * Whether the option can be reordered by dragging. Set it to `false` to pin a single option while\n * the rest of the list stays draggable. Unrelated to `disabled`: the option keeps taking focus and\n * selection. Reads the resolved state, which the option can only narrow — the list gates its whole drop\n * list, so an option cannot opt back in on its own.\n */\n get draggable(): boolean {\n return this.resolvedDraggable();\n }\n\n private readonly resolvedDraggable = computed(\n // The \"select all\" row is a command, not one of the items being ordered.\n () => !this.selectAllRow() && this.draggableInput() && this.listSelection.draggable && !this.disabled\n );\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 list's own mode until bound. */\n get showCheckbox(): boolean {\n return this.showCheckboxInput() ?? this.listSelection.showCheckbox;\n }\n\n /** @docs-private */\n readonly selectedInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'selected',\n transform: booleanAttribute\n });\n\n /**\n * Whether the option is selected. The state lives in the list's `SelectionModel`, not on the option,\n * so it can also be set from code.\n */\n get selected(): boolean {\n return this.listSelection.selectionModel?.isSelected(this) || false;\n }\n\n set selected(value: boolean) {\n this.setSelected(value);\n }\n\n private _selected = false;\n\n get tabIndex(): number | null {\n return this.tabIndexState();\n }\n\n private readonly tabIndexState = computed(() => (this.disabled ? null : -1));\n\n /** `aria-selected` of the row. The \"select all\" row reports `aria-checked` instead. */\n protected get ariaSelected(): boolean | null {\n return this.selectAllRow() ? null : this.selected;\n }\n\n /**\n * Tri-state of the \"select all\" row, `mixed` included. `null` for an ordinary option, which\n * reports `aria-selected` instead.\n */\n protected get ariaChecked(): string | null {\n if (!this.selectAllRow()) {\n return null;\n }\n\n const state = this.listSelection.selectAllState;\n\n return state === 'indeterminate' ? 'mixed' : `${state === 'checked'}`;\n }\n\n protected get externalPseudoCheckbox(): boolean {\n return !!this.pseudoCheckbox();\n }\n\n /**\n * Whether the row itself advertises the grab. Gated on `draggable` so that a pinned option inside a\n * `dragCursor=\"grab\"` list does not promise a pick-up it would refuse. The handle case is left to\n * CSS, which already hands the grab over to a projected `cdkDragHandle`.\n */\n protected get showsGrabCursor(): boolean {\n return this.grabCursorState();\n }\n\n private readonly grabCursorState = computed(() => this.draggable && this.listSelection.dragCursor() === 'grab');\n\n constructor() {\n effect(() => {\n this.resolvedDraggable();\n\n untracked(() => this.syncDraggableState());\n });\n\n // An equal-but-new object — an immutable refetch, a `@for` tracked by id — must not drop the\n // selection, so the incoming value is put to the model rather than to the value it replaces.\n // That keeps the comparator in its documented `(optionValue, modelValue)` order, which an\n // asymmetric comparator (options carry objects, the model carries ids) depends on.\n //\n // The reference check ahead of it is not just a fast path: it is what keeps an unchanged value\n // from being dropped when the comparator throws, since a swallowed throw also reads as \"no match\".\n let previousValue: T | undefined;\n let valueBound = false;\n\n effect(() => {\n const value = this.valueInput();\n\n untracked(() => {\n const modelValues = this.listSelection._value;\n\n if (\n valueBound &&\n this.selected &&\n value !== previousValue &&\n modelValues != null &&\n !modelValues.some((modelValue) =>\n runCompareWith(this.listSelection.compareWith(), value, modelValue)\n )\n ) {\n this.setSelected(false);\n }\n\n valueBound = true;\n previousValue = value;\n });\n });\n\n // A disabled option leaves the set \"select all\" acts on, which changes the row's checkbox.\n let wasDisabled: boolean | undefined;\n\n effect(() => {\n const disabled = this.disabledInput();\n\n if (wasDisabled !== undefined && disabled !== wasDisabled) {\n untracked(() => this.listSelection.refreshSelectAllState());\n }\n\n wasDisabled = disabled;\n });\n\n effect(() => {\n const selected = this.selectedInput();\n\n if (selected !== undefined) untracked(() => this.setSelected(selected));\n });\n\n // The only class that lands on the preview in both modes: the text one is a plate of our own,\n // the full one a clone of the option. Styling keys \"a drag is in progress\" off it.\n this.drag.previewClass = DRAG_PREVIEW_CLASS;\n\n // Without a projected handle the whole row starts the drag, so a touch has to lose to a scroll\n // gesture first. A handle is unambiguous and may start immediately. `CdkDrag` re-reads the delay\n // on every `beforeStarted`, so assigning it whenever the query settles is enough.\n effect(() => {\n this.drag.dragStartDelay = this.dragHandles().length ? 0 : { touch: 300, mouse: 0 };\n });\n\n // Assigned lazily: referencing `this` while the host directive is still being constructed\n // would capture a half-initialized option.\n // Nothing is cleared on `ended`: it fires *before* `dropped`, so tearing the indicator down\n // there would take the resolved target index with it and turn every drop into a no-op.\n this.drag.started.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.drag.data = { option: this };\n this.listSelection.clearDropIndicators(this);\n });\n\n // Sorting is disabled, so CDK gives no running feedback about where the option would land —\n // the owning list derives it from the pointer and paints the insertion indicator itself.\n this.drag.moved.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(({ pointerPosition }) => {\n this.listSelection.onOptionDragMoved(this, pointerPosition);\n });\n }\n\n /**\n * Keeps the underlying `CdkDrag` in sync with the resolved `draggable` state.\n *\n * @docs-private\n */\n syncDraggableState(): void {\n this.drag.disabled = !this.draggable;\n this.changeDetector.markForCheck();\n }\n\n ngOnInit(): void {\n if (this.selectAllRow()) {\n // `CdkDrag` registers itself with the enclosing drop list from its own constructor, and the\n // row is rendered inside `kbq-list-selection`, so it lands in the registry like any option.\n // Left there it would take drag item #0 and shift the `previousIndex` every `dropped` event\n // reports, while `currentIndex` — derived from `options`, which the row is not part of —\n // would stay put. `disabled` alone does not unregister it. Deferred to here rather than done\n // in the constructor because a signal input is not set yet at construction time.\n this.drag.dropContainer?.removeItem(this.drag);\n\n // Unregistering it is not enough: `removeItem` leaves `DragRef` pointing at the drop container,\n // so a pointer-down would still start a drag reporting index -1 — the `draggable` effect, which\n // reads `selectAllRow`, keeps its `CdkDrag` disabled.\n return;\n }\n\n // Resolving the model value is the list's job, not the option's. An option that matched itself\n // here answered a different question than `getOptionByValue` does — every match self-selected,\n // while the list picks the first — so a comparator that matches more than one option produced a\n // different selection depending on which path ran. The list re-resolves on `options.changes`.\n const wasSelected = this._selected;\n\n // List options that are selected at initialization can't be reported properly to the form\n // control. This is because it takes some time until the selection-list knows about all\n // available options. Also it can happen that the ControlValueAccessor has an initial value\n // that should be used instead. Deferring the value change report to the next tick ensures\n // that the form control value is not being overwritten.\n Promise.resolve().then(() => {\n if (this._selected || wasSelected) {\n this.setSelected(true);\n }\n });\n }\n\n ngOnDestroy(): void {\n // The row owns no selection, so there is nothing to release — but it does hold a place in the\n // navigable list, and a focused row that disappears still has to hand the key manager on.\n if (this.selectAllRow()) {\n this.listSelection.removeOptionFromList(this);\n\n return;\n }\n\n if (this.selected) {\n // We have to delay this until the next tick in order\n // to avoid changed after checked errors.\n Promise.resolve().then(() => this.setSelected(false));\n }\n\n this.listSelection.removeOptionFromList(this);\n }\n\n /** Toggles the selected state of this option. */\n toggle(): void {\n // Untracked, as in `setSelected()` and `focus()`: called from a consumer's `effect()`, the state read on the\n // way — the list's options, mode and inputs — would make the effect run again whenever it changes.\n untracked(() => this.setSelected(!this.selected));\n }\n\n getLabel(): string {\n // The \"select all\" row is kept out of type-ahead: its localized label would otherwise shadow\n // an option starting with the same letter.\n if (this.selectAllRow()) {\n return '';\n }\n\n const text = this.text();\n\n return text ? (text.nativeElement.textContent ?? '') : '';\n }\n\n /**\n * Splits the option's text into the two lines the `text` drag preview shows. The caption is\n * projected into the same container as the label, so the label is whatever that container holds\n * apart from the caption — subtracting one string from the other would be guesswork.\n *\n * Taken off a clone rather than by walking the container's children, the way `KbqDropdownItem`\n * drops icons out of its own label: `textContent` on an element skips the comment nodes Angular\n * leaves behind for its anchors, while reading one of those nodes directly would hand back the\n * anchor's name.\n *\n * Trimmed because `htmlWhitespaceSensitivity: 'ignore'` lets the indentation of the consumer's\n * template into the projected text.\n *\n * @docs-private\n */\n getDragPreviewText(): { label: string; caption: string } {\n const clone = (this.text().nativeElement as HTMLElement).cloneNode(true) as HTMLElement;\n const caption = clone.querySelector('.kbq-list-option-caption');\n\n caption?.remove();\n\n return { label: (clone.textContent ?? '').trim(), caption: (caption?.textContent ?? '').trim() };\n }\n\n /** Sets the selected state on the list's `SelectionModel`; the `selected` property and input go through it. */\n setSelected(selected: boolean): void {\n untracked(() => {\n const { selectionModel } = this.listSelection;\n\n // The row has no place in the selection model — its look is driven by `selectAllState`.\n if (!selectionModel || this.selectAllRow()) {\n return;\n }\n\n // The model is consulted alongside the mirror so that an option the model dropped behind the\n // mirror's back — single-selection mode does that whenever another option is selected — can still\n // be re-applied instead of being early-returned away.\n if (this._selected === selected && selectionModel.isSelected(this) === selected) {\n return;\n }\n\n this._selected = selected;\n\n if (selected) {\n this.listSelection.selectionModel.select(this);\n } else {\n this.listSelection.selectionModel.deselect(this);\n }\n\n this.changeDetector.markForCheck();\n });\n }\n\n /**\n * Rendered height of the element, or 0 when it is not laid out (SSR, jsdom, `display: none`).\n *\n * @docs-private\n */\n getHeight(): number {\n return kbqGetElementHeight(this.elementRef.nativeElement);\n }\n\n /** Handles click events on the list option. */\n protected handleClick($event: MouseEvent): void {\n // The row's own `(click)` in the list's template runs the batch toggle; this handler would\n // otherwise put the row itself through the ordinary selection path on the same click.\n if (this.disabled || this.selectAllRow()) {\n return;\n }\n\n this.listSelection.setSelectedOptionsByClick(\n this,\n hasModifierKey($event, 'shiftKey'),\n // ctrlKey is for Windows, metaKey is for MacOS\n hasModifierKey($event, 'ctrlKey', 'metaKey')\n );\n }\n\n /** Handles keydown events on the list option. */\n protected onKeydown($event: KeyboardEvent): void {\n kbqFocusOptionActionOnTab($event, this.actionButton());\n }\n\n /** Moves DOM focus to this option, unless it is disabled or already focused. */\n focus(): void {\n untracked(() => {\n // `hasFocus` alone lags behind the DOM until the deferred blur runs: a key pressed in that window would\n // find the option \"focused\" and leave the focus where it was. Focus on an element nested in the option\n // is the option's own, or the `focusin` it bubbles would pull it back onto the host.\n const focused =\n this.hasFocus && this.elementRef.nativeElement.contains(_getFocusedElementPierceShadowDom());\n\n if (this.disabled || focused || this.actionButton()?.hasFocus) {\n return;\n }\n\n this.elementRef.nativeElement.focus();\n\n this.onFocus.next({ option: this });\n\n Promise.resolve().then(() => (this.hasFocus = true));\n });\n }\n\n /** Marks this option as blurred after the next render, unless {@link preventBlur} is set. */\n blur(): void {\n if (this.preventBlur) {\n return;\n }\n\n // Deferred until the focus has settled: the option it moves to marks itself focused on a microtask, and a\n // blur reported before that would read as no option being focused and clear the list's active item.\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 this.hasFocus = false;\n\n if (this.actionButton()?.hasFocus) {\n return;\n }\n\n this.onBlur.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 list still has to hear about it to move focus.\n { injector: this.environmentInjector }\n );\n }\n\n /** The option's host DOM element. */\n getHostElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n}\n","@if (externalPseudoCheckbox) {\n <ng-content select=\"kbq-pseudo-checkbox\" />\n} @else if (showCheckbox) {\n <!-- Decorative: assistive technology reads the selected state from the option's own aria-selected. -->\n <kbq-pseudo-checkbox aria-hidden=\"true\" [disabled]=\"disabled\" [state]=\"selected ? 'checked' : 'unchecked'\" />\n}\n\n<ng-content select=\"[kbq-icon]\" />\n\n<div #kbqTitleText #text class=\"kbq-list-text\">\n <ng-content />\n <ng-content select=\"[kbq-list-option-caption]\" />\n</div>\n\n@if (actionButton()) {\n <kbq-action-container>\n <ng-content select=\"kbq-option-action\" />\n </kbq-action-container>\n}\n\n@if (listSelection.dragPreview() === 'text') {\n <!--\n Registers with the host `CdkDrag` through `CDK_DRAG_PARENT`, not through a content query, which\n is why it can live in the option's own view. The template body is a single element and nothing\n else: CDK wraps the view in a plain div otherwise, and that wrapper — not this plate — would\n become the preview. The plate is decorative, it repeats text the listbox already exposes.\n -->\n <ng-template cdkDragPreview>\n <div class=\"kbq-list-drag-preview_text\" aria-hidden=\"true\">\n <!-- Read on render rather than cached on `started`: CDK builds the preview before it emits. -->\n @let text = getDragPreviewText();\n <div class=\"kbq-list-drag-preview__label\">{{ text.label }}</div>\n @if (text.caption) {\n <div class=\"kbq-list-drag-preview__caption\">{{ text.caption }}</div>\n }\n </div>\n </ng-template>\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, ViewEncapsulation, inject } from '@angular/core';\n\n/**\n * A plain, non-selectable list container.\n *\n * Intentionally carries no ARIA role: it is used both as a semantic list (consumers add\n * `role=\"list\"` themselves, as `kbq-file-upload` does) and as a purely visual grouping.\n * For a selectable listbox use `kbq-list-selection` instead.\n */\n@Component({\n selector: 'kbq-list',\n template: '<ng-content />',\n styleUrls: ['./list.scss', 'list-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kbq-list' }\n})\nexport class KbqList {}\n\n/** A single row of a `kbq-list`. Non-selectable — see `kbq-list-option` for the selectable variant. */\n@Component({\n selector: 'kbq-list-item, a[kbq-list-item]',\n templateUrl: './list-item.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-list-item',\n '(focus)': 'handleFocus()',\n '(blur)': 'handleBlur()'\n },\n preserveWhitespaces: false\n})\nexport class KbqListItem {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n getHostElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n protected handleFocus(): void {\n this.elementRef.nativeElement.classList.add('kbq-focused');\n }\n\n protected handleBlur(): void {\n this.elementRef.nativeElement.classList.remove('kbq-focused');\n }\n}\n","<ng-content select=\"[kbq-list-icon]\" />\n\n<div class=\"kbq-list-text\">\n <ng-content select=\"[kbq-line]\" />\n</div>\n\n<ng-content />\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { NgModule } from '@angular/core';\nimport { KbqActionContainer, KbqOptionModule, KbqPseudoCheckboxModule } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqListOption, KbqListOptionCaption, KbqListSelection } from './list-selection.component';\nimport { KbqList, KbqListItem } from './list.component';\n\n@NgModule({\n imports: [\n A11yModule,\n // Re-exported so that a drag handle can be projected into an option without the consumer\n // reaching into `@angular/cdk/drag-drop` — the list hides CDK everywhere else.\n CdkDragHandle,\n KbqPseudoCheckboxModule,\n KbqOptionModule,\n KbqActionContainer,\n KbqIconModule,\n KbqList,\n KbqListSelection,\n KbqListItem,\n KbqListOption,\n KbqListOptionCaption\n ],\n exports: [\n CdkDragHandle,\n KbqList,\n KbqListSelection,\n KbqListItem,\n KbqListOption,\n KbqListOptionCaption,\n KbqOptionModule\n ]\n})\nexport class KbqListModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|