@koobiq/components 21.0.0 → 21.1.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/badge/_badge-theme.scss +31 -0
- package/breadcrumbs/breadcrumbs.scss +5 -1
- package/checkbox/_checkbox-theme.scss +0 -17
- package/checkbox/checkbox-tokens.scss +0 -4
- package/code-block/_code-block-theme.scss +7 -6
- package/code-block/code-block-tokens.scss +8 -4
- package/code-block/code-block.scss +54 -32
- package/content-panel/content-panel-header.scss +2 -3
- package/content-panel/content-panel.scss +3 -0
- package/core/selection/pseudo-checkbox/pseudo-checkbox-tokens.scss +0 -2
- package/fesm2022/koobiq-components-accordion.mjs +4 -4
- package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
- package/fesm2022/koobiq-components-actions-panel.mjs +10 -2
- package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-app-switcher.mjs +1 -1
- package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
- package/fesm2022/koobiq-components-badge.mjs +2 -2
- package/fesm2022/koobiq-components-badge.mjs.map +1 -1
- package/fesm2022/koobiq-components-breadcrumbs.mjs +2 -2
- package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/koobiq-components-button-toggle.mjs +1 -1
- package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-checkbox.mjs +18 -8
- package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
- package/fesm2022/koobiq-components-clamped-text.mjs +78 -10
- package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
- package/fesm2022/koobiq-components-code-block.mjs +106 -394
- package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
- package/fesm2022/koobiq-components-content-panel.mjs +4 -4
- package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-core.mjs +300 -37
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs +151 -60
- package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-divider.mjs +3 -3
- package/fesm2022/koobiq-components-divider.mjs.map +1 -1
- package/fesm2022/koobiq-components-dropdown.mjs +3 -3
- package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-file-upload.mjs +17 -8
- package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +124 -41
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-flag.mjs +3 -3
- package/fesm2022/koobiq-components-flag.mjs.map +1 -1
- package/fesm2022/koobiq-components-form-field.mjs +90 -27
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-icon.mjs +38 -17
- package/fesm2022/koobiq-components-icon.mjs.map +1 -1
- package/fesm2022/koobiq-components-inline-edit.mjs +19 -2
- package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
- package/fesm2022/koobiq-components-input.mjs +76 -17
- package/fesm2022/koobiq-components-input.mjs.map +1 -1
- package/fesm2022/koobiq-components-list.mjs +1 -1
- package/fesm2022/koobiq-components-list.mjs.map +1 -1
- package/fesm2022/koobiq-components-modal.mjs +3 -3
- package/fesm2022/koobiq-components-modal.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar.mjs +86 -25
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-notification-center.mjs +4 -4
- package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-overflow-items.mjs +116 -38
- package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
- package/fesm2022/koobiq-components-popover.mjs +86 -7
- package/fesm2022/koobiq-components-popover.mjs.map +1 -1
- package/fesm2022/koobiq-components-radio.mjs +41 -19
- package/fesm2022/koobiq-components-radio.mjs.map +1 -1
- package/fesm2022/koobiq-components-search-expandable.mjs +29 -17
- package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +49 -12
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidepanel.mjs +198 -186
- package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
- package/fesm2022/koobiq-components-splitter.mjs +49 -25
- package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
- package/fesm2022/koobiq-components-tabs.mjs +30 -11
- package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
- package/fesm2022/koobiq-components-tags.mjs +1 -1
- package/fesm2022/koobiq-components-tags.mjs.map +1 -1
- package/fesm2022/koobiq-components-textarea.mjs +28 -11
- package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
- package/fesm2022/koobiq-components-time-range.mjs +2 -2
- package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
- package/fesm2022/koobiq-components-timepicker.mjs +71 -16
- package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-timezone.mjs +2 -2
- package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
- package/fesm2022/koobiq-components-toast.mjs +2 -2
- package/fesm2022/koobiq-components-toast.mjs.map +1 -1
- package/fesm2022/koobiq-components-toggle.mjs +25 -9
- package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-tooltip.mjs +90 -17
- package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
- package/fesm2022/koobiq-components-top-bar.mjs +27 -7
- package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree-select.mjs +24 -9
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree.mjs +288 -109
- package/fesm2022/koobiq-components-tree.mjs.map +1 -1
- package/file-upload/_file-upload-theme.scss +0 -12
- package/file-upload/file-upload-tokens.scss +0 -1
- package/file-upload/file-upload.scss +0 -1
- package/filter-bar/_filter-bar-theme.scss +7 -8
- package/filter-bar/filter-bar.scss +0 -1
- package/filter-bar/pipes/base-pipe.scss +36 -2
- package/filter-bar/pipes/pipe-multi-tree-select.scss +27 -0
- package/form-field/_fieldset-theme.scss +2 -7
- package/form-field/_form-field-theme.scss +9 -22
- package/form-field/_hint-theme.scss +20 -0
- package/form-field/fieldset-tokens.scss +0 -1
- package/form-field/fieldset.scss +0 -3
- package/form-field/form-field-tokens.scss +1 -1
- package/form-field/form-field.scss +9 -0
- package/form-field/hint-tokens.scss +3 -0
- package/modal/modal.scss +2 -0
- package/navbar/_navbar-item_vertical.scss +48 -2
- package/navbar/_navbar-theme.scss +11 -3
- package/navbar/navbar-item.scss +17 -0
- package/navbar/navbar-tokens.scss +3 -0
- package/package.json +4 -4
- package/popover/popover.scss +1 -1
- package/radio/_radio-theme.scss +0 -30
- package/radio/radio-tokens.scss +0 -2
- package/schematics/collection.json +94 -89
- package/schematics/migrations/accordion-state-saving-default/{index.js → index.cjs} +5 -4
- package/schematics/migrations/actions-panel-overlay-container/{index.js → index.cjs} +5 -4
- package/schematics/migrations/alert-signals/{index.js → index.cjs} +14 -13
- package/schematics/migrations/angular-animations-removal/index.cjs +21 -0
- package/schematics/migrations/app-switcher-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/autocomplete-panel-width-auto/{index.js → index.cjs} +6 -5
- package/schematics/migrations/autocomplete-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/badge-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/button-state-and-styles/{index.js → index.cjs} +7 -6
- package/schematics/migrations/button-supported-colors/{index.js → index.cjs} +7 -6
- package/schematics/migrations/button-toggle-signals-and-aria/{index.js → index.cjs} +7 -6
- package/schematics/migrations/button-truncation/{index.js → index.cjs} +7 -6
- package/schematics/migrations/checkbox-signals/{index.js → index.cjs} +9 -8
- package/schematics/migrations/clamped-text-disclosure/{index.js → index.cjs} +5 -4
- package/schematics/migrations/code-block-highlight-js-core/README.md +53 -0
- package/schematics/migrations/code-block-highlight-js-core/data.cjs +64 -0
- package/schematics/migrations/code-block-highlight-js-core/index.cjs +319 -0
- package/schematics/migrations/code-block-highlight-js-core/schema.json +20 -0
- package/schematics/migrations/code-block-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/color-signals/index.cjs +20 -0
- package/schematics/migrations/core-mixins-removal/index.cjs +18 -0
- package/schematics/migrations/css-selectors/{index.js → index.cjs} +4 -3
- package/schematics/migrations/datepicker-signals/index.cjs +18 -0
- package/schematics/migrations/deprecated-icons/README.md +21 -5
- package/schematics/migrations/deprecated-icons/{index.js → index.cjs} +15 -28
- package/schematics/migrations/deprecated-icons/schema.json +1 -1
- package/schematics/migrations/design-tokens-v4/{index.js → index.cjs} +3 -2
- package/schematics/migrations/divider-signals-and-aria/{index.js → index.cjs} +5 -4
- package/schematics/migrations/dl-attribute-coercion/{index.js → index.cjs} +7 -6
- package/schematics/migrations/dl-standalone-names/{index.js → index.cjs} +11 -10
- package/schematics/migrations/dropdown-demote-overlay/{index.js → index.cjs} +7 -6
- package/schematics/migrations/dropdown-signals/index.cjs +20 -0
- package/schematics/migrations/empty-state-error-color/{index.js → index.cjs} +5 -4
- package/schematics/migrations/empty-state-size-attr/{index.js → index.cjs} +6 -5
- package/schematics/migrations/file-upload-cva-and-primitives/{index.js → index.cjs} +5 -4
- package/schematics/migrations/file-upload-deprecated-outputs/{index.js → index.cjs} +5 -4
- package/schematics/migrations/filter-bar-rename-action/{index.js → index.cjs} +5 -4
- package/schematics/migrations/filter-bar-signals/{index.js → index.cjs} +16 -15
- package/schematics/migrations/filter-bar-state-saving-default/{index.js → index.cjs} +5 -4
- package/schematics/migrations/flag-inner-html/{index.js → index.cjs} +5 -4
- package/schematics/migrations/form-field-signals/{index.js → index.cjs} +18 -17
- package/schematics/migrations/icon-semantics-and-api/{data.js → data.cjs} +4 -4
- package/schematics/migrations/icon-semantics-and-api/{index.js → index.cjs} +6 -5
- package/schematics/migrations/icons-replacement/README.md +16 -2
- package/schematics/migrations/icons-replacement/{index.js → index.cjs} +21 -18
- package/schematics/migrations/icons-replacement/schema.json +12 -3
- package/schematics/migrations/inline-edit-a11y-and-types/{index.js → index.cjs} +5 -4
- package/schematics/migrations/input-number-surface/{index.js → index.cjs} +5 -4
- package/schematics/migrations/input-signals/index.cjs +18 -0
- package/schematics/migrations/link-deprecated-path/{index.js → index.cjs} +4 -3
- package/schematics/migrations/link-signals/{index.js → index.cjs} +5 -4
- package/schematics/migrations/list-signals/index.cjs +18 -0
- package/schematics/migrations/list-tree-multiple-input/{index.js → index.cjs} +7 -6
- package/schematics/migrations/loader-overlay-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/loader-overlay-size-attr/{index.js → index.cjs} +6 -5
- package/schematics/migrations/locale-configuration-providers/{index.js → index.cjs} +5 -4
- package/schematics/migrations/mandatory-peer-dependencies/{index.js → index.cjs} +3 -2
- package/schematics/migrations/markdown-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/modal-dialog-semantics/{index.js → index.cjs} +5 -4
- package/schematics/migrations/modal-signals/index.cjs +20 -0
- package/schematics/migrations/navbar-signals-and-aria/{index.js → index.cjs} +7 -6
- package/schematics/migrations/new-icons-pack/README.md +37 -25
- package/schematics/migrations/new-icons-pack/{index.js → index.cjs} +29 -38
- package/schematics/migrations/new-icons-pack/replacement.json +2 -14
- package/schematics/migrations/new-icons-pack/schema.json +3 -3
- package/schematics/migrations/notification-center-signals/{index.js → index.cjs} +5 -4
- package/schematics/migrations/option-signals/index.cjs +20 -0
- package/schematics/migrations/popover-leave-delay/{index.js → index.cjs} +5 -4
- package/schematics/migrations/progress-bar-percentage-and-aria/{index.js → index.cjs} +5 -4
- package/schematics/migrations/progress-spinner-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/query-list-signals/index.cjs +18 -0
- package/schematics/migrations/radio-signals-and-aria/{index.js → index.cjs} +9 -8
- package/schematics/migrations/read-state-dwell-handlers/{index.js → index.cjs} +5 -4
- package/schematics/migrations/scrollbar-deprecated-path/{index.js → index.cjs} +4 -3
- package/schematics/migrations/select-signal-inputs/{index.js → index.cjs} +5 -4
- package/schematics/migrations/sidepanel-non-modal-behavior/{index.js → index.cjs} +5 -4
- package/schematics/migrations/signal-inputs-subclasses/index.cjs +18 -0
- package/schematics/migrations/split-button-optional-disabled/{index.js → index.cjs} +5 -4
- package/schematics/migrations/splitter-deprecated-path/{index.js → index.cjs} +4 -3
- package/schematics/migrations/state-saving-default/{index.js → index.cjs} +5 -4
- package/schematics/migrations/table-cell-content/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tabs-signals-and-aria/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tag-list-cleaner/{index.js → index.cjs} +7 -6
- package/schematics/migrations/tag-slots/{index.js → index.cjs} +6 -5
- package/schematics/migrations/tags-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/textarea-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/time-range-title-for/{index.js → index.cjs} +5 -4
- package/schematics/migrations/timepicker-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/timezone-grouping-utils/{index.js → index.cjs} +5 -4
- package/schematics/migrations/title-encapsulation/{index.js → index.cjs} +5 -4
- package/schematics/migrations/toast-stack-and-defaults/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tooltip-pointer-events-and-types/{index.js → index.cjs} +5 -4
- package/schematics/migrations/top-bar-container-selectors/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tree-select-signals/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tree-signals/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tree-state-saving-default/{index.js → index.cjs} +5 -4
- package/schematics/migrations/username-pipe-injection/{index.js → index.cjs} +5 -4
- package/schematics/migrations/v20-upgrade/{data.js → data.cjs} +7 -7
- package/schematics/migrations/v20-upgrade/index.cjs +19 -0
- package/schematics/migrations/v21-upgrade/{data.js → data.cjs} +22 -22
- package/schematics/migrations/v21-upgrade/{index.js → index.cjs} +11 -10
- package/schematics/migrations/zoneless-change-detection/index.cjs +21 -0
- package/schematics/migrations.json +87 -82
- package/schematics/ng-add/{index.js → index.cjs} +15 -289
- package/schematics/utils/{angular-parsing.js → angular-parsing.cjs} +2 -2
- package/schematics/utils/custom-data.cjs +64 -0
- package/schematics/utils/{deprecated-path-migration.js → deprecated-path-migration.cjs} +4 -3
- package/schematics/utils/html-config.cjs +148 -0
- package/schematics/utils/{icon-migration.js → icon-migration.cjs} +11 -5
- package/schematics/utils/list-item-pattern.cjs +16 -0
- package/schematics/utils/{messages.js → messages.cjs} +4 -0
- package/schematics/utils/package-config.cjs +99 -0
- package/schematics/utils/project-files.cjs +25 -0
- package/schematics/utils/replacement-driver.cjs +337 -0
- package/schematics/utils/safe-rule.cjs +23 -0
- package/schematics/utils/signal-members-migration.cjs +779 -0
- package/schematics/utils/tag-patterns.cjs +21 -0
- package/schematics/utils/template-ref-access.cjs +155 -0
- package/schematics/utils/{typescript.js → typescript.cjs} +1 -1
- package/schematics/utils/warn-only-migration.cjs +52 -0
- package/schematics/utils/workspace-styles.cjs +123 -0
- package/select/select.scss +7 -0
- package/tabs/_tabs-common.scss +23 -0
- package/textarea/textarea-tokens.scss +4 -1
- package/toast/toast.component.scss +1 -0
- package/toggle/_toggle-theme.scss +0 -17
- package/tooltip/tooltip.scss +1 -1
- package/top-bar/top-bar-tokens.scss +1 -0
- package/top-bar/top-bar.scss +10 -0
- package/types/koobiq-components-accordion.d.ts +25 -0
- package/types/koobiq-components-button-toggle.d.ts +6 -0
- package/types/koobiq-components-checkbox.d.ts +30 -0
- package/types/koobiq-components-clamped-text.d.ts +16 -3
- package/types/koobiq-components-code-block.d.ts +55 -14
- package/types/koobiq-components-core.d.ts +226 -13
- package/types/koobiq-components-datepicker.d.ts +28 -1
- package/types/koobiq-components-divider.d.ts +28 -10
- package/types/koobiq-components-dropdown.d.ts +19 -0
- package/types/koobiq-components-filter-bar.d.ts +79 -6
- package/types/koobiq-components-flag.d.ts +18 -0
- package/types/koobiq-components-form-field.d.ts +87 -6
- package/types/koobiq-components-icon.d.ts +15 -0
- package/types/koobiq-components-inline-edit.d.ts +8 -1
- package/types/koobiq-components-input.d.ts +22 -3
- package/types/koobiq-components-list.d.ts +6 -0
- package/types/koobiq-components-modal.d.ts +7 -0
- package/types/koobiq-components-navbar.d.ts +71 -7
- package/types/koobiq-components-notification-center.d.ts +13 -0
- package/types/koobiq-components-overflow-items.d.ts +26 -2
- package/types/koobiq-components-popover.d.ts +38 -3
- package/types/koobiq-components-radio.d.ts +30 -0
- package/types/koobiq-components-search-expandable.d.ts +10 -0
- package/types/koobiq-components-select.d.ts +36 -4
- package/types/koobiq-components-sidepanel.d.ts +52 -1
- package/types/koobiq-components-splitter.d.ts +13 -4
- package/types/koobiq-components-tabs.d.ts +4 -0
- package/types/koobiq-components-tags.d.ts +6 -0
- package/types/koobiq-components-textarea.d.ts +9 -2
- package/types/koobiq-components-timepicker.d.ts +15 -0
- package/types/koobiq-components-toggle.d.ts +30 -0
- package/types/koobiq-components-tooltip.d.ts +55 -10
- package/types/koobiq-components-top-bar.d.ts +11 -3
- package/types/koobiq-components-tree-select.d.ts +23 -8
- package/types/koobiq-components-tree.d.ts +144 -60
- package/schematics/migrations/angular-animations-removal/index.js +0 -20
- package/schematics/migrations/color-signals/index.js +0 -19
- package/schematics/migrations/core-mixins-removal/index.js +0 -17
- package/schematics/migrations/datepicker-signals/index.js +0 -17
- package/schematics/migrations/dropdown-signals/index.js +0 -19
- package/schematics/migrations/input-signals/index.js +0 -17
- package/schematics/migrations/list-signals/index.js +0 -17
- package/schematics/migrations/modal-signals/index.js +0 -19
- package/schematics/migrations/option-signals/index.js +0 -19
- package/schematics/migrations/query-list-signals/index.js +0 -17
- package/schematics/migrations/signal-inputs-subclasses/index.js +0 -17
- package/schematics/migrations/v20-upgrade/index.js +0 -18
- package/schematics/migrations/zoneless-change-detection/index.js +0 -20
- package/schematics/utils/package-config.js +0 -13
- /package/schematics/migrations/accordion-state-saving-default/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/actions-panel-overlay-container/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/alert-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/angular-animations-removal/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/app-switcher-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/autocomplete-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/badge-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/button-state-and-styles/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/button-supported-colors/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/button-toggle-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/button-truncation/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/checkbox-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/clamped-text-disclosure/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/code-block-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/color-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/core-mixins-removal/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/css-selectors/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/datepicker-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/deprecated-icons/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/divider-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/dl-attribute-coercion/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/dl-standalone-names/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/dropdown-demote-overlay/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/dropdown-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/empty-state-error-color/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/file-upload-cva-and-primitives/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/file-upload-deprecated-outputs/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/filter-bar-rename-action/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/filter-bar-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/filter-bar-state-saving-default/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/flag-inner-html/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/form-field-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/icons-replacement/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/inline-edit-a11y-and-types/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/input-number-surface/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/input-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/link-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/list-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/list-tree-multiple-input/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/loader-overlay-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/locale-configuration-providers/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/markdown-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/modal-dialog-semantics/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/modal-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/navbar-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/new-icons-pack/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/notification-center-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/option-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/popover-leave-delay/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/progress-bar-percentage-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/progress-spinner-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/query-list-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/radio-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/read-state-dwell-handlers/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/select-signal-inputs/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/sidepanel-non-modal-behavior/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/signal-inputs-subclasses/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/split-button-optional-disabled/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/state-saving-default/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/table-cell-content/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tabs-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tag-list-cleaner/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tags-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/textarea-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/time-range-title-for/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/timepicker-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/timezone-grouping-utils/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/title-encapsulation/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/toast-stack-and-defaults/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tooltip-pointer-events-and-types/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/top-bar-container-selectors/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tree-select-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tree-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tree-state-saving-default/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/username-pipe-injection/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/zoneless-change-detection/{data.js → data.cjs} +0 -0
- /package/schematics/utils/{ast.js → ast.cjs} +0 -0
|
@@ -196,7 +196,7 @@ class KbqToastComponent {
|
|
|
196
196
|
this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);
|
|
197
197
|
}
|
|
198
198
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
199
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: KbqToastComponent, isStandalone: true, selector: "kbq-toast", host: { attributes: { "aria-atomic": "true" }, listeners: { "mouseenter": "setHovered(true)", "mouseleave": "setHovered(false)", "keydown.esc": "close()" }, properties: { "class": "styleClass", "class.kbq-toast_dismissible": "closeButton", "attr.role": "role", "class.kbq-toast_leaving": "leavingHeight() !== null", "style.--kbq-toast-leaving-height.px": "leavingHeight()", "class.kbq-animations-disabled": "animationsDisabled" }, classAttribute: "kbq-toast" }, hostDirectives: [{ directive: i1.KbqReadStateDirective }], ngImport: i0, template: "@if (icon) {\n <div class=\"kbq-toast__icon-container\">\n @if (iconTemplate) {\n <ng-container [ngTemplateOutlet]=\"iconTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else if (defaultIcon) {\n <i\n class=\"kbq-toast__icon\"\n aria-hidden=\"true\"\n [kbq-icon]=\"defaultIcon\"\n [color]=\"style\"\n [class]=\"data.iconClass\"\n ></i>\n }\n </div>\n}\n\n<div class=\"kbq-toast__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-toast__title\"\n [class.kbq-toast__title_only-text]=\"!titleTemplate\"\n [class.kbq-toast__title_with-content]=\"data.caption || data.content\"\n >\n @if (titleTemplate) {\n <ng-container [ngTemplateOutlet]=\"titleTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <p>{{ data.title }}</p>\n }\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-toast__text]=\"data.title\"\n [class.kbq-toast__text_only-text]=\"!captionTemplate\"\n [class.kbq-toast__title]=\"!data.title\"\n >\n @if (captionTemplate) {\n <ng-container [ngTemplateOutlet]=\"captionTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.caption }}}\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-toast__content\" [class.kbq-toast__content_only-text]=\"!contentTemplate\">\n @if (contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"contentTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.content }}}\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-toast__actions\">\n @if (actionsTemplate) {\n <ng-container [ngTemplateOutlet]=\"actionsTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n@if (closeButton) {\n <div>\n @if (closeButtonTemplate) {\n <ng-container [ngTemplateOutlet]=\"closeButtonTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <button\n type=\"button\"\n kbq-icon-button=\"kbq-xmark-s_16\"\n kbq-toast-close-button\n [attr.aria-label]=\"a11yLocaleConfiguration().close\"\n (click)=\"close()\"\n ></button>\n }\n </div>\n}\n", styles: ["@charset \"UTF-8\";.kbq-toast{display:flex;box-sizing:border-box;width:var(--kbq-toast-size-container-width);height:auto;border-radius:var(--kbq-toast-size-container-border-radius)}@supports (corner-shape: squircle){.kbq-toast{corner-shape:squircle;border-radius:clamp(var(--kbq-toast-size-container-border-radius) * 1.85,var(--kbq-toast-size-container-border-radius) * 2.3 - 3.6px,var(--kbq-toast-size-container-border-radius) * 2)}}.kbq-toast{padding-left:var(--kbq-toast-size-container-padding-left);padding-right:var(--kbq-toast-size-container-padding-right);animation:kbq-toast-enter .15s ease-out}.kbq-toast.kbq-toast_leaving{pointer-events:none;animation:kbq-toast-leave .3s ease-in forwards}.kbq-toast.kbq-toast_leaving.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-toast.kbq-toast_leaving{animation:none;transition:none}}.kbq-toast.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-toast{animation:none;transition:none}}@keyframes kbq-toast-enter{0%{transform:translate(100%);opacity:0}}@keyframes kbq-toast-leave{0%{height:var(--kbq-toast-leaving-height)}to{transform:translate(50%);opacity:0;height:0}}.kbq-toast__icon-container{display:flex;align-items:flex-start;justify-content:flex-start;flex-shrink:0;width:var(--kbq-toast-size-icon-width);max-width:var(--kbq-toast-size-icon-width);height:var(--kbq-toast-size-icon-height);max-height:var(--kbq-toast-size-icon-height);border-radius:var(--kbq-toast-size-icon-border-radius);margin-right:var(--kbq-toast-size-icon-margin-right);padding-top:calc(var(--kbq-toast-size-content-padding-top) + (var(--kbq-typography-text-normal-line-height) - var(--kbq-toast-size-icon-height)) / 2)}.kbq-toast__container{display:flex;flex-direction:column;flex:1;padding-top:var(--kbq-toast-size-content-padding-top);padding-right:var(--kbq-size-s);padding-bottom:var(--kbq-toast-size-content-padding-bottom);overflow:hidden}.kbq-toast__title{overflow:hidden;text-overflow:ellipsis}.kbq-toast__title>p{margin:0;overflow:hidden;text-overflow:ellipsis}.kbq-toast__title.kbq-toast__title_only-text{white-space:pre-wrap}.kbq-toast__title_with-content{padding-bottom:var(--kbq-toast-size-caption-padding-bottom)}.kbq-toast__text{display:flex;flex:1;align-items:center}.kbq-toast__text.kbq-toast__text_only-text{white-space:pre-wrap}.kbq-toast__content{display:flex;flex-direction:column}.kbq-toast__content.kbq-toast__content_only-text{white-space:pre-wrap}.kbq-toast__actions{display:flex;padding-top:var(--kbq-toast-size-button-stack-padding-top);gap:var(--kbq-toast-size-button-stack-content-gap-horizontal)}.kbq-toast__close-button{margin-top:var(--kbq-toast-size-close-button-margin-top);margin-right:var(--kbq-toast-size-close-button-margin-right)}.kbq-toast__close-button.kbq-icon-button{--kbq-icon-button-size-normal-horizontal-padding: var(--kbq-toast-size-close-button-padding);--kbq-icon-button-size-normal-vertical-padding: var(--kbq-toast-size-close-button-padding)}.kbq-toast.kbq-toast_contrast{box-shadow:var(--kbq-toast-contrast-container-shadow);background:var(--kbq-toast-contrast-container-background)}.kbq-toast.kbq-toast_contrast .kbq-toast__title{color:var(--kbq-toast-contrast-container-title)}.kbq-toast.kbq-toast_contrast .kbq-toast__text{color:var(--kbq-toast-contrast-container-text)}.kbq-toast.kbq-toast_success{box-shadow:var(--kbq-toast-success-container-shadow);background:var(--kbq-toast-success-container-background)}.kbq-toast.kbq-toast_success .kbq-toast__title{color:var(--kbq-toast-success-container-title)}.kbq-toast.kbq-toast_success .kbq-toast__text{color:var(--kbq-toast-success-container-text)}.kbq-toast.kbq-toast_warning{box-shadow:var(--kbq-toast-warning-container-shadow);background:var(--kbq-toast-warning-container-background)}.kbq-toast.kbq-toast_warning .kbq-toast__title{color:var(--kbq-toast-warning-container-title)}.kbq-toast.kbq-toast_warning .kbq-toast__text{color:var(--kbq-toast-warning-container-text)}.kbq-toast.kbq-toast_error{box-shadow:var(--kbq-toast-error-container-shadow);background:var(--kbq-toast-error-container-background)}.kbq-toast.kbq-toast_error .kbq-toast__title{color:var(--kbq-toast-error-container-title)}.kbq-toast.kbq-toast_error .kbq-toast__text{color:var(--kbq-toast-error-container-text)}.kbq-toast{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ":where(.kbq-toast-container){--kbq-toast-stack-size-margin-vertical: var(--kbq-size-m);--kbq-toast-stack-size-margin-horizontal: var(--kbq-size-m);--kbq-toast-stack-size-gap: var(--kbq-size-s);--kbq-toast-size-container-width: 360px;--kbq-toast-size-container-border-radius: var(--kbq-size-s);--kbq-toast-size-container-padding-left: var(--kbq-size-m);--kbq-toast-size-container-padding-right: var(--kbq-size-s);--kbq-toast-size-content-padding-top: var(--kbq-size-l);--kbq-toast-size-content-padding-bottom: var(--kbq-size-l);--kbq-toast-size-caption-padding-bottom: var(--kbq-size-xxs);--kbq-toast-size-icon-width: var(--kbq-size-l);--kbq-toast-size-icon-height: var(--kbq-size-l);--kbq-toast-size-icon-margin-right: var(--kbq-size-s);--kbq-toast-size-icon-border-radius: var(--kbq-toast-size-container-border-radius);--kbq-toast-size-close-button-padding: var(--kbq-size-xxs);--kbq-toast-size-close-button-icon-size: 16px;--kbq-toast-size-close-button-height: calc( var(--kbq-toast-size-close-button-icon-size) + var(--kbq-toast-size-close-button-padding) * 2 );--kbq-toast-size-close-button-margin-top: calc( var(--kbq-toast-size-content-padding-top) - (var(--kbq-toast-size-close-button-height) - var(--kbq-typography-text-normal-line-height)) / 2 );--kbq-toast-size-close-button-margin-right: var(--kbq-size-xxs);--kbq-toast-size-button-stack-padding-top: var(--kbq-size-s);--kbq-toast-size-button-stack-content-gap-horizontal: var(--kbq-size-m);--kbq-toast-contrast-container-background: var(--kbq-background-card);--kbq-toast-contrast-container-title: var(--kbq-foreground-contrast);--kbq-toast-contrast-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-contrast-container-shadow: var(--kbq-shadow-popup);--kbq-toast-error-container-background: var(--kbq-background-card);--kbq-toast-error-container-title: var(--kbq-foreground-contrast);--kbq-toast-error-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-error-container-shadow: var(--kbq-shadow-popup);--kbq-toast-warning-container-background: var(--kbq-background-card);--kbq-toast-warning-container-title: var(--kbq-foreground-contrast);--kbq-toast-warning-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-warning-container-shadow: var(--kbq-shadow-popup);--kbq-toast-success-container-background: var(--kbq-background-card);--kbq-toast-success-container-title: var(--kbq-foreground-contrast);--kbq-toast-success-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-success-container-shadow: var(--kbq-shadow-popup)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i2.KbqIcon, selector: "[kbq-icon]", inputs: ["aria-hidden", "iconSize", "autoColor", "kbq-icon"] }, { kind: "component", type: i2.KbqIconButton, selector: "[kbq-icon-button]", inputs: ["size", "kbq-icon-button", "tabindex", "disabled"] }, { kind: "ngmodule", type: KbqTitleModule }, { kind: "directive", type: i3.KbqTitleDirective, selector: "[kbq-title]", inputs: ["kbq-title", "ignoreTooltipPointerEvents"], exportAs: ["kbqTitle"] }, { kind: "directive", type: KbqToastCloseButton, selector: "[kbq-toast-close-button]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
199
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: KbqToastComponent, isStandalone: true, selector: "kbq-toast", host: { attributes: { "aria-atomic": "true" }, listeners: { "mouseenter": "setHovered(true)", "mouseleave": "setHovered(false)", "keydown.esc": "close()" }, properties: { "class": "styleClass", "class.kbq-toast_dismissible": "closeButton", "attr.role": "role", "class.kbq-toast_leaving": "leavingHeight() !== null", "style.--kbq-toast-leaving-height.px": "leavingHeight()", "class.kbq-animations-disabled": "animationsDisabled" }, classAttribute: "kbq-toast" }, hostDirectives: [{ directive: i1.KbqReadStateDirective }], ngImport: i0, template: "@if (icon) {\n <div class=\"kbq-toast__icon-container\">\n @if (iconTemplate) {\n <ng-container [ngTemplateOutlet]=\"iconTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else if (defaultIcon) {\n <i\n class=\"kbq-toast__icon\"\n aria-hidden=\"true\"\n [kbq-icon]=\"defaultIcon\"\n [color]=\"style\"\n [class]=\"data.iconClass\"\n ></i>\n }\n </div>\n}\n\n<div class=\"kbq-toast__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-toast__title\"\n [class.kbq-toast__title_only-text]=\"!titleTemplate\"\n [class.kbq-toast__title_with-content]=\"data.caption || data.content\"\n >\n @if (titleTemplate) {\n <ng-container [ngTemplateOutlet]=\"titleTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <p>{{ data.title }}</p>\n }\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-toast__text]=\"data.title\"\n [class.kbq-toast__text_only-text]=\"!captionTemplate\"\n [class.kbq-toast__title]=\"!data.title\"\n >\n @if (captionTemplate) {\n <ng-container [ngTemplateOutlet]=\"captionTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.caption }}}\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-toast__content\" [class.kbq-toast__content_only-text]=\"!contentTemplate\">\n @if (contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"contentTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.content }}}\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-toast__actions\">\n @if (actionsTemplate) {\n <ng-container [ngTemplateOutlet]=\"actionsTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n@if (closeButton) {\n <div>\n @if (closeButtonTemplate) {\n <ng-container [ngTemplateOutlet]=\"closeButtonTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <button\n type=\"button\"\n kbq-icon-button=\"kbq-xmark-s_16\"\n kbq-toast-close-button\n [attr.aria-label]=\"a11yLocaleConfiguration().close\"\n (click)=\"close()\"\n ></button>\n }\n </div>\n}\n", styles: ["@charset \"UTF-8\";.kbq-toast{display:flex;box-sizing:border-box;width:var(--kbq-toast-size-container-width);height:auto;border-radius:var(--kbq-toast-size-container-border-radius)}@supports (corner-shape: squircle){.kbq-toast{corner-shape:squircle;border-radius:clamp(var(--kbq-toast-size-container-border-radius) * 1.85,var(--kbq-toast-size-container-border-radius) * 2.3 - 3.6px,var(--kbq-toast-size-container-border-radius) * 2)}}.kbq-toast{padding-left:var(--kbq-toast-size-container-padding-left);padding-right:var(--kbq-toast-size-container-padding-right);animation:kbq-toast-enter .15s ease-out}.kbq-toast.kbq-toast_leaving{pointer-events:none;animation:kbq-toast-leave .3s ease-in forwards}.kbq-toast.kbq-toast_leaving.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-toast.kbq-toast_leaving{animation:none;transition:none}}.kbq-toast.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-toast{animation:none;transition:none}}@keyframes kbq-toast-enter{0%{transform:translate(100%);opacity:0}}@keyframes kbq-toast-leave{0%{height:var(--kbq-toast-leaving-height)}to{transform:translate(50%);opacity:0;height:0}}.kbq-toast__icon-container{display:flex;align-items:flex-start;justify-content:flex-start;flex-shrink:0;width:var(--kbq-toast-size-icon-width);max-width:var(--kbq-toast-size-icon-width);height:var(--kbq-toast-size-icon-height);max-height:var(--kbq-toast-size-icon-height);border-radius:var(--kbq-toast-size-icon-border-radius);margin-right:var(--kbq-toast-size-icon-margin-right);padding-top:calc(var(--kbq-toast-size-content-padding-top) + (var(--kbq-typography-text-normal-line-height) - var(--kbq-toast-size-icon-height)) / 2)}.kbq-toast__container{display:flex;flex-direction:column;flex:1;padding-top:var(--kbq-toast-size-content-padding-top);padding-right:var(--kbq-size-s);padding-bottom:var(--kbq-toast-size-content-padding-bottom);overflow:hidden}.kbq-toast__title{overflow:hidden;text-overflow:ellipsis}.kbq-toast__title>p{margin:0;overflow:hidden;text-overflow:ellipsis}.kbq-toast__title.kbq-toast__title_only-text{white-space:pre-wrap}.kbq-toast__title_with-content{padding-bottom:var(--kbq-toast-size-caption-padding-bottom)}.kbq-toast__text{display:flex;flex:1;align-items:center}.kbq-toast__text.kbq-toast__text_only-text{white-space:pre-wrap}.kbq-toast__content{display:flex;flex-direction:column}.kbq-toast__content.kbq-toast__content_only-text{white-space:pre-wrap}.kbq-toast__actions{display:flex;flex-wrap:wrap;padding-top:var(--kbq-toast-size-button-stack-padding-top);gap:var(--kbq-toast-size-button-stack-content-gap-horizontal)}.kbq-toast__close-button{margin-top:var(--kbq-toast-size-close-button-margin-top);margin-right:var(--kbq-toast-size-close-button-margin-right)}.kbq-toast__close-button.kbq-icon-button{--kbq-icon-button-size-normal-horizontal-padding: var(--kbq-toast-size-close-button-padding);--kbq-icon-button-size-normal-vertical-padding: var(--kbq-toast-size-close-button-padding)}.kbq-toast.kbq-toast_contrast{box-shadow:var(--kbq-toast-contrast-container-shadow);background:var(--kbq-toast-contrast-container-background)}.kbq-toast.kbq-toast_contrast .kbq-toast__title{color:var(--kbq-toast-contrast-container-title)}.kbq-toast.kbq-toast_contrast .kbq-toast__text{color:var(--kbq-toast-contrast-container-text)}.kbq-toast.kbq-toast_success{box-shadow:var(--kbq-toast-success-container-shadow);background:var(--kbq-toast-success-container-background)}.kbq-toast.kbq-toast_success .kbq-toast__title{color:var(--kbq-toast-success-container-title)}.kbq-toast.kbq-toast_success .kbq-toast__text{color:var(--kbq-toast-success-container-text)}.kbq-toast.kbq-toast_warning{box-shadow:var(--kbq-toast-warning-container-shadow);background:var(--kbq-toast-warning-container-background)}.kbq-toast.kbq-toast_warning .kbq-toast__title{color:var(--kbq-toast-warning-container-title)}.kbq-toast.kbq-toast_warning .kbq-toast__text{color:var(--kbq-toast-warning-container-text)}.kbq-toast.kbq-toast_error{box-shadow:var(--kbq-toast-error-container-shadow);background:var(--kbq-toast-error-container-background)}.kbq-toast.kbq-toast_error .kbq-toast__title{color:var(--kbq-toast-error-container-title)}.kbq-toast.kbq-toast_error .kbq-toast__text{color:var(--kbq-toast-error-container-text)}.kbq-toast{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ":where(.kbq-toast-container){--kbq-toast-stack-size-margin-vertical: var(--kbq-size-m);--kbq-toast-stack-size-margin-horizontal: var(--kbq-size-m);--kbq-toast-stack-size-gap: var(--kbq-size-s);--kbq-toast-size-container-width: 360px;--kbq-toast-size-container-border-radius: var(--kbq-size-s);--kbq-toast-size-container-padding-left: var(--kbq-size-m);--kbq-toast-size-container-padding-right: var(--kbq-size-s);--kbq-toast-size-content-padding-top: var(--kbq-size-l);--kbq-toast-size-content-padding-bottom: var(--kbq-size-l);--kbq-toast-size-caption-padding-bottom: var(--kbq-size-xxs);--kbq-toast-size-icon-width: var(--kbq-size-l);--kbq-toast-size-icon-height: var(--kbq-size-l);--kbq-toast-size-icon-margin-right: var(--kbq-size-s);--kbq-toast-size-icon-border-radius: var(--kbq-toast-size-container-border-radius);--kbq-toast-size-close-button-padding: var(--kbq-size-xxs);--kbq-toast-size-close-button-icon-size: 16px;--kbq-toast-size-close-button-height: calc( var(--kbq-toast-size-close-button-icon-size) + var(--kbq-toast-size-close-button-padding) * 2 );--kbq-toast-size-close-button-margin-top: calc( var(--kbq-toast-size-content-padding-top) - (var(--kbq-toast-size-close-button-height) - var(--kbq-typography-text-normal-line-height)) / 2 );--kbq-toast-size-close-button-margin-right: var(--kbq-size-xxs);--kbq-toast-size-button-stack-padding-top: var(--kbq-size-s);--kbq-toast-size-button-stack-content-gap-horizontal: var(--kbq-size-m);--kbq-toast-contrast-container-background: var(--kbq-background-card);--kbq-toast-contrast-container-title: var(--kbq-foreground-contrast);--kbq-toast-contrast-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-contrast-container-shadow: var(--kbq-shadow-popup);--kbq-toast-error-container-background: var(--kbq-background-card);--kbq-toast-error-container-title: var(--kbq-foreground-contrast);--kbq-toast-error-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-error-container-shadow: var(--kbq-shadow-popup);--kbq-toast-warning-container-background: var(--kbq-background-card);--kbq-toast-warning-container-title: var(--kbq-foreground-contrast);--kbq-toast-warning-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-warning-container-shadow: var(--kbq-shadow-popup);--kbq-toast-success-container-background: var(--kbq-background-card);--kbq-toast-success-container-title: var(--kbq-foreground-contrast);--kbq-toast-success-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-success-container-shadow: var(--kbq-shadow-popup)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i2.KbqIcon, selector: "[kbq-icon]", inputs: ["aria-hidden", "iconSize", "autoColor", "kbq-icon"] }, { kind: "component", type: i2.KbqIconButton, selector: "[kbq-icon-button]", inputs: ["size", "kbq-icon-button", "tabindex", "disabled"] }, { kind: "ngmodule", type: KbqTitleModule }, { kind: "directive", type: i3.KbqTitleDirective, selector: "[kbq-title]", inputs: ["kbq-title", "ignoreTooltipPointerEvents"], exportAs: ["kbqTitle"] }, { kind: "directive", type: KbqToastCloseButton, selector: "[kbq-toast-close-button]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
200
200
|
}
|
|
201
201
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToastComponent, decorators: [{
|
|
202
202
|
type: Component,
|
|
@@ -220,7 +220,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
|
|
|
220
220
|
'(mouseenter)': 'setHovered(true)',
|
|
221
221
|
'(mouseleave)': 'setHovered(false)',
|
|
222
222
|
'(keydown.esc)': 'close()'
|
|
223
|
-
}, hostDirectives: [KbqReadStateDirective], template: "@if (icon) {\n <div class=\"kbq-toast__icon-container\">\n @if (iconTemplate) {\n <ng-container [ngTemplateOutlet]=\"iconTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else if (defaultIcon) {\n <i\n class=\"kbq-toast__icon\"\n aria-hidden=\"true\"\n [kbq-icon]=\"defaultIcon\"\n [color]=\"style\"\n [class]=\"data.iconClass\"\n ></i>\n }\n </div>\n}\n\n<div class=\"kbq-toast__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-toast__title\"\n [class.kbq-toast__title_only-text]=\"!titleTemplate\"\n [class.kbq-toast__title_with-content]=\"data.caption || data.content\"\n >\n @if (titleTemplate) {\n <ng-container [ngTemplateOutlet]=\"titleTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <p>{{ data.title }}</p>\n }\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-toast__text]=\"data.title\"\n [class.kbq-toast__text_only-text]=\"!captionTemplate\"\n [class.kbq-toast__title]=\"!data.title\"\n >\n @if (captionTemplate) {\n <ng-container [ngTemplateOutlet]=\"captionTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.caption }}}\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-toast__content\" [class.kbq-toast__content_only-text]=\"!contentTemplate\">\n @if (contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"contentTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.content }}}\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-toast__actions\">\n @if (actionsTemplate) {\n <ng-container [ngTemplateOutlet]=\"actionsTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n@if (closeButton) {\n <div>\n @if (closeButtonTemplate) {\n <ng-container [ngTemplateOutlet]=\"closeButtonTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <button\n type=\"button\"\n kbq-icon-button=\"kbq-xmark-s_16\"\n kbq-toast-close-button\n [attr.aria-label]=\"a11yLocaleConfiguration().close\"\n (click)=\"close()\"\n ></button>\n }\n </div>\n}\n", styles: ["@charset \"UTF-8\";.kbq-toast{display:flex;box-sizing:border-box;width:var(--kbq-toast-size-container-width);height:auto;border-radius:var(--kbq-toast-size-container-border-radius)}@supports (corner-shape: squircle){.kbq-toast{corner-shape:squircle;border-radius:clamp(var(--kbq-toast-size-container-border-radius) * 1.85,var(--kbq-toast-size-container-border-radius) * 2.3 - 3.6px,var(--kbq-toast-size-container-border-radius) * 2)}}.kbq-toast{padding-left:var(--kbq-toast-size-container-padding-left);padding-right:var(--kbq-toast-size-container-padding-right);animation:kbq-toast-enter .15s ease-out}.kbq-toast.kbq-toast_leaving{pointer-events:none;animation:kbq-toast-leave .3s ease-in forwards}.kbq-toast.kbq-toast_leaving.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-toast.kbq-toast_leaving{animation:none;transition:none}}.kbq-toast.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-toast{animation:none;transition:none}}@keyframes kbq-toast-enter{0%{transform:translate(100%);opacity:0}}@keyframes kbq-toast-leave{0%{height:var(--kbq-toast-leaving-height)}to{transform:translate(50%);opacity:0;height:0}}.kbq-toast__icon-container{display:flex;align-items:flex-start;justify-content:flex-start;flex-shrink:0;width:var(--kbq-toast-size-icon-width);max-width:var(--kbq-toast-size-icon-width);height:var(--kbq-toast-size-icon-height);max-height:var(--kbq-toast-size-icon-height);border-radius:var(--kbq-toast-size-icon-border-radius);margin-right:var(--kbq-toast-size-icon-margin-right);padding-top:calc(var(--kbq-toast-size-content-padding-top) + (var(--kbq-typography-text-normal-line-height) - var(--kbq-toast-size-icon-height)) / 2)}.kbq-toast__container{display:flex;flex-direction:column;flex:1;padding-top:var(--kbq-toast-size-content-padding-top);padding-right:var(--kbq-size-s);padding-bottom:var(--kbq-toast-size-content-padding-bottom);overflow:hidden}.kbq-toast__title{overflow:hidden;text-overflow:ellipsis}.kbq-toast__title>p{margin:0;overflow:hidden;text-overflow:ellipsis}.kbq-toast__title.kbq-toast__title_only-text{white-space:pre-wrap}.kbq-toast__title_with-content{padding-bottom:var(--kbq-toast-size-caption-padding-bottom)}.kbq-toast__text{display:flex;flex:1;align-items:center}.kbq-toast__text.kbq-toast__text_only-text{white-space:pre-wrap}.kbq-toast__content{display:flex;flex-direction:column}.kbq-toast__content.kbq-toast__content_only-text{white-space:pre-wrap}.kbq-toast__actions{display:flex;padding-top:var(--kbq-toast-size-button-stack-padding-top);gap:var(--kbq-toast-size-button-stack-content-gap-horizontal)}.kbq-toast__close-button{margin-top:var(--kbq-toast-size-close-button-margin-top);margin-right:var(--kbq-toast-size-close-button-margin-right)}.kbq-toast__close-button.kbq-icon-button{--kbq-icon-button-size-normal-horizontal-padding: var(--kbq-toast-size-close-button-padding);--kbq-icon-button-size-normal-vertical-padding: var(--kbq-toast-size-close-button-padding)}.kbq-toast.kbq-toast_contrast{box-shadow:var(--kbq-toast-contrast-container-shadow);background:var(--kbq-toast-contrast-container-background)}.kbq-toast.kbq-toast_contrast .kbq-toast__title{color:var(--kbq-toast-contrast-container-title)}.kbq-toast.kbq-toast_contrast .kbq-toast__text{color:var(--kbq-toast-contrast-container-text)}.kbq-toast.kbq-toast_success{box-shadow:var(--kbq-toast-success-container-shadow);background:var(--kbq-toast-success-container-background)}.kbq-toast.kbq-toast_success .kbq-toast__title{color:var(--kbq-toast-success-container-title)}.kbq-toast.kbq-toast_success .kbq-toast__text{color:var(--kbq-toast-success-container-text)}.kbq-toast.kbq-toast_warning{box-shadow:var(--kbq-toast-warning-container-shadow);background:var(--kbq-toast-warning-container-background)}.kbq-toast.kbq-toast_warning .kbq-toast__title{color:var(--kbq-toast-warning-container-title)}.kbq-toast.kbq-toast_warning .kbq-toast__text{color:var(--kbq-toast-warning-container-text)}.kbq-toast.kbq-toast_error{box-shadow:var(--kbq-toast-error-container-shadow);background:var(--kbq-toast-error-container-background)}.kbq-toast.kbq-toast_error .kbq-toast__title{color:var(--kbq-toast-error-container-title)}.kbq-toast.kbq-toast_error .kbq-toast__text{color:var(--kbq-toast-error-container-text)}.kbq-toast{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ":where(.kbq-toast-container){--kbq-toast-stack-size-margin-vertical: var(--kbq-size-m);--kbq-toast-stack-size-margin-horizontal: var(--kbq-size-m);--kbq-toast-stack-size-gap: var(--kbq-size-s);--kbq-toast-size-container-width: 360px;--kbq-toast-size-container-border-radius: var(--kbq-size-s);--kbq-toast-size-container-padding-left: var(--kbq-size-m);--kbq-toast-size-container-padding-right: var(--kbq-size-s);--kbq-toast-size-content-padding-top: var(--kbq-size-l);--kbq-toast-size-content-padding-bottom: var(--kbq-size-l);--kbq-toast-size-caption-padding-bottom: var(--kbq-size-xxs);--kbq-toast-size-icon-width: var(--kbq-size-l);--kbq-toast-size-icon-height: var(--kbq-size-l);--kbq-toast-size-icon-margin-right: var(--kbq-size-s);--kbq-toast-size-icon-border-radius: var(--kbq-toast-size-container-border-radius);--kbq-toast-size-close-button-padding: var(--kbq-size-xxs);--kbq-toast-size-close-button-icon-size: 16px;--kbq-toast-size-close-button-height: calc( var(--kbq-toast-size-close-button-icon-size) + var(--kbq-toast-size-close-button-padding) * 2 );--kbq-toast-size-close-button-margin-top: calc( var(--kbq-toast-size-content-padding-top) - (var(--kbq-toast-size-close-button-height) - var(--kbq-typography-text-normal-line-height)) / 2 );--kbq-toast-size-close-button-margin-right: var(--kbq-size-xxs);--kbq-toast-size-button-stack-padding-top: var(--kbq-size-s);--kbq-toast-size-button-stack-content-gap-horizontal: var(--kbq-size-m);--kbq-toast-contrast-container-background: var(--kbq-background-card);--kbq-toast-contrast-container-title: var(--kbq-foreground-contrast);--kbq-toast-contrast-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-contrast-container-shadow: var(--kbq-shadow-popup);--kbq-toast-error-container-background: var(--kbq-background-card);--kbq-toast-error-container-title: var(--kbq-foreground-contrast);--kbq-toast-error-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-error-container-shadow: var(--kbq-shadow-popup);--kbq-toast-warning-container-background: var(--kbq-background-card);--kbq-toast-warning-container-title: var(--kbq-foreground-contrast);--kbq-toast-warning-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-warning-container-shadow: var(--kbq-shadow-popup);--kbq-toast-success-container-background: var(--kbq-background-card);--kbq-toast-success-container-title: var(--kbq-foreground-contrast);--kbq-toast-success-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-success-container-shadow: var(--kbq-shadow-popup)}\n"] }]
|
|
223
|
+
}, hostDirectives: [KbqReadStateDirective], template: "@if (icon) {\n <div class=\"kbq-toast__icon-container\">\n @if (iconTemplate) {\n <ng-container [ngTemplateOutlet]=\"iconTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else if (defaultIcon) {\n <i\n class=\"kbq-toast__icon\"\n aria-hidden=\"true\"\n [kbq-icon]=\"defaultIcon\"\n [color]=\"style\"\n [class]=\"data.iconClass\"\n ></i>\n }\n </div>\n}\n\n<div class=\"kbq-toast__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-toast__title\"\n [class.kbq-toast__title_only-text]=\"!titleTemplate\"\n [class.kbq-toast__title_with-content]=\"data.caption || data.content\"\n >\n @if (titleTemplate) {\n <ng-container [ngTemplateOutlet]=\"titleTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <p>{{ data.title }}</p>\n }\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-toast__text]=\"data.title\"\n [class.kbq-toast__text_only-text]=\"!captionTemplate\"\n [class.kbq-toast__title]=\"!data.title\"\n >\n @if (captionTemplate) {\n <ng-container [ngTemplateOutlet]=\"captionTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.caption }}}\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-toast__content\" [class.kbq-toast__content_only-text]=\"!contentTemplate\">\n @if (contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"contentTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.content }}}\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-toast__actions\">\n @if (actionsTemplate) {\n <ng-container [ngTemplateOutlet]=\"actionsTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n@if (closeButton) {\n <div>\n @if (closeButtonTemplate) {\n <ng-container [ngTemplateOutlet]=\"closeButtonTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <button\n type=\"button\"\n kbq-icon-button=\"kbq-xmark-s_16\"\n kbq-toast-close-button\n [attr.aria-label]=\"a11yLocaleConfiguration().close\"\n (click)=\"close()\"\n ></button>\n }\n </div>\n}\n", styles: ["@charset \"UTF-8\";.kbq-toast{display:flex;box-sizing:border-box;width:var(--kbq-toast-size-container-width);height:auto;border-radius:var(--kbq-toast-size-container-border-radius)}@supports (corner-shape: squircle){.kbq-toast{corner-shape:squircle;border-radius:clamp(var(--kbq-toast-size-container-border-radius) * 1.85,var(--kbq-toast-size-container-border-radius) * 2.3 - 3.6px,var(--kbq-toast-size-container-border-radius) * 2)}}.kbq-toast{padding-left:var(--kbq-toast-size-container-padding-left);padding-right:var(--kbq-toast-size-container-padding-right);animation:kbq-toast-enter .15s ease-out}.kbq-toast.kbq-toast_leaving{pointer-events:none;animation:kbq-toast-leave .3s ease-in forwards}.kbq-toast.kbq-toast_leaving.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-toast.kbq-toast_leaving{animation:none;transition:none}}.kbq-toast.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-toast{animation:none;transition:none}}@keyframes kbq-toast-enter{0%{transform:translate(100%);opacity:0}}@keyframes kbq-toast-leave{0%{height:var(--kbq-toast-leaving-height)}to{transform:translate(50%);opacity:0;height:0}}.kbq-toast__icon-container{display:flex;align-items:flex-start;justify-content:flex-start;flex-shrink:0;width:var(--kbq-toast-size-icon-width);max-width:var(--kbq-toast-size-icon-width);height:var(--kbq-toast-size-icon-height);max-height:var(--kbq-toast-size-icon-height);border-radius:var(--kbq-toast-size-icon-border-radius);margin-right:var(--kbq-toast-size-icon-margin-right);padding-top:calc(var(--kbq-toast-size-content-padding-top) + (var(--kbq-typography-text-normal-line-height) - var(--kbq-toast-size-icon-height)) / 2)}.kbq-toast__container{display:flex;flex-direction:column;flex:1;padding-top:var(--kbq-toast-size-content-padding-top);padding-right:var(--kbq-size-s);padding-bottom:var(--kbq-toast-size-content-padding-bottom);overflow:hidden}.kbq-toast__title{overflow:hidden;text-overflow:ellipsis}.kbq-toast__title>p{margin:0;overflow:hidden;text-overflow:ellipsis}.kbq-toast__title.kbq-toast__title_only-text{white-space:pre-wrap}.kbq-toast__title_with-content{padding-bottom:var(--kbq-toast-size-caption-padding-bottom)}.kbq-toast__text{display:flex;flex:1;align-items:center}.kbq-toast__text.kbq-toast__text_only-text{white-space:pre-wrap}.kbq-toast__content{display:flex;flex-direction:column}.kbq-toast__content.kbq-toast__content_only-text{white-space:pre-wrap}.kbq-toast__actions{display:flex;flex-wrap:wrap;padding-top:var(--kbq-toast-size-button-stack-padding-top);gap:var(--kbq-toast-size-button-stack-content-gap-horizontal)}.kbq-toast__close-button{margin-top:var(--kbq-toast-size-close-button-margin-top);margin-right:var(--kbq-toast-size-close-button-margin-right)}.kbq-toast__close-button.kbq-icon-button{--kbq-icon-button-size-normal-horizontal-padding: var(--kbq-toast-size-close-button-padding);--kbq-icon-button-size-normal-vertical-padding: var(--kbq-toast-size-close-button-padding)}.kbq-toast.kbq-toast_contrast{box-shadow:var(--kbq-toast-contrast-container-shadow);background:var(--kbq-toast-contrast-container-background)}.kbq-toast.kbq-toast_contrast .kbq-toast__title{color:var(--kbq-toast-contrast-container-title)}.kbq-toast.kbq-toast_contrast .kbq-toast__text{color:var(--kbq-toast-contrast-container-text)}.kbq-toast.kbq-toast_success{box-shadow:var(--kbq-toast-success-container-shadow);background:var(--kbq-toast-success-container-background)}.kbq-toast.kbq-toast_success .kbq-toast__title{color:var(--kbq-toast-success-container-title)}.kbq-toast.kbq-toast_success .kbq-toast__text{color:var(--kbq-toast-success-container-text)}.kbq-toast.kbq-toast_warning{box-shadow:var(--kbq-toast-warning-container-shadow);background:var(--kbq-toast-warning-container-background)}.kbq-toast.kbq-toast_warning .kbq-toast__title{color:var(--kbq-toast-warning-container-title)}.kbq-toast.kbq-toast_warning .kbq-toast__text{color:var(--kbq-toast-warning-container-text)}.kbq-toast.kbq-toast_error{box-shadow:var(--kbq-toast-error-container-shadow);background:var(--kbq-toast-error-container-background)}.kbq-toast.kbq-toast_error .kbq-toast__title{color:var(--kbq-toast-error-container-title)}.kbq-toast.kbq-toast_error .kbq-toast__text{color:var(--kbq-toast-error-container-text)}.kbq-toast{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ":where(.kbq-toast-container){--kbq-toast-stack-size-margin-vertical: var(--kbq-size-m);--kbq-toast-stack-size-margin-horizontal: var(--kbq-size-m);--kbq-toast-stack-size-gap: var(--kbq-size-s);--kbq-toast-size-container-width: 360px;--kbq-toast-size-container-border-radius: var(--kbq-size-s);--kbq-toast-size-container-padding-left: var(--kbq-size-m);--kbq-toast-size-container-padding-right: var(--kbq-size-s);--kbq-toast-size-content-padding-top: var(--kbq-size-l);--kbq-toast-size-content-padding-bottom: var(--kbq-size-l);--kbq-toast-size-caption-padding-bottom: var(--kbq-size-xxs);--kbq-toast-size-icon-width: var(--kbq-size-l);--kbq-toast-size-icon-height: var(--kbq-size-l);--kbq-toast-size-icon-margin-right: var(--kbq-size-s);--kbq-toast-size-icon-border-radius: var(--kbq-toast-size-container-border-radius);--kbq-toast-size-close-button-padding: var(--kbq-size-xxs);--kbq-toast-size-close-button-icon-size: 16px;--kbq-toast-size-close-button-height: calc( var(--kbq-toast-size-close-button-icon-size) + var(--kbq-toast-size-close-button-padding) * 2 );--kbq-toast-size-close-button-margin-top: calc( var(--kbq-toast-size-content-padding-top) - (var(--kbq-toast-size-close-button-height) - var(--kbq-typography-text-normal-line-height)) / 2 );--kbq-toast-size-close-button-margin-right: var(--kbq-size-xxs);--kbq-toast-size-button-stack-padding-top: var(--kbq-size-s);--kbq-toast-size-button-stack-content-gap-horizontal: var(--kbq-size-m);--kbq-toast-contrast-container-background: var(--kbq-background-card);--kbq-toast-contrast-container-title: var(--kbq-foreground-contrast);--kbq-toast-contrast-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-contrast-container-shadow: var(--kbq-shadow-popup);--kbq-toast-error-container-background: var(--kbq-background-card);--kbq-toast-error-container-title: var(--kbq-foreground-contrast);--kbq-toast-error-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-error-container-shadow: var(--kbq-shadow-popup);--kbq-toast-warning-container-background: var(--kbq-background-card);--kbq-toast-warning-container-title: var(--kbq-foreground-contrast);--kbq-toast-warning-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-warning-container-shadow: var(--kbq-shadow-popup);--kbq-toast-success-container-background: var(--kbq-background-card);--kbq-toast-success-container-title: var(--kbq-foreground-contrast);--kbq-toast-success-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-success-container-shadow: var(--kbq-shadow-popup)}\n"] }]
|
|
224
224
|
}], ctorParameters: () => [] });
|
|
225
225
|
|
|
226
226
|
const KBQ_TOAST_FACTORY = new InjectionToken('KBQ_TOAST_FACTORY', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"koobiq-components-toast.mjs","sources":["../../../packages/components/toast/toast.type.ts","../../../packages/components/toast/toast.component.ts","../../../packages/components/toast/toast.component.html","../../../packages/components/toast/toast.service.ts","../../../packages/components/toast/toast-container.component.ts","../../../packages/components/toast/toast.module.ts","../../../packages/components/toast/koobiq-components-toast.ts"],"sourcesContent":["import { FocusOrigin } from '@angular/cdk/a11y';\nimport { InjectionToken, Provider, TemplateRef } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport enum KbqToastStyle {\n Contrast = 'contrast',\n Success = 'success',\n Warning = 'warning',\n Error = 'error'\n}\n\nexport enum KbqToastPosition {\n TOP_RIGHT = 'top-right',\n TOP_LEFT = 'top-left',\n TOP_CENTER = 'top-center',\n BOTTOM_RIGHT = 'bottom-right',\n BOTTOM_LEFT = 'bottom-left',\n BOTTOM_CENTER = 'bottom-center',\n CENTER = 'center'\n}\n\nexport class KbqToastData {\n id?: string;\n title?: string | TemplateRef<any>;\n /** Visual style of the toast. Styles outside `KbqToastStyle` render without a default icon. */\n style?: KbqToastStyle | (string & {});\n\n icon?: TemplateRef<any> | boolean;\n iconClass?: string;\n caption?: string | TemplateRef<any>;\n\n content?: string | TemplateRef<any>;\n actions?: TemplateRef<any>;\n\n closeButton?: TemplateRef<any> | boolean;\n}\n\n/**\n * Context of a template rendered by `KbqToastService.showTemplate`.\n *\n * Note that it differs from the context of the slot templates passed through `KbqToastData` (title, caption,\n * content, actions, icon and close button), whose `$implicit` is the `KbqToastComponent` instance.\n */\nexport type KbqToastTemplateContext = {\n $implicit: KbqToastData;\n};\n\n/**\n * Narrow contract that a toast consumes from the service owning its stack.\n *\n * `KbqToastService` implements it and provides itself under `KBQ_TOAST_STACK` for every toast it creates, so\n * that a toast never has to depend on the concrete service that instantiates it.\n */\nexport interface KbqToastStack {\n /** Emits the data of a toast once the user has read it. */\n readonly read: Subject<KbqToastData | null>;\n /** Removes the toast with the given id from the stack. */\n hide(id: number): void;\n\n /** Reports that the pointer entered or left the toast with the given id. */\n setHovered(id: number, hovered: boolean): void;\n\n /** Reports the origin the toast with the given id is focused with, or `null` once it loses focus. */\n setFocused(id: number, origin: FocusOrigin): void;\n}\n\n/** Stack a toast belongs to. Provided by `KbqToastService` for every toast it creates. */\nexport const KBQ_TOAST_STACK = new InjectionToken<KbqToastStack>('KBQ_TOAST_STACK');\n\nexport interface KbqToastConfig {\n position: KbqToastPosition;\n duration: number;\n delay: number;\n onTop: boolean;\n /** Custom indentation for positioning the toast stack overlay when using `GlobalPositionStrategy` */\n indent: {\n /** Vertical spacing from the top or bottom of the screen. */\n vertical: number;\n\n /** Horizontal spacing from the left or right of the screen. */\n horizontal: number;\n };\n}\n\n/** Frozen so that the fallback every application shares cannot be reconfigured from a single consumer. */\nexport const defaultToastConfig: KbqToastConfig = Object.freeze({\n position: KbqToastPosition.TOP_RIGHT,\n duration: 5000,\n delay: 2000,\n onTop: false,\n indent: Object.freeze({\n vertical: 0,\n horizontal: 0\n })\n});\n\nexport const KBQ_TOAST_CONFIG = new InjectionToken<KbqToastConfig>('kbq-toast-config', {\n factory: () => defaultToastConfig\n});\n\n/** Utility provider for `KBQ_TOAST_CONFIG`. */\nexport const kbqToastConfigurationProvider = (configuration: Partial<KbqToastConfig>): Provider => ({\n provide: KBQ_TOAST_CONFIG,\n useValue: {\n ...defaultToastConfig,\n ...configuration,\n // `indent` is merged on its own: a shallow spread would alias the default object into every\n // configuration that omits it, so writing to one provider's indent would move the global default.\n indent: { ...defaultToastConfig.indent, ...configuration.indent }\n } satisfies KbqToastConfig\n});\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Directive,\n ElementRef,\n Injector,\n OnDestroy,\n Signal,\n TemplateRef,\n ViewEncapsulation,\n inject,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n KbqReadStateDirective,\n kbqAfterAnimations,\n kbqAnimationsDisabled,\n kbqInjectA11yLocaleConfiguration\n} from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { filter, take } from 'rxjs/operators';\nimport { KBQ_TOAST_STACK, KbqToastData, KbqToastStyle } from './toast.type';\n\n@Directive({\n selector: '[kbq-toast-close-button]',\n host: {\n class: 'kbq-toast__close-button'\n }\n})\nexport class KbqToastCloseButton {}\n\nlet id = 0;\n\n/** Glyph rendered by the built-in icon of every style. A style outside the map renders no default icon. */\nconst defaultIcons: { [style: string]: string | undefined } = {\n [KbqToastStyle.Contrast]: 'kbq-circle-info_16',\n [KbqToastStyle.Success]: 'kbq-circle-check_16',\n [KbqToastStyle.Warning]: 'kbq-triangle-exclamation_16',\n [KbqToastStyle.Error]: 'kbq-triangle-exclamation_16'\n};\n\n/** Styles whose message interrupts the user instead of waiting for the next graceful moment. */\nconst assertiveStyles: string[] = [KbqToastStyle.Warning, KbqToastStyle.Error];\n\n@Component({\n selector: 'kbq-toast',\n imports: [\n NgTemplateOutlet,\n KbqIconModule,\n KbqTitleModule,\n KbqToastCloseButton\n ],\n templateUrl: './toast.component.html',\n styleUrls: ['./toast.component.scss', './toast-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-toast',\n '[class]': 'styleClass',\n '[class.kbq-toast_dismissible]': 'closeButton',\n // A toast is inserted into an already rendered page, so the toast itself has to be the live region:\n // screen readers announce a node inserted with `role=\"alert\"`/`role=\"status\"`, while an `aria-live`\n // wrapper has to be in the accessibility tree before its content changes.\n '[attr.role]': 'role',\n 'aria-atomic': 'true',\n '[class.kbq-toast_leaving]': 'leavingHeight() !== null',\n '[style.--kbq-toast-leaving-height.px]': 'leavingHeight()',\n '[class.kbq-animations-disabled]': 'animationsDisabled',\n '(mouseenter)': 'setHovered(true)',\n '(mouseleave)': 'setHovered(false)',\n '(keydown.esc)': 'close()'\n },\n hostDirectives: [KbqReadStateDirective]\n})\nexport class KbqToastComponent implements OnDestroy {\n readonly data = inject(KbqToastData);\n\n private readonly stack = inject(KBQ_TOAST_STACK);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly injector = inject(Injector);\n\n protected readonly readStateDirective = inject(KbqReadStateDirective, { host: true });\n protected readonly a11yLocaleConfiguration = kbqInjectA11yLocaleConfiguration();\n\n /** Whether the toast appears and leaves without motion. */\n protected readonly animationsDisabled = kbqAnimationsDisabled();\n\n /** Height the exit animation collapses from, set once the toast leaves. */\n protected readonly leavingHeight = signal<number | null>(null);\n\n private readonly _hovered = signal(false);\n private readonly _focused = signal(false);\n\n /** Whether the pointer is over the toast. */\n readonly hovered: Signal<boolean> = this._hovered.asReadonly();\n\n /** Whether the toast or an element inside it holds the focus. */\n readonly focused: Signal<boolean> = this._focused.asReadonly();\n\n id = id++;\n\n /** Context of the templates a consumer passes through `KbqToastData`. */\n readonly $implicit: this = this;\n\n // The injected data belongs to the caller, so every default lives here instead of being written back into it.\n protected readonly style = this.data.style || KbqToastStyle.Contrast;\n protected readonly styleClass = `kbq-toast_${this.style}`;\n protected readonly role = assertiveStyles.includes(this.style) ? 'alert' : 'status';\n protected readonly closeButton = this.data.closeButton !== undefined ? this.data.closeButton : true;\n protected readonly icon = this.data.icon !== undefined ? this.data.icon : true;\n protected readonly defaultIcon: string | null = defaultIcons[this.style] ?? null;\n\n // The slot templates are fixed once the toast is created, so they are resolved once instead of on every\n // change detection cycle.\n protected readonly iconTemplate = this.asTemplateRef(this.icon);\n protected readonly titleTemplate = this.asTemplateRef(this.data.title);\n protected readonly captionTemplate = this.asTemplateRef(this.data.caption);\n protected readonly contentTemplate = this.asTemplateRef(this.data.content);\n protected readonly actionsTemplate = this.asTemplateRef(this.data.actions);\n protected readonly closeButtonTemplate = this.asTemplateRef(this.closeButton);\n\n private alreadyRead = false;\n\n // TODO: nothing in the library uses it; kept as public API at the DS-2196 review. Document or deprecate it.\n get isFocusedOrHovered(): boolean {\n return this.hovered() || this.focused();\n }\n\n constructor() {\n this.runFocusMonitor(inject(DestroyRef));\n\n // `read` is a `BehaviorSubject` re-emitted by every hover long enough to count as read, while a toast\n // is read exactly once.\n this.readStateDirective.read\n .pipe(filter(Boolean), take(1), takeUntilDestroyed())\n .subscribe(() => this.markAsRead());\n }\n\n ngOnDestroy() {\n this.stopFocusMonitor();\n\n this.stack.setHovered(this.id, false);\n this.stack.setFocused(this.id, null);\n }\n\n close(): void {\n this.markAsRead();\n this.stack.hide(this.id);\n }\n\n /**\n * Plays the exit animation of a toast taken off the stack, then calls `done`.\n *\n * @docs-private\n */\n leave(done: () => void): void {\n const element = this.elementRef.nativeElement;\n const destroyRef = this.injector.get(DestroyRef);\n\n // `auto` does not animate, so the collapse starts from the measured height.\n this.leavingHeight.set(element.offsetHeight);\n\n // Raising the stack without `moveBefore()` takes it out of the DOM, which cancels the exit animation and\n // starts it over: the one that runs then is waited for as well.\n const afterExit = (awaited: Animation[]): void => {\n const running = (element.getAnimations?.() ?? []).filter(\n (animation) =>\n animation.playState === 'running' &&\n !awaited.includes(animation) &&\n animation.effect?.getComputedTiming().endTime !== Infinity\n );\n\n if (!running.length) return done();\n\n Promise.allSettled(running.map(({ finished }) => finished)).then(() => {\n if (!destroyRef.destroyed) afterExit(running);\n });\n };\n\n kbqAfterAnimations(\n () => element,\n () => afterExit([]),\n this.injector\n );\n }\n\n /** @docs-private */\n protected setHovered(hovered: boolean): void {\n this._hovered.set(hovered);\n this.stack.setHovered(this.id, hovered);\n }\n\n private markAsRead(): void {\n if (this.alreadyRead) {\n return;\n }\n\n this.alreadyRead = true;\n this.stack.read.next(this.data);\n }\n\n private asTemplateRef(value: unknown): TemplateRef<{ $implicit: KbqToastComponent }> | null {\n return value instanceof TemplateRef ? value : null;\n }\n\n private runFocusMonitor(destroyRef: DestroyRef) {\n this.focusMonitor\n .monitor(this.elementRef.nativeElement, true)\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe((origin: FocusOrigin) => {\n this._focused.set(!!origin);\n this.stack.setFocused(this.id, origin);\n });\n }\n\n private stopFocusMonitor() {\n this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);\n }\n}\n","@if (icon) {\n <div class=\"kbq-toast__icon-container\">\n @if (iconTemplate) {\n <ng-container [ngTemplateOutlet]=\"iconTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else if (defaultIcon) {\n <i\n class=\"kbq-toast__icon\"\n aria-hidden=\"true\"\n [kbq-icon]=\"defaultIcon\"\n [color]=\"style\"\n [class]=\"data.iconClass\"\n ></i>\n }\n </div>\n}\n\n<div class=\"kbq-toast__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-toast__title\"\n [class.kbq-toast__title_only-text]=\"!titleTemplate\"\n [class.kbq-toast__title_with-content]=\"data.caption || data.content\"\n >\n @if (titleTemplate) {\n <ng-container [ngTemplateOutlet]=\"titleTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <p>{{ data.title }}</p>\n }\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-toast__text]=\"data.title\"\n [class.kbq-toast__text_only-text]=\"!captionTemplate\"\n [class.kbq-toast__title]=\"!data.title\"\n >\n @if (captionTemplate) {\n <ng-container [ngTemplateOutlet]=\"captionTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.caption }}}\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-toast__content\" [class.kbq-toast__content_only-text]=\"!contentTemplate\">\n @if (contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"contentTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.content }}}\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-toast__actions\">\n @if (actionsTemplate) {\n <ng-container [ngTemplateOutlet]=\"actionsTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n@if (closeButton) {\n <div>\n @if (closeButtonTemplate) {\n <ng-container [ngTemplateOutlet]=\"closeButtonTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <button\n type=\"button\"\n kbq-icon-button=\"kbq-xmark-s_16\"\n kbq-toast-close-button\n [attr.aria-label]=\"a11yLocaleConfiguration().close\"\n (click)=\"close()\"\n ></button>\n }\n </div>\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { GlobalPositionStrategy, Overlay, OverlayContainer, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ComponentRef,\n EmbeddedViewRef,\n Injectable,\n InjectionToken,\n Injector,\n NgZone,\n OnDestroy,\n Signal,\n TemplateRef,\n Type,\n inject,\n signal,\n untracked\n} from '@angular/core';\nimport {\n BehaviorSubject,\n EMPTY,\n Observable,\n Subscription,\n distinctUntilChanged,\n filter,\n map,\n share,\n switchMap,\n timer\n} from 'rxjs';\nimport { KbqToastContainerComponent } from './toast-container.component';\nimport { KbqToastComponent } from './toast.component';\nimport {\n KBQ_TOAST_CONFIG,\n KBQ_TOAST_STACK,\n KbqToastData,\n KbqToastPosition,\n KbqToastStack,\n KbqToastTemplateContext\n} from './toast.type';\n\nexport const KBQ_TOAST_FACTORY = new InjectionToken('KBQ_TOAST_FACTORY', {\n factory: () => KbqToastComponent\n});\n\nconst CHECK_INTERVAL = 500;\n\nlet templateId = 0;\n\n/** `ParentNode.moveBefore()`, which TypeScript does not declare yet. */\ntype StatePreservingParent = ParentNode & { moveBefore?(node: Node, child: Node | null): void };\n\n/** Where a CSS animation in a subtree had got to. */\ntype AnimationProgress = { target: Element | null; name: string; time: CSSNumberish | null };\n\nconst cssAnimationsIn = (element: Element): CSSAnimation[] =>\n (element.getAnimations?.({ subtree: true }) ?? []).filter(\n (animation): animation is CSSAnimation => 'animationName' in animation\n );\n\nconst targetOf = (animation: Animation): Element | null => (animation.effect as KeyframeEffect | null)?.target ?? null;\n\n/**\n * Moves `node` right after `reference` without starting the CSS animations inside it over, as taking a node out of\n * the DOM and putting it back does: the exit animation of a leaving toast would be cancelled, and every visible toast\n * would slide in again. `moveBefore()` keeps them running; where it is missing, each restarted animation is set back\n * to the time it had reached, and one that had ended is ended again.\n */\nconst moveAfter = (node: Element, reference: ChildNode): void => {\n const parent = reference.parentNode as StatePreservingParent | null;\n\n if (parent?.moveBefore) {\n parent.moveBefore(node, reference.nextSibling);\n\n return;\n }\n\n const progress: AnimationProgress[] = cssAnimationsIn(node).map((animation) => ({\n target: targetOf(animation),\n name: animation.animationName,\n time: animation.currentTime\n }));\n\n reference.after(node);\n\n for (const animation of cssAnimationsIn(node)) {\n const reached = progress.find(\n ({ target, name }) => target === targetOf(animation) && name === animation.animationName\n );\n\n if (reached) {\n if (reached.time !== null) animation.currentTime = reached.time;\n } else if (animation.effect?.getComputedTiming().endTime !== Infinity) {\n animation.finish();\n }\n }\n};\n\ntype KbqToastRecord<T> = {\n readonly componentRef: ComponentRef<T>;\n /** Remaining lifetime in ms. `0` keeps the toast on screen until it is hidden explicitly. */\n ttl: number;\n /** Element that held the focus when the toast appeared, so that focus can be handed back to it. */\n readonly previouslyFocused: HTMLElement | null;\n};\n\ntype KbqToastTemplateRecord = {\n readonly viewRef: EmbeddedViewRef<KbqToastTemplateContext>;\n /** Remaining lifetime in ms. `0` keeps the template on screen until it is hidden explicitly. */\n ttl: number;\n};\n\n/** Generic `T` is a type hint only; the runtime component comes from `KBQ_TOAST_FACTORY`. */\n@Injectable({ providedIn: 'root' })\nexport class KbqToastService<T extends KbqToastComponent = KbqToastComponent> implements OnDestroy, KbqToastStack {\n private readonly overlay = inject(Overlay);\n private readonly injector = inject(Injector);\n private readonly overlayContainer = inject(OverlayContainer);\n private readonly ngZone = inject(NgZone);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly document = inject(DOCUMENT);\n private readonly toastFactory = inject(KBQ_TOAST_FACTORY);\n private readonly toastConfig = inject(KBQ_TOAST_CONFIG);\n\n get toasts(): ComponentRef<T>[] {\n return Object.values(this.toastsDict)\n .map(({ componentRef }) => componentRef)\n .filter((componentRef) => !componentRef.hostView.destroyed);\n }\n\n get templates(): EmbeddedViewRef<KbqToastTemplateContext>[] {\n return Object.values(this.templatesDict)\n .map(({ viewRef }) => viewRef)\n .filter((viewRef) => !viewRef.destroyed);\n }\n\n readonly read = new BehaviorSubject<KbqToastData | null>(null);\n\n private readonly _hovered = signal(false);\n private readonly _focused = signal(false);\n\n /** Whether at least one toast is hovered. */\n readonly hovered: Signal<boolean> = this._hovered.asReadonly();\n\n /** Whether at least one toast holds the focus. */\n readonly focused: Signal<boolean> = this._focused.asReadonly();\n\n private readonly stackSize = new BehaviorSubject<number>(0);\n\n /** Subscribed outside Angular so that a tick never runs change detection over the whole application. */\n private readonly heartbeat = new Observable<number>((subscriber) =>\n this.ngZone.runOutsideAngular(() => timer(CHECK_INTERVAL, CHECK_INTERVAL).subscribe(subscriber))\n );\n\n /**\n * Countdown heartbeat: emits every 500 ms while the stack holds something and is not paused by the pointer\n * or the keyboard focus. No interval runs while the stack is empty.\n */\n readonly timer: Observable<number> = this.stackSize.pipe(\n map((size) => size > 0),\n distinctUntilChanged(),\n switchMap((filled) => (filled ? this.heartbeat : EMPTY)),\n filter(() => !this.isPaused),\n share()\n );\n\n private containerInstance?: KbqToastContainerComponent;\n private overlayRef?: OverlayRef;\n private portal?: ComponentPortal<KbqToastContainerComponent>;\n private timerSubscription: Subscription;\n private currentPosition?: KbqToastPosition;\n\n /** Toasts taken off the stack that still play their exit animation in the container. */\n private readonly leaving = new Set<ComponentRef<T>>();\n\n private toastsDict: { [id: number]: KbqToastRecord<T> } = {};\n private templatesDict: { [id: number]: KbqToastTemplateRecord } = {};\n\n private readonly hoveredToasts = new Set<number>();\n private readonly focusedToasts = new Map<number, FocusOrigin>();\n private wasPaused = false;\n\n private get isPaused(): boolean {\n return this.hoveredToasts.size > 0 || this.focusedToasts.size > 0;\n }\n\n constructor() {\n this.ngZone.runOutsideAngular(() => {\n this.timerSubscription = this.timer.subscribe(this.processToasts);\n });\n }\n\n ngOnDestroy(): void {\n this.timerSubscription.unsubscribe();\n this.overlayRef?.dispose();\n this.overlayRef = undefined;\n this.containerInstance = undefined;\n this.portal = undefined;\n this.currentPosition = undefined;\n this.toastsDict = {};\n this.templatesDict = {};\n this.hoveredToasts.clear();\n this.focusedToasts.clear();\n this.stackSize.next(0);\n }\n\n show(\n data: KbqToastData,\n duration: number = this.toastConfig.duration,\n onTop: boolean = this.toastConfig.onTop\n ): { ref: ComponentRef<T>; id: number } {\n // Untracked, as `showTemplate()`, `hide()` and `hideTemplate()`: called from a consumer's `effect()`, the signals\n // read on the way — the container's view query, those the focus listeners read when the focus moves on to the\n // next toast — would become dependencies of the effect.\n return untracked(() => this.addToast(data, duration, onTop));\n }\n\n /** Body of `show()`. */\n private addToast(data: KbqToastData, duration: number, onTop: boolean): { ref: ComponentRef<T>; id: number } {\n const previouslyFocused = this.document.activeElement as HTMLElement | null;\n const container = this.prepareContainer();\n // The class generic is a hint: the runtime component is whatever `KBQ_TOAST_FACTORY` resolves to.\n const componentRef = container.createToast<T>(data, this.toastFactory as Type<T>, onTop);\n const id = componentRef.instance.id;\n\n if (typeof id !== 'number') {\n // The component is already rendered by now, and it never reaches the stack, so nothing else\n // would ever tear it down: every retry would strand one more element inside the overlay.\n // Detaching the view drops it from the container but leaves its host element connected, so\n // the element has to be taken out by hand as well.\n container.remove(componentRef.hostView);\n (componentRef.location.nativeElement as HTMLElement).remove();\n this.detachOverlay();\n\n throw new Error('KBQ_TOAST_FACTORY must provide a component extending KbqToastComponent: `id` is missing.');\n }\n\n this.toastsDict[id] = { componentRef, ttl: duration, previouslyFocused };\n this.syncStackSize();\n\n return { ref: componentRef, id };\n }\n\n showTemplate(\n data: KbqToastData,\n template: TemplateRef<any>,\n duration: number = this.toastConfig.duration,\n onTop: boolean = this.toastConfig.onTop\n ): { ref: EmbeddedViewRef<KbqToastTemplateContext>; id: number } {\n return untracked(() => this.addTemplate(data, template, duration, onTop));\n }\n\n /** Body of `showTemplate()`. */\n private addTemplate(\n data: KbqToastData,\n template: TemplateRef<any>,\n duration: number,\n onTop: boolean\n ): { ref: EmbeddedViewRef<KbqToastTemplateContext>; id: number } {\n const container = this.prepareContainer();\n const viewRef = container.createTemplate(data, template, onTop);\n const id = templateId++;\n\n this.templatesDict[id] = { viewRef, ttl: duration };\n this.syncStackSize();\n\n return { ref: viewRef, id };\n }\n\n hide(id: number) {\n untracked(() => this.removeToast(id));\n }\n\n /** Body of `hide()`. */\n private removeToast(id: number): void {\n const record = this.toastsDict[id];\n\n if (!record) {\n return;\n }\n\n // Removing the view destroys the toast, which releases its own pause state, so the focus origin has to\n // be read before that happens.\n const focusOrigin = this.focusedToasts.get(id);\n\n this.removeAfterExit(record.componentRef);\n\n delete this.toastsDict[id];\n\n this.setHovered(id, false);\n this.setFocused(id, null);\n\n // Only a keyboard or a programmatic focus is handed on. A mouse press on the close button focuses it\n // as a side effect of the click, and moving that focus into the next toast would report the survivor\n // as focused — pausing the whole stack until something blurs it, which a pointer leaving never does.\n if (focusOrigin === 'keyboard' || focusOrigin === 'program') {\n this.restoreFocus(record.previouslyFocused, focusOrigin);\n }\n\n this.renewLifetimes();\n this.syncStackSize();\n }\n\n hideTemplate(id: number) {\n untracked(() => this.removeTemplate(id));\n }\n\n /** Body of `hideTemplate()`. */\n private removeTemplate(id: number): void {\n const record = this.templatesDict[id];\n\n if (!record) {\n return;\n }\n\n this.containerInstance?.remove(record.viewRef);\n\n delete this.templatesDict[id];\n\n this.renewLifetimes();\n this.syncStackSize();\n this.detachOverlay();\n }\n\n /** Reports that the pointer entered or left the toast with the given id. @docs-private */\n setHovered(id: number, hovered: boolean): void {\n if (hovered === this.hoveredToasts.has(id)) {\n return;\n }\n\n if (hovered) {\n this.hoveredToasts.add(id);\n } else {\n this.hoveredToasts.delete(id);\n }\n\n this.updatePauseState();\n }\n\n /** Reports the origin the toast with the given id is focused with, or `null` once it is not. @docs-private */\n setFocused(id: number, origin: FocusOrigin): void {\n if ((this.focusedToasts.get(id) ?? null) === origin) {\n return;\n }\n\n if (origin) {\n this.focusedToasts.set(id, origin);\n } else {\n this.focusedToasts.delete(id);\n }\n\n this.updatePauseState();\n }\n\n private updatePauseState(): void {\n const paused = this.isPaused;\n\n // Entering the paused state renews the countdown, so that nothing disappears the instant the pointer or\n // the focus leaves the stack.\n if (paused && !this.wasPaused) {\n this.renewLifetimes();\n }\n\n this.wasPaused = paused;\n\n this._hovered.set(this.hoveredToasts.size > 0);\n this._focused.set(this.focusedToasts.size > 0);\n }\n\n /** Focus must not fall back to the document body when the toast holding it goes away. */\n private restoreFocus(previouslyFocused: HTMLElement | null, origin: FocusOrigin): void {\n const target = this.getNextFocusTarget() || previouslyFocused;\n\n if (!target?.isConnected) {\n return;\n }\n\n // `focusVia` keeps the focus ring of a keyboard user, which a native `focus()` would drop.\n this.focusMonitor.focusVia(target, origin || 'program');\n }\n\n private getNextFocusTarget(): HTMLElement | null {\n // Stack order, not `toastsDict` order. The dictionary is keyed by id, so `toasts` always reads\n // oldest-first, while `onTop` inserts a new toast at the top of the stack — following the dictionary\n // there would carry the focus past every toast between the one that closed and the oldest on screen.\n const inStackOrder = this.toasts\n .map(({ location }) => location.nativeElement as HTMLElement)\n .sort((a, b) => (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1));\n\n for (const host of inStackOrder) {\n const closeButton = host.querySelector<HTMLElement>('[kbq-toast-close-button]');\n\n if (closeButton) {\n return closeButton;\n }\n }\n\n return null;\n }\n\n /** Plays the exit animation of a toast taken off the stack, then removes it from the container. */\n private removeAfterExit(componentRef: ComponentRef<T>): void {\n // Destroyed by whoever held the ref: there is nothing left to animate.\n if (componentRef.hostView.destroyed) {\n this.detachOverlay();\n\n return;\n }\n\n this.leaving.add(componentRef);\n // Also destroyed before its exit ends, by whoever holds the ref or with the overlay, which a destroyed\n // view never reports back from.\n componentRef.onDestroy(() => {\n this.leaving.delete(componentRef);\n this.detachOverlay();\n });\n\n componentRef.instance.leave(() => this.containerInstance?.remove(componentRef.hostView));\n }\n\n /** Detaching destroys the container, so it waits for the stack to empty and the last exit to end. */\n private detachOverlay(): void {\n if (this.toasts.length !== 0 || this.templates.length !== 0 || this.leaving.size !== 0) {\n return;\n }\n\n this.overlayRef?.detach();\n }\n\n private syncStackSize(): void {\n this.stackSize.next(this.toasts.length + this.templates.length);\n }\n\n /**\n * Drops the records whose view was destroyed from outside the service — by a consumer holding the ref,\n * or by whatever owns the surrounding view. Nothing else deletes them: a record with a `ttl` of `0` is\n * skipped by the countdown forever, so the stack would keep reporting a size and the heartbeat would\n * keep running with nothing on screen.\n */\n private purgeDestroyed(): void {\n let purged = false;\n\n for (const [id, { componentRef }] of Object.entries(this.toastsDict)) {\n if (!componentRef.hostView.destroyed) {\n continue;\n }\n\n delete this.toastsDict[+id];\n this.setHovered(+id, false);\n this.setFocused(+id, null);\n purged = true;\n }\n\n for (const [id, { viewRef }] of Object.entries(this.templatesDict)) {\n if (!viewRef.destroyed) {\n continue;\n }\n\n delete this.templatesDict[+id];\n purged = true;\n }\n\n if (!purged) {\n return;\n }\n\n this.syncStackSize();\n this.detachOverlay();\n }\n\n private processToasts = () => {\n this.purgeDestroyed();\n\n for (const [id, record] of Object.entries(this.toastsDict)) {\n if (record.ttl <= 0) {\n continue;\n }\n\n record.ttl -= CHECK_INTERVAL;\n\n if (record.ttl <= 0) {\n this.ngZone.run(() => this.hide(+id));\n\n return;\n }\n }\n\n for (const [id, record] of Object.entries(this.templatesDict)) {\n if (record.ttl <= 0) {\n continue;\n }\n\n record.ttl -= CHECK_INTERVAL;\n\n if (record.ttl <= 0) {\n this.ngZone.run(() => this.hideTemplate(+id));\n\n return;\n }\n }\n };\n\n /** Keeps every survivor on screen for at least the configured delay after a dismissal or a pause. */\n private renewLifetimes() {\n const records = [...Object.values(this.toastsDict), ...Object.values(this.templatesDict)];\n\n for (const record of records) {\n if (record.ttl > 0) {\n record.ttl = Math.max(record.ttl, this.toastConfig.delay);\n }\n }\n }\n\n private prepareContainer(): KbqToastContainerComponent {\n const overlayRef = this.createOverlay();\n const portal = this.portal || new ComponentPortal(KbqToastContainerComponent, null, this.createStackInjector());\n\n this.portal = portal;\n\n if (!overlayRef.hasAttached()) {\n this.containerInstance = overlayRef.attach(portal).instance;\n this.containerInstance\n .getElementRef()\n .nativeElement.classList.add(`kbq-toast-container-${this.toastConfig.position}`);\n }\n\n this.toTop(overlayRef);\n\n return this.containerInstance!;\n }\n\n /** Every toast resolves its stack through the container, so that it never depends on this service. */\n private createStackInjector(): Injector {\n return Injector.create({\n providers: [{ provide: KBQ_TOAST_STACK, useValue: this }],\n parent: this.injector\n });\n }\n\n /** Raises the stack above the overlays opened after it. */\n private toTop(overlayRef: OverlayRef) {\n const host = overlayRef.hostElement;\n const overlays = this.overlayContainer.getContainerElement().childNodes;\n const last = overlays[overlays.length - 1];\n\n // The identity check matters: `x.after(x)` is not a no-op. `after()` resolves no viable next\n // sibling for a node that is already last and falls through to `insertBefore(x, null)`, whose\n // insert steps take `x` out of its parent first — a real detach and re-attach of the wrapper\n // holding every live toast, on every `show()`.\n if (overlays.length < 2 || last === host) {\n return;\n }\n\n // A popover host is in the top layer, painted in the order the popovers were shown in, not in DOM\n // order. Taking it out of the DOM hides the popover, which drops the stack beneath every overlay\n // there, so it is shown again instead. Its place in the DOM stays, so it is raised again on every\n // `show()` while that overlay is open.\n if (overlayRef.getConfig().usePopover && host.matches(':popover-open')) {\n host.hidePopover();\n host.showPopover();\n\n return;\n }\n\n moveAfter(host, last);\n }\n\n private createOverlay(): OverlayRef {\n const expectedPosition = this.toastConfig.position;\n\n if (this.overlayRef && this.currentPosition === expectedPosition) {\n return this.overlayRef;\n }\n\n if (this.overlayRef) {\n // Nothing survives the overlay it lives in, so the stack is drained through the regular paths\n // instead of leaving both dictionaries pointing at destroyed views.\n this.clear();\n\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n this.containerInstance = undefined;\n this.portal = undefined;\n }\n\n const positionStrategy = this.getPositionStrategy(expectedPosition);\n const overlayRef = this.overlay.create({ positionStrategy });\n\n overlayRef.hostElement.classList.add('kbq-toast-overlay');\n\n this.overlayRef = overlayRef;\n this.currentPosition = expectedPosition;\n\n return overlayRef;\n }\n\n private clear(): void {\n Object.keys(this.toastsDict).forEach((id) => this.hide(+id));\n Object.keys(this.templatesDict).forEach((id) => this.hideTemplate(+id));\n }\n\n private getPositionStrategy(position?: KbqToastPosition): GlobalPositionStrategy {\n switch (position) {\n case KbqToastPosition.CENTER:\n return this.getCenter();\n case KbqToastPosition.BOTTOM_CENTER:\n return this.getBottomCenter();\n case KbqToastPosition.BOTTOM_LEFT:\n return this.getBottomLeft();\n case KbqToastPosition.BOTTOM_RIGHT:\n return this.getBottomRight();\n case KbqToastPosition.TOP_CENTER:\n return this.getTopCenter();\n case KbqToastPosition.TOP_LEFT:\n return this.getTopLeft();\n case KbqToastPosition.TOP_RIGHT:\n return this.getTopRight();\n default:\n return this.getTopCenter();\n }\n }\n\n private getTopCenter(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition().top(`${this.toastConfig.indent.vertical}px`).centerHorizontally();\n }\n\n private getTopLeft(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .top(`${this.toastConfig.indent.vertical}px`)\n .left(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getTopRight(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .top(`${this.toastConfig.indent.vertical}px`)\n .right(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getBottomCenter(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition().bottom(`${this.toastConfig.indent.vertical}px`).centerHorizontally();\n }\n\n private getBottomLeft(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .bottom(`${this.toastConfig.indent.vertical}px`)\n .left(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getBottomRight(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .bottom(`${this.toastConfig.indent.vertical}px`)\n .right(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getCenter(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition().centerVertically().centerHorizontally();\n }\n\n private getGlobalOverlayPosition(): GlobalPositionStrategy {\n return this.overlay.position().global();\n }\n}\n","import { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { CdkScrollable, FlexibleConnectedPositionStrategy, OverlayKeyboardDispatcher } from '@angular/cdk/overlay';\nimport {\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n EmbeddedViewRef,\n Injector,\n TemplateRef,\n Type,\n ViewContainerRef,\n ViewEncapsulation,\n ViewRef,\n forwardRef,\n inject,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { kbqInjectA11yLocaleConfiguration } from '@koobiq/components/core';\nimport { KbqToastService } from './toast.service';\nimport { KBQ_TOAST_STACK, KbqToastData, KbqToastTemplateContext } from './toast.type';\n\n@Component({\n selector: 'kbq-toast-container',\n template: '<ng-container #container />',\n styleUrls: ['./toast-container.component.scss'],\n // A container written into a consumer's template has no stack above it — `KbqToastService` provides\n // itself only for the container it creates — so `createToast()` would leave the toast without one.\n // `forwardRef` because the service imports this file back.\n providers: [{ provide: KBQ_TOAST_STACK, useExisting: forwardRef(() => KbqToastService) }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-toast-container',\n role: 'region',\n '[attr.aria-label]': 'a11yLocaleConfiguration().toastRegion'\n }\n})\nexport class KbqToastContainerComponent extends CdkScrollable {\n private readonly injector = inject(Injector);\n\n protected readonly a11yLocaleConfiguration = kbqInjectA11yLocaleConfiguration();\n\n readonly service = inject(KbqToastService);\n\n readonly viewContainer = viewChild.required('container', { read: ViewContainerRef });\n\n private readonly overlayKeyboardDispatcher = inject(OverlayKeyboardDispatcher);\n\n constructor() {\n super();\n\n // Toasts are ordinary flow children, so removing one slides the rest for as long as its height animates,\n // and an overlay opened from inside a toast is left behind its trigger: CDK re-measures the origin only on\n // a scroll or a viewport resize. The container's box tracks the reflow exactly. It is not reported as a\n // scroll: `ScrollDispatcher` is global, and every close-on-scroll overlay of the app would close.\n inject(SharedResizeObserver)\n .observe(this.elementRef.nativeElement)\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.repositionConnectedOverlays());\n }\n\n createToast<C>(data: KbqToastData, componentType: Type<C>, onTop: boolean): ComponentRef<C> {\n const injector = this.getInjector(data);\n const index = onTop ? 0 : undefined;\n\n return this.viewContainer().createComponent(componentType, { injector, index });\n }\n\n createTemplate(\n data: KbqToastData,\n template: TemplateRef<any>,\n onTop: boolean\n ): EmbeddedViewRef<KbqToastTemplateContext> {\n const index = onTop ? 0 : undefined;\n const viewRef = this.viewContainer().createEmbeddedView<KbqToastTemplateContext>(\n template,\n { $implicit: data },\n index\n );\n\n this.markAsLiveRegion(viewRef);\n\n return viewRef;\n }\n\n remove(viewRef: ViewRef) {\n const index = this.viewContainer().indexOf(viewRef);\n\n if (index < 0) {\n return;\n }\n\n this.viewContainer().remove(index);\n }\n\n getInjector(data: KbqToastData): Injector {\n return Injector.create({\n providers: [{ provide: KbqToastData, useValue: data }],\n parent: this.injector\n });\n }\n\n /**\n * Re-applies the position of every overlay anchored to an element; one whose origin has not moved stays where it\n * is. CDK keeps no public registry of attached overlays, but its keyboard dispatcher tracks each of them.\n */\n private repositionConnectedOverlays(): void {\n // A copy: a `positionChanges` handler may detach an overlay, which splices the list being iterated.\n for (const overlayRef of this.overlayKeyboardDispatcher._attachedOverlays.slice()) {\n if (overlayRef.getConfig().positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n overlayRef.updatePosition();\n }\n }\n }\n\n /**\n * A template toast has no component host of its own, so its first element becomes the live region — screen\n * readers announce a node inserted with `role=\"status\"`. A template declaring its own role is left alone,\n * and one whose root is a bare text node cannot carry the attribute at all — it needs an element around it.\n */\n private markAsLiveRegion(viewRef: EmbeddedViewRef<KbqToastTemplateContext>): void {\n const root = viewRef.rootNodes.find((node) => node?.nodeType === Node.ELEMENT_NODE) as HTMLElement | undefined;\n\n if (!root || root.hasAttribute('role')) {\n return;\n }\n\n root.setAttribute('role', 'status');\n root.setAttribute('aria-atomic', 'true');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqToastContainerComponent } from './toast-container.component';\nimport { KbqToastCloseButton, KbqToastComponent } from './toast.component';\n\nconst COMPONENTS = [\n KbqToastComponent,\n KbqToastCloseButton,\n KbqToastContainerComponent\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqToastModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["filter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"koobiq-components-toast.mjs","sources":["../../../packages/components/toast/toast.type.ts","../../../packages/components/toast/toast.component.ts","../../../packages/components/toast/toast.component.html","../../../packages/components/toast/toast.service.ts","../../../packages/components/toast/toast-container.component.ts","../../../packages/components/toast/toast.module.ts","../../../packages/components/toast/koobiq-components-toast.ts"],"sourcesContent":["import { FocusOrigin } from '@angular/cdk/a11y';\nimport { InjectionToken, Provider, TemplateRef } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport enum KbqToastStyle {\n Contrast = 'contrast',\n Success = 'success',\n Warning = 'warning',\n Error = 'error'\n}\n\nexport enum KbqToastPosition {\n TOP_RIGHT = 'top-right',\n TOP_LEFT = 'top-left',\n TOP_CENTER = 'top-center',\n BOTTOM_RIGHT = 'bottom-right',\n BOTTOM_LEFT = 'bottom-left',\n BOTTOM_CENTER = 'bottom-center',\n CENTER = 'center'\n}\n\nexport class KbqToastData {\n id?: string;\n title?: string | TemplateRef<any>;\n /** Visual style of the toast. Styles outside `KbqToastStyle` render without a default icon. */\n style?: KbqToastStyle | (string & {});\n\n icon?: TemplateRef<any> | boolean;\n iconClass?: string;\n caption?: string | TemplateRef<any>;\n\n content?: string | TemplateRef<any>;\n actions?: TemplateRef<any>;\n\n closeButton?: TemplateRef<any> | boolean;\n}\n\n/**\n * Context of a template rendered by `KbqToastService.showTemplate`.\n *\n * Note that it differs from the context of the slot templates passed through `KbqToastData` (title, caption,\n * content, actions, icon and close button), whose `$implicit` is the `KbqToastComponent` instance.\n */\nexport type KbqToastTemplateContext = {\n $implicit: KbqToastData;\n};\n\n/**\n * Narrow contract that a toast consumes from the service owning its stack.\n *\n * `KbqToastService` implements it and provides itself under `KBQ_TOAST_STACK` for every toast it creates, so\n * that a toast never has to depend on the concrete service that instantiates it.\n */\nexport interface KbqToastStack {\n /** Emits the data of a toast once the user has read it. */\n readonly read: Subject<KbqToastData | null>;\n /** Removes the toast with the given id from the stack. */\n hide(id: number): void;\n\n /** Reports that the pointer entered or left the toast with the given id. */\n setHovered(id: number, hovered: boolean): void;\n\n /** Reports the origin the toast with the given id is focused with, or `null` once it loses focus. */\n setFocused(id: number, origin: FocusOrigin): void;\n}\n\n/** Stack a toast belongs to. Provided by `KbqToastService` for every toast it creates. */\nexport const KBQ_TOAST_STACK = new InjectionToken<KbqToastStack>('KBQ_TOAST_STACK');\n\nexport interface KbqToastConfig {\n position: KbqToastPosition;\n duration: number;\n delay: number;\n onTop: boolean;\n /** Custom indentation for positioning the toast stack overlay when using `GlobalPositionStrategy` */\n indent: {\n /** Vertical spacing from the top or bottom of the screen. */\n vertical: number;\n\n /** Horizontal spacing from the left or right of the screen. */\n horizontal: number;\n };\n}\n\n/** Frozen so that the fallback every application shares cannot be reconfigured from a single consumer. */\nexport const defaultToastConfig: KbqToastConfig = Object.freeze({\n position: KbqToastPosition.TOP_RIGHT,\n duration: 5000,\n delay: 2000,\n onTop: false,\n indent: Object.freeze({\n vertical: 0,\n horizontal: 0\n })\n});\n\nexport const KBQ_TOAST_CONFIG = new InjectionToken<KbqToastConfig>('kbq-toast-config', {\n factory: () => defaultToastConfig\n});\n\n/** Utility provider for `KBQ_TOAST_CONFIG`. */\nexport const kbqToastConfigurationProvider = (configuration: Partial<KbqToastConfig>): Provider => ({\n provide: KBQ_TOAST_CONFIG,\n useValue: {\n ...defaultToastConfig,\n ...configuration,\n // `indent` is merged on its own: a shallow spread would alias the default object into every\n // configuration that omits it, so writing to one provider's indent would move the global default.\n indent: { ...defaultToastConfig.indent, ...configuration.indent }\n } satisfies KbqToastConfig\n});\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Directive,\n ElementRef,\n Injector,\n OnDestroy,\n Signal,\n TemplateRef,\n ViewEncapsulation,\n inject,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n KbqReadStateDirective,\n kbqAfterAnimations,\n kbqAnimationsDisabled,\n kbqInjectA11yLocaleConfiguration\n} from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { filter, take } from 'rxjs/operators';\nimport { KBQ_TOAST_STACK, KbqToastData, KbqToastStyle } from './toast.type';\n\n@Directive({\n selector: '[kbq-toast-close-button]',\n host: {\n class: 'kbq-toast__close-button'\n }\n})\nexport class KbqToastCloseButton {}\n\nlet id = 0;\n\n/** Glyph rendered by the built-in icon of every style. A style outside the map renders no default icon. */\nconst defaultIcons: { [style: string]: string | undefined } = {\n [KbqToastStyle.Contrast]: 'kbq-circle-info_16',\n [KbqToastStyle.Success]: 'kbq-circle-check_16',\n [KbqToastStyle.Warning]: 'kbq-triangle-exclamation_16',\n [KbqToastStyle.Error]: 'kbq-triangle-exclamation_16'\n};\n\n/** Styles whose message interrupts the user instead of waiting for the next graceful moment. */\nconst assertiveStyles: string[] = [KbqToastStyle.Warning, KbqToastStyle.Error];\n\n@Component({\n selector: 'kbq-toast',\n imports: [\n NgTemplateOutlet,\n KbqIconModule,\n KbqTitleModule,\n KbqToastCloseButton\n ],\n templateUrl: './toast.component.html',\n styleUrls: ['./toast.component.scss', './toast-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-toast',\n '[class]': 'styleClass',\n '[class.kbq-toast_dismissible]': 'closeButton',\n // A toast is inserted into an already rendered page, so the toast itself has to be the live region:\n // screen readers announce a node inserted with `role=\"alert\"`/`role=\"status\"`, while an `aria-live`\n // wrapper has to be in the accessibility tree before its content changes.\n '[attr.role]': 'role',\n 'aria-atomic': 'true',\n '[class.kbq-toast_leaving]': 'leavingHeight() !== null',\n '[style.--kbq-toast-leaving-height.px]': 'leavingHeight()',\n '[class.kbq-animations-disabled]': 'animationsDisabled',\n '(mouseenter)': 'setHovered(true)',\n '(mouseleave)': 'setHovered(false)',\n '(keydown.esc)': 'close()'\n },\n hostDirectives: [KbqReadStateDirective]\n})\nexport class KbqToastComponent implements OnDestroy {\n readonly data = inject(KbqToastData);\n\n private readonly stack = inject(KBQ_TOAST_STACK);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly injector = inject(Injector);\n\n protected readonly readStateDirective = inject(KbqReadStateDirective, { host: true });\n protected readonly a11yLocaleConfiguration = kbqInjectA11yLocaleConfiguration();\n\n /** Whether the toast appears and leaves without motion. */\n protected readonly animationsDisabled = kbqAnimationsDisabled();\n\n /** Height the exit animation collapses from, set once the toast leaves. */\n protected readonly leavingHeight = signal<number | null>(null);\n\n private readonly _hovered = signal(false);\n private readonly _focused = signal(false);\n\n /** Whether the pointer is over the toast. */\n readonly hovered: Signal<boolean> = this._hovered.asReadonly();\n\n /** Whether the toast or an element inside it holds the focus. */\n readonly focused: Signal<boolean> = this._focused.asReadonly();\n\n id = id++;\n\n /** Context of the templates a consumer passes through `KbqToastData`. */\n readonly $implicit: this = this;\n\n // The injected data belongs to the caller, so every default lives here instead of being written back into it.\n protected readonly style = this.data.style || KbqToastStyle.Contrast;\n protected readonly styleClass = `kbq-toast_${this.style}`;\n protected readonly role = assertiveStyles.includes(this.style) ? 'alert' : 'status';\n protected readonly closeButton = this.data.closeButton !== undefined ? this.data.closeButton : true;\n protected readonly icon = this.data.icon !== undefined ? this.data.icon : true;\n protected readonly defaultIcon: string | null = defaultIcons[this.style] ?? null;\n\n // The slot templates are fixed once the toast is created, so they are resolved once instead of on every\n // change detection cycle.\n protected readonly iconTemplate = this.asTemplateRef(this.icon);\n protected readonly titleTemplate = this.asTemplateRef(this.data.title);\n protected readonly captionTemplate = this.asTemplateRef(this.data.caption);\n protected readonly contentTemplate = this.asTemplateRef(this.data.content);\n protected readonly actionsTemplate = this.asTemplateRef(this.data.actions);\n protected readonly closeButtonTemplate = this.asTemplateRef(this.closeButton);\n\n private alreadyRead = false;\n\n // TODO: nothing in the library uses it; kept as public API at the DS-2196 review. Document or deprecate it.\n get isFocusedOrHovered(): boolean {\n return this.hovered() || this.focused();\n }\n\n constructor() {\n this.runFocusMonitor(inject(DestroyRef));\n\n // `read` is a `BehaviorSubject` re-emitted by every hover long enough to count as read, while a toast\n // is read exactly once.\n this.readStateDirective.read\n .pipe(filter(Boolean), take(1), takeUntilDestroyed())\n .subscribe(() => this.markAsRead());\n }\n\n ngOnDestroy() {\n this.stopFocusMonitor();\n\n this.stack.setHovered(this.id, false);\n this.stack.setFocused(this.id, null);\n }\n\n close(): void {\n this.markAsRead();\n this.stack.hide(this.id);\n }\n\n /**\n * Plays the exit animation of a toast taken off the stack, then calls `done`.\n *\n * @docs-private\n */\n leave(done: () => void): void {\n const element = this.elementRef.nativeElement;\n const destroyRef = this.injector.get(DestroyRef);\n\n // `auto` does not animate, so the collapse starts from the measured height.\n this.leavingHeight.set(element.offsetHeight);\n\n // Raising the stack without `moveBefore()` takes it out of the DOM, which cancels the exit animation and\n // starts it over: the one that runs then is waited for as well.\n const afterExit = (awaited: Animation[]): void => {\n const running = (element.getAnimations?.() ?? []).filter(\n (animation) =>\n animation.playState === 'running' &&\n !awaited.includes(animation) &&\n animation.effect?.getComputedTiming().endTime !== Infinity\n );\n\n if (!running.length) return done();\n\n Promise.allSettled(running.map(({ finished }) => finished)).then(() => {\n if (!destroyRef.destroyed) afterExit(running);\n });\n };\n\n kbqAfterAnimations(\n () => element,\n () => afterExit([]),\n this.injector\n );\n }\n\n /** @docs-private */\n protected setHovered(hovered: boolean): void {\n this._hovered.set(hovered);\n this.stack.setHovered(this.id, hovered);\n }\n\n private markAsRead(): void {\n if (this.alreadyRead) {\n return;\n }\n\n this.alreadyRead = true;\n this.stack.read.next(this.data);\n }\n\n private asTemplateRef(value: unknown): TemplateRef<{ $implicit: KbqToastComponent }> | null {\n return value instanceof TemplateRef ? value : null;\n }\n\n private runFocusMonitor(destroyRef: DestroyRef) {\n this.focusMonitor\n .monitor(this.elementRef.nativeElement, true)\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe((origin: FocusOrigin) => {\n this._focused.set(!!origin);\n this.stack.setFocused(this.id, origin);\n });\n }\n\n private stopFocusMonitor() {\n this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);\n }\n}\n","@if (icon) {\n <div class=\"kbq-toast__icon-container\">\n @if (iconTemplate) {\n <ng-container [ngTemplateOutlet]=\"iconTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else if (defaultIcon) {\n <i\n class=\"kbq-toast__icon\"\n aria-hidden=\"true\"\n [kbq-icon]=\"defaultIcon\"\n [color]=\"style\"\n [class]=\"data.iconClass\"\n ></i>\n }\n </div>\n}\n\n<div class=\"kbq-toast__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-toast__title\"\n [class.kbq-toast__title_only-text]=\"!titleTemplate\"\n [class.kbq-toast__title_with-content]=\"data.caption || data.content\"\n >\n @if (titleTemplate) {\n <ng-container [ngTemplateOutlet]=\"titleTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <p>{{ data.title }}</p>\n }\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-toast__text]=\"data.title\"\n [class.kbq-toast__text_only-text]=\"!captionTemplate\"\n [class.kbq-toast__title]=\"!data.title\"\n >\n @if (captionTemplate) {\n <ng-container [ngTemplateOutlet]=\"captionTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.caption }}}\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-toast__content\" [class.kbq-toast__content_only-text]=\"!contentTemplate\">\n @if (contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"contentTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.content }}}\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-toast__actions\">\n @if (actionsTemplate) {\n <ng-container [ngTemplateOutlet]=\"actionsTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n@if (closeButton) {\n <div>\n @if (closeButtonTemplate) {\n <ng-container [ngTemplateOutlet]=\"closeButtonTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <button\n type=\"button\"\n kbq-icon-button=\"kbq-xmark-s_16\"\n kbq-toast-close-button\n [attr.aria-label]=\"a11yLocaleConfiguration().close\"\n (click)=\"close()\"\n ></button>\n }\n </div>\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { GlobalPositionStrategy, Overlay, OverlayContainer, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ComponentRef,\n EmbeddedViewRef,\n Injectable,\n InjectionToken,\n Injector,\n NgZone,\n OnDestroy,\n Signal,\n TemplateRef,\n Type,\n inject,\n signal,\n untracked\n} from '@angular/core';\nimport {\n BehaviorSubject,\n EMPTY,\n Observable,\n Subscription,\n distinctUntilChanged,\n filter,\n map,\n share,\n switchMap,\n timer\n} from 'rxjs';\nimport { KbqToastContainerComponent } from './toast-container.component';\nimport { KbqToastComponent } from './toast.component';\nimport {\n KBQ_TOAST_CONFIG,\n KBQ_TOAST_STACK,\n KbqToastData,\n KbqToastPosition,\n KbqToastStack,\n KbqToastTemplateContext\n} from './toast.type';\n\nexport const KBQ_TOAST_FACTORY = new InjectionToken('KBQ_TOAST_FACTORY', {\n factory: () => KbqToastComponent\n});\n\nconst CHECK_INTERVAL = 500;\n\nlet templateId = 0;\n\n/** `ParentNode.moveBefore()`, which TypeScript does not declare yet. */\ntype StatePreservingParent = ParentNode & { moveBefore?(node: Node, child: Node | null): void };\n\n/** Where a CSS animation in a subtree had got to. */\ntype AnimationProgress = { target: Element | null; name: string; time: CSSNumberish | null };\n\nconst cssAnimationsIn = (element: Element): CSSAnimation[] =>\n (element.getAnimations?.({ subtree: true }) ?? []).filter(\n (animation): animation is CSSAnimation => 'animationName' in animation\n );\n\nconst targetOf = (animation: Animation): Element | null => (animation.effect as KeyframeEffect | null)?.target ?? null;\n\n/**\n * Moves `node` right after `reference` without starting the CSS animations inside it over, as taking a node out of\n * the DOM and putting it back does: the exit animation of a leaving toast would be cancelled, and every visible toast\n * would slide in again. `moveBefore()` keeps them running; where it is missing, each restarted animation is set back\n * to the time it had reached, and one that had ended is ended again.\n */\nconst moveAfter = (node: Element, reference: ChildNode): void => {\n const parent = reference.parentNode as StatePreservingParent | null;\n\n if (parent?.moveBefore) {\n parent.moveBefore(node, reference.nextSibling);\n\n return;\n }\n\n const progress: AnimationProgress[] = cssAnimationsIn(node).map((animation) => ({\n target: targetOf(animation),\n name: animation.animationName,\n time: animation.currentTime\n }));\n\n reference.after(node);\n\n for (const animation of cssAnimationsIn(node)) {\n const reached = progress.find(\n ({ target, name }) => target === targetOf(animation) && name === animation.animationName\n );\n\n if (reached) {\n if (reached.time !== null) animation.currentTime = reached.time;\n } else if (animation.effect?.getComputedTiming().endTime !== Infinity) {\n animation.finish();\n }\n }\n};\n\ntype KbqToastRecord<T> = {\n readonly componentRef: ComponentRef<T>;\n /** Remaining lifetime in ms. `0` keeps the toast on screen until it is hidden explicitly. */\n ttl: number;\n /** Element that held the focus when the toast appeared, so that focus can be handed back to it. */\n readonly previouslyFocused: HTMLElement | null;\n};\n\ntype KbqToastTemplateRecord = {\n readonly viewRef: EmbeddedViewRef<KbqToastTemplateContext>;\n /** Remaining lifetime in ms. `0` keeps the template on screen until it is hidden explicitly. */\n ttl: number;\n};\n\n/** Generic `T` is a type hint only; the runtime component comes from `KBQ_TOAST_FACTORY`. */\n@Injectable({ providedIn: 'root' })\nexport class KbqToastService<T extends KbqToastComponent = KbqToastComponent> implements OnDestroy, KbqToastStack {\n private readonly overlay = inject(Overlay);\n private readonly injector = inject(Injector);\n private readonly overlayContainer = inject(OverlayContainer);\n private readonly ngZone = inject(NgZone);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly document = inject(DOCUMENT);\n private readonly toastFactory = inject(KBQ_TOAST_FACTORY);\n private readonly toastConfig = inject(KBQ_TOAST_CONFIG);\n\n get toasts(): ComponentRef<T>[] {\n return Object.values(this.toastsDict)\n .map(({ componentRef }) => componentRef)\n .filter((componentRef) => !componentRef.hostView.destroyed);\n }\n\n get templates(): EmbeddedViewRef<KbqToastTemplateContext>[] {\n return Object.values(this.templatesDict)\n .map(({ viewRef }) => viewRef)\n .filter((viewRef) => !viewRef.destroyed);\n }\n\n readonly read = new BehaviorSubject<KbqToastData | null>(null);\n\n private readonly _hovered = signal(false);\n private readonly _focused = signal(false);\n\n /** Whether at least one toast is hovered. */\n readonly hovered: Signal<boolean> = this._hovered.asReadonly();\n\n /** Whether at least one toast holds the focus. */\n readonly focused: Signal<boolean> = this._focused.asReadonly();\n\n private readonly stackSize = new BehaviorSubject<number>(0);\n\n /** Subscribed outside Angular so that a tick never runs change detection over the whole application. */\n private readonly heartbeat = new Observable<number>((subscriber) =>\n this.ngZone.runOutsideAngular(() => timer(CHECK_INTERVAL, CHECK_INTERVAL).subscribe(subscriber))\n );\n\n /**\n * Countdown heartbeat: emits every 500 ms while the stack holds something and is not paused by the pointer\n * or the keyboard focus. No interval runs while the stack is empty.\n */\n readonly timer: Observable<number> = this.stackSize.pipe(\n map((size) => size > 0),\n distinctUntilChanged(),\n switchMap((filled) => (filled ? this.heartbeat : EMPTY)),\n filter(() => !this.isPaused),\n share()\n );\n\n private containerInstance?: KbqToastContainerComponent;\n private overlayRef?: OverlayRef;\n private portal?: ComponentPortal<KbqToastContainerComponent>;\n private timerSubscription: Subscription;\n private currentPosition?: KbqToastPosition;\n\n /** Toasts taken off the stack that still play their exit animation in the container. */\n private readonly leaving = new Set<ComponentRef<T>>();\n\n private toastsDict: { [id: number]: KbqToastRecord<T> } = {};\n private templatesDict: { [id: number]: KbqToastTemplateRecord } = {};\n\n private readonly hoveredToasts = new Set<number>();\n private readonly focusedToasts = new Map<number, FocusOrigin>();\n private wasPaused = false;\n\n private get isPaused(): boolean {\n return this.hoveredToasts.size > 0 || this.focusedToasts.size > 0;\n }\n\n constructor() {\n this.ngZone.runOutsideAngular(() => {\n this.timerSubscription = this.timer.subscribe(this.processToasts);\n });\n }\n\n ngOnDestroy(): void {\n this.timerSubscription.unsubscribe();\n this.overlayRef?.dispose();\n this.overlayRef = undefined;\n this.containerInstance = undefined;\n this.portal = undefined;\n this.currentPosition = undefined;\n this.toastsDict = {};\n this.templatesDict = {};\n this.hoveredToasts.clear();\n this.focusedToasts.clear();\n this.stackSize.next(0);\n }\n\n show(\n data: KbqToastData,\n duration: number = this.toastConfig.duration,\n onTop: boolean = this.toastConfig.onTop\n ): { ref: ComponentRef<T>; id: number } {\n // Untracked, as `showTemplate()`, `hide()` and `hideTemplate()`: called from a consumer's `effect()`, the signals\n // read on the way — the container's view query, those the focus listeners read when the focus moves on to the\n // next toast — would become dependencies of the effect.\n return untracked(() => this.addToast(data, duration, onTop));\n }\n\n /** Body of `show()`. */\n private addToast(data: KbqToastData, duration: number, onTop: boolean): { ref: ComponentRef<T>; id: number } {\n const previouslyFocused = this.document.activeElement as HTMLElement | null;\n const container = this.prepareContainer();\n // The class generic is a hint: the runtime component is whatever `KBQ_TOAST_FACTORY` resolves to.\n const componentRef = container.createToast<T>(data, this.toastFactory as Type<T>, onTop);\n const id = componentRef.instance.id;\n\n if (typeof id !== 'number') {\n // The component is already rendered by now, and it never reaches the stack, so nothing else\n // would ever tear it down: every retry would strand one more element inside the overlay.\n // Detaching the view drops it from the container but leaves its host element connected, so\n // the element has to be taken out by hand as well.\n container.remove(componentRef.hostView);\n (componentRef.location.nativeElement as HTMLElement).remove();\n this.detachOverlay();\n\n throw new Error('KBQ_TOAST_FACTORY must provide a component extending KbqToastComponent: `id` is missing.');\n }\n\n this.toastsDict[id] = { componentRef, ttl: duration, previouslyFocused };\n this.syncStackSize();\n\n return { ref: componentRef, id };\n }\n\n showTemplate(\n data: KbqToastData,\n template: TemplateRef<any>,\n duration: number = this.toastConfig.duration,\n onTop: boolean = this.toastConfig.onTop\n ): { ref: EmbeddedViewRef<KbqToastTemplateContext>; id: number } {\n return untracked(() => this.addTemplate(data, template, duration, onTop));\n }\n\n /** Body of `showTemplate()`. */\n private addTemplate(\n data: KbqToastData,\n template: TemplateRef<any>,\n duration: number,\n onTop: boolean\n ): { ref: EmbeddedViewRef<KbqToastTemplateContext>; id: number } {\n const container = this.prepareContainer();\n const viewRef = container.createTemplate(data, template, onTop);\n const id = templateId++;\n\n this.templatesDict[id] = { viewRef, ttl: duration };\n this.syncStackSize();\n\n return { ref: viewRef, id };\n }\n\n hide(id: number) {\n untracked(() => this.removeToast(id));\n }\n\n /** Body of `hide()`. */\n private removeToast(id: number): void {\n const record = this.toastsDict[id];\n\n if (!record) {\n return;\n }\n\n // Removing the view destroys the toast, which releases its own pause state, so the focus origin has to\n // be read before that happens.\n const focusOrigin = this.focusedToasts.get(id);\n\n this.removeAfterExit(record.componentRef);\n\n delete this.toastsDict[id];\n\n this.setHovered(id, false);\n this.setFocused(id, null);\n\n // Only a keyboard or a programmatic focus is handed on. A mouse press on the close button focuses it\n // as a side effect of the click, and moving that focus into the next toast would report the survivor\n // as focused — pausing the whole stack until something blurs it, which a pointer leaving never does.\n if (focusOrigin === 'keyboard' || focusOrigin === 'program') {\n this.restoreFocus(record.previouslyFocused, focusOrigin);\n }\n\n this.renewLifetimes();\n this.syncStackSize();\n }\n\n hideTemplate(id: number) {\n untracked(() => this.removeTemplate(id));\n }\n\n /** Body of `hideTemplate()`. */\n private removeTemplate(id: number): void {\n const record = this.templatesDict[id];\n\n if (!record) {\n return;\n }\n\n this.containerInstance?.remove(record.viewRef);\n\n delete this.templatesDict[id];\n\n this.renewLifetimes();\n this.syncStackSize();\n this.detachOverlay();\n }\n\n /** Reports that the pointer entered or left the toast with the given id. @docs-private */\n setHovered(id: number, hovered: boolean): void {\n if (hovered === this.hoveredToasts.has(id)) {\n return;\n }\n\n if (hovered) {\n this.hoveredToasts.add(id);\n } else {\n this.hoveredToasts.delete(id);\n }\n\n this.updatePauseState();\n }\n\n /** Reports the origin the toast with the given id is focused with, or `null` once it is not. @docs-private */\n setFocused(id: number, origin: FocusOrigin): void {\n if ((this.focusedToasts.get(id) ?? null) === origin) {\n return;\n }\n\n if (origin) {\n this.focusedToasts.set(id, origin);\n } else {\n this.focusedToasts.delete(id);\n }\n\n this.updatePauseState();\n }\n\n private updatePauseState(): void {\n const paused = this.isPaused;\n\n // Entering the paused state renews the countdown, so that nothing disappears the instant the pointer or\n // the focus leaves the stack.\n if (paused && !this.wasPaused) {\n this.renewLifetimes();\n }\n\n this.wasPaused = paused;\n\n this._hovered.set(this.hoveredToasts.size > 0);\n this._focused.set(this.focusedToasts.size > 0);\n }\n\n /** Focus must not fall back to the document body when the toast holding it goes away. */\n private restoreFocus(previouslyFocused: HTMLElement | null, origin: FocusOrigin): void {\n const target = this.getNextFocusTarget() || previouslyFocused;\n\n if (!target?.isConnected) {\n return;\n }\n\n // `focusVia` keeps the focus ring of a keyboard user, which a native `focus()` would drop.\n this.focusMonitor.focusVia(target, origin || 'program');\n }\n\n private getNextFocusTarget(): HTMLElement | null {\n // Stack order, not `toastsDict` order. The dictionary is keyed by id, so `toasts` always reads\n // oldest-first, while `onTop` inserts a new toast at the top of the stack — following the dictionary\n // there would carry the focus past every toast between the one that closed and the oldest on screen.\n const inStackOrder = this.toasts\n .map(({ location }) => location.nativeElement as HTMLElement)\n .sort((a, b) => (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1));\n\n for (const host of inStackOrder) {\n const closeButton = host.querySelector<HTMLElement>('[kbq-toast-close-button]');\n\n if (closeButton) {\n return closeButton;\n }\n }\n\n return null;\n }\n\n /** Plays the exit animation of a toast taken off the stack, then removes it from the container. */\n private removeAfterExit(componentRef: ComponentRef<T>): void {\n // Destroyed by whoever held the ref: there is nothing left to animate.\n if (componentRef.hostView.destroyed) {\n this.detachOverlay();\n\n return;\n }\n\n this.leaving.add(componentRef);\n // Also destroyed before its exit ends, by whoever holds the ref or with the overlay, which a destroyed\n // view never reports back from.\n componentRef.onDestroy(() => {\n this.leaving.delete(componentRef);\n this.detachOverlay();\n });\n\n componentRef.instance.leave(() => this.containerInstance?.remove(componentRef.hostView));\n }\n\n /** Detaching destroys the container, so it waits for the stack to empty and the last exit to end. */\n private detachOverlay(): void {\n if (this.toasts.length !== 0 || this.templates.length !== 0 || this.leaving.size !== 0) {\n return;\n }\n\n this.overlayRef?.detach();\n }\n\n private syncStackSize(): void {\n this.stackSize.next(this.toasts.length + this.templates.length);\n }\n\n /**\n * Drops the records whose view was destroyed from outside the service — by a consumer holding the ref,\n * or by whatever owns the surrounding view. Nothing else deletes them: a record with a `ttl` of `0` is\n * skipped by the countdown forever, so the stack would keep reporting a size and the heartbeat would\n * keep running with nothing on screen.\n */\n private purgeDestroyed(): void {\n let purged = false;\n\n for (const [id, { componentRef }] of Object.entries(this.toastsDict)) {\n if (!componentRef.hostView.destroyed) {\n continue;\n }\n\n delete this.toastsDict[+id];\n this.setHovered(+id, false);\n this.setFocused(+id, null);\n purged = true;\n }\n\n for (const [id, { viewRef }] of Object.entries(this.templatesDict)) {\n if (!viewRef.destroyed) {\n continue;\n }\n\n delete this.templatesDict[+id];\n purged = true;\n }\n\n if (!purged) {\n return;\n }\n\n this.syncStackSize();\n this.detachOverlay();\n }\n\n private processToasts = () => {\n this.purgeDestroyed();\n\n for (const [id, record] of Object.entries(this.toastsDict)) {\n if (record.ttl <= 0) {\n continue;\n }\n\n record.ttl -= CHECK_INTERVAL;\n\n if (record.ttl <= 0) {\n this.ngZone.run(() => this.hide(+id));\n\n return;\n }\n }\n\n for (const [id, record] of Object.entries(this.templatesDict)) {\n if (record.ttl <= 0) {\n continue;\n }\n\n record.ttl -= CHECK_INTERVAL;\n\n if (record.ttl <= 0) {\n this.ngZone.run(() => this.hideTemplate(+id));\n\n return;\n }\n }\n };\n\n /** Keeps every survivor on screen for at least the configured delay after a dismissal or a pause. */\n private renewLifetimes() {\n const records = [...Object.values(this.toastsDict), ...Object.values(this.templatesDict)];\n\n for (const record of records) {\n if (record.ttl > 0) {\n record.ttl = Math.max(record.ttl, this.toastConfig.delay);\n }\n }\n }\n\n private prepareContainer(): KbqToastContainerComponent {\n const overlayRef = this.createOverlay();\n const portal = this.portal || new ComponentPortal(KbqToastContainerComponent, null, this.createStackInjector());\n\n this.portal = portal;\n\n if (!overlayRef.hasAttached()) {\n this.containerInstance = overlayRef.attach(portal).instance;\n this.containerInstance\n .getElementRef()\n .nativeElement.classList.add(`kbq-toast-container-${this.toastConfig.position}`);\n }\n\n this.toTop(overlayRef);\n\n return this.containerInstance!;\n }\n\n /** Every toast resolves its stack through the container, so that it never depends on this service. */\n private createStackInjector(): Injector {\n return Injector.create({\n providers: [{ provide: KBQ_TOAST_STACK, useValue: this }],\n parent: this.injector\n });\n }\n\n /** Raises the stack above the overlays opened after it. */\n private toTop(overlayRef: OverlayRef) {\n const host = overlayRef.hostElement;\n const overlays = this.overlayContainer.getContainerElement().childNodes;\n const last = overlays[overlays.length - 1];\n\n // The identity check matters: `x.after(x)` is not a no-op. `after()` resolves no viable next\n // sibling for a node that is already last and falls through to `insertBefore(x, null)`, whose\n // insert steps take `x` out of its parent first — a real detach and re-attach of the wrapper\n // holding every live toast, on every `show()`.\n if (overlays.length < 2 || last === host) {\n return;\n }\n\n // A popover host is in the top layer, painted in the order the popovers were shown in, not in DOM\n // order. Taking it out of the DOM hides the popover, which drops the stack beneath every overlay\n // there, so it is shown again instead. Its place in the DOM stays, so it is raised again on every\n // `show()` while that overlay is open.\n if (overlayRef.getConfig().usePopover && host.matches(':popover-open')) {\n host.hidePopover();\n host.showPopover();\n\n return;\n }\n\n moveAfter(host, last);\n }\n\n private createOverlay(): OverlayRef {\n const expectedPosition = this.toastConfig.position;\n\n if (this.overlayRef && this.currentPosition === expectedPosition) {\n return this.overlayRef;\n }\n\n if (this.overlayRef) {\n // Nothing survives the overlay it lives in, so the stack is drained through the regular paths\n // instead of leaving both dictionaries pointing at destroyed views.\n this.clear();\n\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n this.containerInstance = undefined;\n this.portal = undefined;\n }\n\n const positionStrategy = this.getPositionStrategy(expectedPosition);\n const overlayRef = this.overlay.create({ positionStrategy });\n\n overlayRef.hostElement.classList.add('kbq-toast-overlay');\n\n this.overlayRef = overlayRef;\n this.currentPosition = expectedPosition;\n\n return overlayRef;\n }\n\n private clear(): void {\n Object.keys(this.toastsDict).forEach((id) => this.hide(+id));\n Object.keys(this.templatesDict).forEach((id) => this.hideTemplate(+id));\n }\n\n private getPositionStrategy(position?: KbqToastPosition): GlobalPositionStrategy {\n switch (position) {\n case KbqToastPosition.CENTER:\n return this.getCenter();\n case KbqToastPosition.BOTTOM_CENTER:\n return this.getBottomCenter();\n case KbqToastPosition.BOTTOM_LEFT:\n return this.getBottomLeft();\n case KbqToastPosition.BOTTOM_RIGHT:\n return this.getBottomRight();\n case KbqToastPosition.TOP_CENTER:\n return this.getTopCenter();\n case KbqToastPosition.TOP_LEFT:\n return this.getTopLeft();\n case KbqToastPosition.TOP_RIGHT:\n return this.getTopRight();\n default:\n return this.getTopCenter();\n }\n }\n\n private getTopCenter(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition().top(`${this.toastConfig.indent.vertical}px`).centerHorizontally();\n }\n\n private getTopLeft(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .top(`${this.toastConfig.indent.vertical}px`)\n .left(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getTopRight(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .top(`${this.toastConfig.indent.vertical}px`)\n .right(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getBottomCenter(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition().bottom(`${this.toastConfig.indent.vertical}px`).centerHorizontally();\n }\n\n private getBottomLeft(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .bottom(`${this.toastConfig.indent.vertical}px`)\n .left(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getBottomRight(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition()\n .bottom(`${this.toastConfig.indent.vertical}px`)\n .right(`${this.toastConfig.indent.horizontal}px`);\n }\n\n private getCenter(): GlobalPositionStrategy {\n return this.getGlobalOverlayPosition().centerVertically().centerHorizontally();\n }\n\n private getGlobalOverlayPosition(): GlobalPositionStrategy {\n return this.overlay.position().global();\n }\n}\n","import { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { CdkScrollable, FlexibleConnectedPositionStrategy, OverlayKeyboardDispatcher } from '@angular/cdk/overlay';\nimport {\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n EmbeddedViewRef,\n Injector,\n TemplateRef,\n Type,\n ViewContainerRef,\n ViewEncapsulation,\n ViewRef,\n forwardRef,\n inject,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { kbqInjectA11yLocaleConfiguration } from '@koobiq/components/core';\nimport { KbqToastService } from './toast.service';\nimport { KBQ_TOAST_STACK, KbqToastData, KbqToastTemplateContext } from './toast.type';\n\n@Component({\n selector: 'kbq-toast-container',\n template: '<ng-container #container />',\n styleUrls: ['./toast-container.component.scss'],\n // A container written into a consumer's template has no stack above it — `KbqToastService` provides\n // itself only for the container it creates — so `createToast()` would leave the toast without one.\n // `forwardRef` because the service imports this file back.\n providers: [{ provide: KBQ_TOAST_STACK, useExisting: forwardRef(() => KbqToastService) }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-toast-container',\n role: 'region',\n '[attr.aria-label]': 'a11yLocaleConfiguration().toastRegion'\n }\n})\nexport class KbqToastContainerComponent extends CdkScrollable {\n private readonly injector = inject(Injector);\n\n protected readonly a11yLocaleConfiguration = kbqInjectA11yLocaleConfiguration();\n\n readonly service = inject(KbqToastService);\n\n readonly viewContainer = viewChild.required('container', { read: ViewContainerRef });\n\n private readonly overlayKeyboardDispatcher = inject(OverlayKeyboardDispatcher);\n\n constructor() {\n super();\n\n // Toasts are ordinary flow children, so removing one slides the rest for as long as its height animates,\n // and an overlay opened from inside a toast is left behind its trigger: CDK re-measures the origin only on\n // a scroll or a viewport resize. The container's box tracks the reflow exactly. It is not reported as a\n // scroll: `ScrollDispatcher` is global, and every close-on-scroll overlay of the app would close.\n inject(SharedResizeObserver)\n .observe(this.elementRef.nativeElement)\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.repositionConnectedOverlays());\n }\n\n createToast<C>(data: KbqToastData, componentType: Type<C>, onTop: boolean): ComponentRef<C> {\n const injector = this.getInjector(data);\n const index = onTop ? 0 : undefined;\n\n return this.viewContainer().createComponent(componentType, { injector, index });\n }\n\n createTemplate(\n data: KbqToastData,\n template: TemplateRef<any>,\n onTop: boolean\n ): EmbeddedViewRef<KbqToastTemplateContext> {\n const index = onTop ? 0 : undefined;\n const viewRef = this.viewContainer().createEmbeddedView<KbqToastTemplateContext>(\n template,\n { $implicit: data },\n index\n );\n\n this.markAsLiveRegion(viewRef);\n\n return viewRef;\n }\n\n remove(viewRef: ViewRef) {\n const index = this.viewContainer().indexOf(viewRef);\n\n if (index < 0) {\n return;\n }\n\n this.viewContainer().remove(index);\n }\n\n getInjector(data: KbqToastData): Injector {\n return Injector.create({\n providers: [{ provide: KbqToastData, useValue: data }],\n parent: this.injector\n });\n }\n\n /**\n * Re-applies the position of every overlay anchored to an element; one whose origin has not moved stays where it\n * is. CDK keeps no public registry of attached overlays, but its keyboard dispatcher tracks each of them.\n */\n private repositionConnectedOverlays(): void {\n // A copy: a `positionChanges` handler may detach an overlay, which splices the list being iterated.\n for (const overlayRef of this.overlayKeyboardDispatcher._attachedOverlays.slice()) {\n if (overlayRef.getConfig().positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n overlayRef.updatePosition();\n }\n }\n }\n\n /**\n * A template toast has no component host of its own, so its first element becomes the live region — screen\n * readers announce a node inserted with `role=\"status\"`. A template declaring its own role is left alone,\n * and one whose root is a bare text node cannot carry the attribute at all — it needs an element around it.\n */\n private markAsLiveRegion(viewRef: EmbeddedViewRef<KbqToastTemplateContext>): void {\n const root = viewRef.rootNodes.find((node) => node?.nodeType === Node.ELEMENT_NODE) as HTMLElement | undefined;\n\n if (!root || root.hasAttribute('role')) {\n return;\n }\n\n root.setAttribute('role', 'status');\n root.setAttribute('aria-atomic', 'true');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqToastContainerComponent } from './toast-container.component';\nimport { KbqToastCloseButton, KbqToastComponent } from './toast.component';\n\nconst COMPONENTS = [\n KbqToastComponent,\n KbqToastCloseButton,\n KbqToastContainerComponent\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqToastModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["filter"],"mappings":"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"}
|