novo-elements 13.2.0 → 13.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/addons/ckeditor/CKEditor.scss +8 -0
  2. package/elements/agenda/week/AgendaWeekView.scss +1 -1
  3. package/elements/breadcrumbs/Breadcrumb.scss +1 -1
  4. package/elements/button/styles/button-dialogue.scss +12 -0
  5. package/elements/button/styles/button-icon.scss +20 -0
  6. package/elements/button/styles/button-primary.scss +16 -1
  7. package/elements/button/styles/button-secondary.scss +14 -1
  8. package/elements/button/styles/button-standard.scss +14 -0
  9. package/elements/button/styles/button.scss +12 -1
  10. package/elements/card/Card.scss +80 -19
  11. package/elements/card/CardContent.scss +3 -0
  12. package/elements/card/CardHeader.scss +23 -0
  13. package/elements/card/index.d.ts +5 -3
  14. package/elements/category-dropdown/CategoryDropdown.scss +1 -1
  15. package/elements/checkbox/CheckList.scss +69 -0
  16. package/elements/checkbox/Checkbox.scss +104 -0
  17. package/elements/chips/Chip.scss +47 -1
  18. package/elements/chips/Chips.scss +9 -0
  19. package/elements/common/index.d.ts +14 -4
  20. package/elements/common/option/option.component.scss +11 -0
  21. package/elements/common/typography/text.mixins.scss +1 -1
  22. package/elements/data-table/data-table.component.scss +81 -3
  23. package/elements/data-table/pagination/data-table-pagination.component.scss +73 -0
  24. package/elements/date-picker/DatePicker.scss +1 -6
  25. package/elements/date-picker/DatePickerInput.scss +5 -0
  26. package/elements/date-time-picker/_DateTimePicker.scss +1 -1
  27. package/elements/dropdown/Dropdown.scss +17 -1
  28. package/elements/field/field.scss +10 -6
  29. package/elements/field/hint/hint.scss +6 -0
  30. package/elements/form/ControlGroup.scss +13 -0
  31. package/elements/form/Form.scss +260 -1
  32. package/elements/form/extras/address/Address.scss +77 -0
  33. package/elements/form/fieldset-header.scss +32 -0
  34. package/elements/form/index.d.ts +14 -4
  35. package/elements/header/Header.scss +45 -3
  36. package/elements/layout/index.d.ts +28 -4
  37. package/elements/list/list-item-content.scss +11 -10
  38. package/elements/menu/menu-content.component.scss +1 -0
  39. package/elements/modal/modal.component.scss +3 -13
  40. package/elements/modal/notification.component.scss +1 -6
  41. package/elements/picker/Picker.scss +26 -5
  42. package/elements/picker/extras/picker-results/PickerResults.scss +52 -0
  43. package/elements/progress/Progress.scss +8 -0
  44. package/elements/progress/ProgressBar.scss +4 -1
  45. package/elements/search/SearchBox.scss +53 -0
  46. package/elements/search/index.d.ts +19 -9
  47. package/elements/select/Select.scss +1 -1
  48. package/elements/simple-table/table.scss +1 -1
  49. package/elements/stepper/stepper.component.scss +4 -4
  50. package/elements/switch/Switch.scss +39 -3
  51. package/elements/tabbed-group-picker/TabbedGroupPicker.scss +47 -0
  52. package/elements/tabs/tab.scss +53 -14
  53. package/elements/tiles/Tiles.scss +24 -2
  54. package/elements/time-picker/TimePicker.scss +2 -2
  55. package/elements/time-picker/TimePickerInput.scss +7 -2
  56. package/elements/tip-well/TipWell.scss +34 -0
  57. package/elements/tip-well/index.d.ts +5 -1
  58. package/elements/toolbar/toolbar.component.scss +15 -0
  59. package/elements/tooltip/Tooltip.scss +19 -22
  60. package/elements/tooltip/index.d.ts +2 -1
  61. package/fesm2022/novo-elements-addons-ckeditor.mjs +2 -2
  62. package/fesm2022/novo-elements-addons-ckeditor.mjs.map +1 -1
  63. package/fesm2022/novo-elements-elements-agenda.mjs +2 -2
  64. package/fesm2022/novo-elements-elements-breadcrumbs.mjs +3 -3
  65. package/fesm2022/novo-elements-elements-breadcrumbs.mjs.map +1 -1
  66. package/fesm2022/novo-elements-elements-button.mjs +2 -2
  67. package/fesm2022/novo-elements-elements-button.mjs.map +1 -1
  68. package/fesm2022/novo-elements-elements-card.mjs +27 -21
  69. package/fesm2022/novo-elements-elements-card.mjs.map +1 -1
  70. package/fesm2022/novo-elements-elements-category-dropdown.mjs +2 -2
  71. package/fesm2022/novo-elements-elements-category-dropdown.mjs.map +1 -1
  72. package/fesm2022/novo-elements-elements-checkbox.mjs +4 -4
  73. package/fesm2022/novo-elements-elements-checkbox.mjs.map +1 -1
  74. package/fesm2022/novo-elements-elements-chips.mjs +6 -6
  75. package/fesm2022/novo-elements-elements-chips.mjs.map +1 -1
  76. package/fesm2022/novo-elements-elements-common.mjs +52 -21
  77. package/fesm2022/novo-elements-elements-common.mjs.map +1 -1
  78. package/fesm2022/novo-elements-elements-data-table.mjs +4 -4
  79. package/fesm2022/novo-elements-elements-data-table.mjs.map +1 -1
  80. package/fesm2022/novo-elements-elements-date-picker.mjs +4 -4
  81. package/fesm2022/novo-elements-elements-date-picker.mjs.map +1 -1
  82. package/fesm2022/novo-elements-elements-date-time-picker.mjs +2 -2
  83. package/fesm2022/novo-elements-elements-date-time-picker.mjs.map +1 -1
  84. package/fesm2022/novo-elements-elements-dropdown.mjs +2 -2
  85. package/fesm2022/novo-elements-elements-dropdown.mjs.map +1 -1
  86. package/fesm2022/novo-elements-elements-field.mjs +4 -4
  87. package/fesm2022/novo-elements-elements-field.mjs.map +1 -1
  88. package/fesm2022/novo-elements-elements-form.mjs +135 -78
  89. package/fesm2022/novo-elements-elements-form.mjs.map +1 -1
  90. package/fesm2022/novo-elements-elements-header.mjs +2 -2
  91. package/fesm2022/novo-elements-elements-header.mjs.map +1 -1
  92. package/fesm2022/novo-elements-elements-layout.mjs +73 -14
  93. package/fesm2022/novo-elements-elements-layout.mjs.map +1 -1
  94. package/fesm2022/novo-elements-elements-list.mjs +2 -2
  95. package/fesm2022/novo-elements-elements-list.mjs.map +1 -1
  96. package/fesm2022/novo-elements-elements-menu.mjs +2 -2
  97. package/fesm2022/novo-elements-elements-menu.mjs.map +1 -1
  98. package/fesm2022/novo-elements-elements-modal.mjs +4 -4
  99. package/fesm2022/novo-elements-elements-modal.mjs.map +1 -1
  100. package/fesm2022/novo-elements-elements-multi-picker.mjs +2 -2
  101. package/fesm2022/novo-elements-elements-multi-picker.mjs.map +1 -1
  102. package/fesm2022/novo-elements-elements-picker.mjs +6 -6
  103. package/fesm2022/novo-elements-elements-picker.mjs.map +1 -1
  104. package/fesm2022/novo-elements-elements-progress.mjs +4 -4
  105. package/fesm2022/novo-elements-elements-progress.mjs.map +1 -1
  106. package/fesm2022/novo-elements-elements-search.mjs +63 -17
  107. package/fesm2022/novo-elements-elements-search.mjs.map +1 -1
  108. package/fesm2022/novo-elements-elements-select.mjs +2 -2
  109. package/fesm2022/novo-elements-elements-select.mjs.map +1 -1
  110. package/fesm2022/novo-elements-elements-simple-table.mjs +4 -4
  111. package/fesm2022/novo-elements-elements-simple-table.mjs.map +1 -1
  112. package/fesm2022/novo-elements-elements-stepper.mjs +6 -6
  113. package/fesm2022/novo-elements-elements-stepper.mjs.map +1 -1
  114. package/fesm2022/novo-elements-elements-switch.mjs +2 -2
  115. package/fesm2022/novo-elements-elements-switch.mjs.map +1 -1
  116. package/fesm2022/novo-elements-elements-tabbed-group-picker.mjs +2 -2
  117. package/fesm2022/novo-elements-elements-tabbed-group-picker.mjs.map +1 -1
  118. package/fesm2022/novo-elements-elements-tabs.mjs +4 -4
  119. package/fesm2022/novo-elements-elements-tabs.mjs.map +1 -1
  120. package/fesm2022/novo-elements-elements-tiles.mjs +2 -2
  121. package/fesm2022/novo-elements-elements-tiles.mjs.map +1 -1
  122. package/fesm2022/novo-elements-elements-time-picker.mjs +4 -4
  123. package/fesm2022/novo-elements-elements-time-picker.mjs.map +1 -1
  124. package/fesm2022/novo-elements-elements-tip-well.mjs +26 -6
  125. package/fesm2022/novo-elements-elements-tip-well.mjs.map +1 -1
  126. package/fesm2022/novo-elements-elements-toolbar.mjs +2 -2
  127. package/fesm2022/novo-elements-elements-toolbar.mjs.map +1 -1
  128. package/fesm2022/novo-elements-elements-tooltip.mjs +8 -4
  129. package/fesm2022/novo-elements-elements-tooltip.mjs.map +1 -1
  130. package/fesm2022/novo-elements-utils.mjs +4822 -364
  131. package/fesm2022/novo-elements-utils.mjs.map +1 -1
  132. package/package.json +1 -1
  133. package/styles/content/links.scss +4 -0
  134. package/styles/themes/bh2026.scss +131 -53
  135. package/styles/typography.scss +6 -0
  136. package/styles/variables.scss +2 -0
  137. package/utils/index.d.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"novo-elements-elements-header.mjs","sources":["../../../projects/novo-elements/src/elements/header/Header.ts","../../../projects/novo-elements/src/elements/header/Header.module.ts","../../../projects/novo-elements/src/elements/header/novo-elements-elements-header.ts"],"sourcesContent":["import { Component, ElementRef, HostBinding, Input } from '@angular/core';\nimport { BooleanInput } from 'novo-elements/utils';\n\n@Component({\n selector: 'header-spacer',\n template: '<ng-content></ng-content>',\n styleUrls: ['./HeaderSpacer.scss'],\n standalone: false,\n})\nexport class NovoHeaderSpacer {}\n\n@Component({\n selector: 'utils',\n template: '<ng-content></ng-content>',\n standalone: false,\n})\nexport class NovoUtilsComponent {}\n\n@Component({\n selector: 'util-action, novo-action',\n template: `\n <novo-button theme=\"icon\" [icon]=\"icon\" [size]=\"size\" [attr.inverse]=\"inverse\" [disabled]=\"disabled\">\n <ng-content></ng-content>\n </novo-button>\n `,\n host: {\n class: 'novo-action',\n },\n standalone: false,\n})\nexport class NovoUtilActionComponent {\n @Input()\n public icon: string;\n @Input()\n public size: string;\n @Input()\n public inverse: boolean;\n @Input()\n public disabled: boolean;\n}\n\n@Component({\n selector: 'novo-header,header[theme],header[accent]',\n template: `\n <section>\n <div class=\"header-title\">\n <ng-content select=\"[prefix]\"></ng-content>\n <ng-container *ngIf=\"title\">\n <novo-icon class=\"header-icon\" *ngIf=\"icon\">{{ icon }}</novo-icon>\n <div class=\"header-titles\">\n <novo-title size=\"xl\">{{ title }}</novo-title>\n <novo-title size=\"md\" *ngIf=\"subTitle\">{{ subTitle }}</novo-title>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!title\">\n <ng-content select=\"novo-icon, [novo-icon]\"></ng-content>\n <div class=\"header-titles\">\n <ng-content select=\"h1, h2, h3, h4, h5, h6, small, novo-title, [novo-title], [novo-subtitle]\"></ng-content>\n </div>\n </ng-container>\n </div>\n <ng-content select=\"section\"></ng-content>\n <span class=\"spacer\"></span>\n <div class=\"header-actions\">\n <ng-content select=\"novo-action,[novo-action]\"></ng-content>\n </div>\n <ng-content select=\"utils\"></ng-content>\n <ng-content select=\"[suffix]\"></ng-content>\n </section>\n <ng-content></ng-content>\n `,\n styleUrls: ['./Header.scss'],\n standalone: false,\n})\nexport class NovoHeaderComponent {\n @HostBinding('attr.role')\n public role = 'heading';\n @HostBinding('class')\n public headerClass: string = 'novo-header';\n @HostBinding('class.condensed')\n @Input()\n @BooleanInput()\n public condensed: boolean = false;\n @Input()\n public title: string;\n @Input()\n public subTitle: string;\n public inverse: string = 'inverse';\n\n @Input()\n public icon: string;\n\n @Input()\n public size: 'small' | 'medium' | 'large';\n\n @HostBinding('class.header-size-small')\n get hb_isSizeSmall(): boolean {\n return this.size === 'small';\n }\n\n @HostBinding('class.header-size-large')\n get hb_isSizeLarge(): boolean {\n return this.size === 'large';\n }\n\n @HostBinding('class.header-size-default')\n get hb_isSizeDefault(): boolean {\n return !['small', 'large'].includes(this.size);\n }\n\n @HostBinding('attr.theme')\n @Input()\n set theme(theme: string) {\n this._theme = theme;\n this.inverse = theme === 'white' || theme === 'off-white' || theme === 'light' ? undefined : 'inverse';\n }\n\n get theme(): string {\n return this._theme;\n }\n\n private _theme: string;\n\n constructor(public element: ElementRef) {}\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoCommonModule } from 'novo-elements/elements/common';\nimport { NovoIconModule } from 'novo-elements/elements/icon';\nimport { NovoHeaderComponent, NovoHeaderSpacer, NovoUtilActionComponent, NovoUtilsComponent } from './Header';\n\n@NgModule({\n imports: [CommonModule, NovoCommonModule, NovoIconModule, NovoButtonModule],\n declarations: [NovoHeaderComponent, NovoUtilActionComponent, NovoUtilsComponent, NovoHeaderSpacer],\n exports: [NovoHeaderComponent, NovoUtilActionComponent, NovoUtilsComponent, NovoHeaderSpacer],\n})\nexport class NovoHeaderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"novo-elements-elements-header.mjs","sources":["../../../projects/novo-elements/src/elements/header/Header.ts","../../../projects/novo-elements/src/elements/header/Header.module.ts","../../../projects/novo-elements/src/elements/header/novo-elements-elements-header.ts"],"sourcesContent":["import { Component, ElementRef, HostBinding, Input } from '@angular/core';\nimport { BooleanInput } from 'novo-elements/utils';\n\n@Component({\n selector: 'header-spacer',\n template: '<ng-content></ng-content>',\n styleUrls: ['./HeaderSpacer.scss'],\n standalone: false,\n})\nexport class NovoHeaderSpacer {}\n\n@Component({\n selector: 'utils',\n template: '<ng-content></ng-content>',\n standalone: false,\n})\nexport class NovoUtilsComponent {}\n\n@Component({\n selector: 'util-action, novo-action',\n template: `\n <novo-button theme=\"icon\" [icon]=\"icon\" [size]=\"size\" [attr.inverse]=\"inverse\" [disabled]=\"disabled\">\n <ng-content></ng-content>\n </novo-button>\n `,\n host: {\n class: 'novo-action',\n },\n standalone: false,\n})\nexport class NovoUtilActionComponent {\n @Input()\n public icon: string;\n @Input()\n public size: string;\n @Input()\n public inverse: boolean;\n @Input()\n public disabled: boolean;\n}\n\n@Component({\n selector: 'novo-header,header[theme],header[accent]',\n template: `\n <section>\n <div class=\"header-title\">\n <ng-content select=\"[prefix]\"></ng-content>\n <ng-container *ngIf=\"title\">\n <novo-icon class=\"header-icon\" *ngIf=\"icon\">{{ icon }}</novo-icon>\n <div class=\"header-titles\">\n <novo-title size=\"xl\">{{ title }}</novo-title>\n <novo-title size=\"md\" *ngIf=\"subTitle\">{{ subTitle }}</novo-title>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!title\">\n <ng-content select=\"novo-icon, [novo-icon]\"></ng-content>\n <div class=\"header-titles\">\n <ng-content select=\"h1, h2, h3, h4, h5, h6, small, novo-title, [novo-title], [novo-subtitle]\"></ng-content>\n </div>\n </ng-container>\n </div>\n <ng-content select=\"section\"></ng-content>\n <span class=\"spacer\"></span>\n <div class=\"header-actions\">\n <ng-content select=\"novo-action,[novo-action]\"></ng-content>\n </div>\n <ng-content select=\"utils\"></ng-content>\n <ng-content select=\"[suffix]\"></ng-content>\n </section>\n <ng-content></ng-content>\n `,\n styleUrls: ['./Header.scss'],\n standalone: false,\n})\nexport class NovoHeaderComponent {\n @HostBinding('attr.role')\n public role = 'heading';\n @HostBinding('class')\n public headerClass: string = 'novo-header';\n @HostBinding('class.condensed')\n @Input()\n @BooleanInput()\n public condensed: boolean = false;\n @Input()\n public title: string;\n @Input()\n public subTitle: string;\n public inverse: string = 'inverse';\n\n @Input()\n public icon: string;\n\n @Input()\n public size: 'small' | 'medium' | 'large';\n\n @HostBinding('class.header-size-small')\n get hb_isSizeSmall(): boolean {\n return this.size === 'small';\n }\n\n @HostBinding('class.header-size-large')\n get hb_isSizeLarge(): boolean {\n return this.size === 'large';\n }\n\n @HostBinding('class.header-size-default')\n get hb_isSizeDefault(): boolean {\n return !['small', 'large'].includes(this.size);\n }\n\n @HostBinding('attr.theme')\n @Input()\n set theme(theme: string) {\n this._theme = theme;\n this.inverse = theme === 'white' || theme === 'off-white' || theme === 'light' ? undefined : 'inverse';\n }\n\n get theme(): string {\n return this._theme;\n }\n\n private _theme: string;\n\n constructor(public element: ElementRef) {}\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoCommonModule } from 'novo-elements/elements/common';\nimport { NovoIconModule } from 'novo-elements/elements/icon';\nimport { NovoHeaderComponent, NovoHeaderSpacer, NovoUtilActionComponent, NovoUtilsComponent } from './Header';\n\n@NgModule({\n imports: [CommonModule, NovoCommonModule, NovoIconModule, NovoButtonModule],\n declarations: [NovoHeaderComponent, NovoUtilActionComponent, NovoUtilsComponent, NovoHeaderSpacer],\n exports: [NovoHeaderComponent, NovoUtilActionComponent, NovoUtilsComponent, NovoHeaderSpacer],\n})\nexport class NovoHeaderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,20 +1,22 @@
1
1
  import * as i0 from '@angular/core';
2
- import { model, input, signal, computed, effect, HostBinding, HostListener, ViewEncapsulation, ChangeDetectionStrategy, Component, InjectionToken, Inject, EventEmitter, DOCUMENT, Output, Input, Optional, QueryList, ViewChild, ContentChild, ContentChildren, NgModule } from '@angular/core';
2
+ import { model, input, output, inject, ElementRef, DestroyRef, signal, computed, effect, HostBinding, HostListener, ViewEncapsulation, ChangeDetectionStrategy, Component, InjectionToken, Inject, EventEmitter, DOCUMENT, Output, Input, Optional, QueryList, ViewChild, ContentChild, ContentChildren, NgModule } from '@angular/core';
3
+ import { toSignal, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
4
+ import { fromEvent, filter, partition, switchMap, race, of, delay, map, merge, Subject } from 'rxjs';
3
5
  import { trigger, state, style, transition, animate } from '@angular/animations';
4
6
  import * as i1$2 from '@angular/cdk/bidi';
5
7
  import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
6
8
  import * as i1 from '@angular/cdk/overlay';
7
9
  import { CdkScrollable } from '@angular/cdk/overlay';
8
10
  import { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';
9
- import { Subject, fromEvent, merge } from 'rxjs';
10
- import { filter, map, mapTo, takeUntil, distinctUntilChanged, take, startWith, debounceTime } from 'rxjs/operators';
11
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
11
+ import { filter as filter$1, map as map$1, mapTo, takeUntil, distinctUntilChanged, take, startWith, debounceTime } from 'rxjs/operators';
12
12
  import * as i1$1 from '@angular/cdk/a11y';
13
13
  import { hasModifierKey } from '@angular/cdk/keycodes';
14
14
  import * as i2 from '@angular/cdk/platform';
15
15
  import * as i3 from '@angular/common';
16
16
  import { CommonModule } from '@angular/common';
17
17
 
18
+ // WARNING: Angular plans to remove the animations library in v23. When upgrading there, use CSS transition effects
19
+ // to apply similar curves, and change event triggers to fire off of transitionstart/transitionend events.
18
20
  /**
19
21
  * Animation that grows/shrinks the panel width between its expanded and collapsed (icon-rail) sizes.
20
22
  * Width is animated rather than transform because the panel shrinks in place rather than sliding away.
@@ -27,6 +29,20 @@ const novoCollapsibleNavAnimations = {
27
29
  ]),
28
30
  };
29
31
 
32
+ // Event fired when a user event (click, space) is about to expand navigation early
33
+ class CollapsibleNavExpansionEvent extends Event {
34
+ get expandPrevented() {
35
+ return this._expandPrevented;
36
+ }
37
+ constructor(srcEvent) {
38
+ super('expansionClick');
39
+ this.srcEvent = srcEvent;
40
+ this._expandPrevented = false;
41
+ }
42
+ preventExpand() {
43
+ this._expandPrevented = true;
44
+ }
45
+ }
30
46
  /**
31
47
  * A slide-out navigation panel that expands to a full-width panel or collapses to a narrow icon rail.
32
48
  * Generic building block: consumers project their own header, body, and footer content.
@@ -39,15 +55,30 @@ class NovoCollapsibleNavComponent {
39
55
  this.expandedWidth = input('18rem', ...(ngDevMode ? [{ debugName: "expandedWidth" }] : []));
40
56
  /** Width of the panel when collapsed to the icon rail. */
41
57
  this.collapsedWidth = input('4rem', ...(ngDevMode ? [{ debugName: "collapsedWidth" }] : []));
58
+ /** Time in ms to delay between the user entering the nav region, and expanding it */
59
+ this.expandDelay = model(0, ...(ngDevMode ? [{ debugName: "expandDelay" }] : []));
42
60
  /** When true, hovering a collapsed panel temporarily expands it as an overlay without affecting layout. */
43
61
  this.overlayOnHover = input(false, ...(ngDevMode ? [{ debugName: "overlayOnHover" }] : []));
62
+ this.hoveredChange = output();
63
+ this.transitionChange = output();
64
+ this.manualExpand = output();
65
+ this.element = inject(ElementRef);
66
+ this.destroyRef = inject(DestroyRef);
44
67
  this.isHovered = signal(false, ...(ngDevMode ? [{ debugName: "isHovered" }] : []));
45
- this.effectiveCollapsed = computed(() => this.collapsed() && !(this.overlayOnHover() && this.isHovered()), ...(ngDevMode ? [{ debugName: "effectiveCollapsed" }] : []));
68
+ this.isHoveredDebounced$ = this.debounceHover(this.isHovered);
69
+ this.isEffectiveHovered = toSignal(this.isHoveredDebounced$);
70
+ this.effectiveCollapsed = computed(() => this.collapsed() && !(this.overlayOnHover() && this.isEffectiveHovered()), ...(ngDevMode ? [{ debugName: "effectiveCollapsed" }] : []));
71
+ this.clicked$ = fromEvent(this.element.nativeElement, 'click');
72
+ this.activationKeyPressed$ = fromEvent(this.element.nativeElement, 'keydown').pipe(filter(kevt => kevt.key === ' ' || kevt.key === 'Enter'));
46
73
  effect(() => {
47
74
  if (this.collapsed()) {
48
75
  this.isHovered.set(false);
49
76
  }
50
77
  });
78
+ this.isHoveredDebounced$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(hovered => {
79
+ this.hoveredChange.emit(hovered);
80
+ });
81
+ this.manualExpandUnprevented$ = this.setupExpandFromActivation();
51
82
  }
52
83
  onMouseEnter() {
53
84
  this.isHovered.set(true);
@@ -61,6 +92,28 @@ class NovoCollapsibleNavComponent {
61
92
  params: { expandedWidth: this.expandedWidth(), collapsedWidth: this.collapsedWidth() },
62
93
  };
63
94
  }
95
+ transitionStart(event) {
96
+ this.transitionChange.emit(event.toState === 'expanded' ? 'expanding' : 'collapsing');
97
+ }
98
+ transitionEnd(event) {
99
+ this.transitionChange.emit(event.toState === 'expanded' ? 'expanded' : 'collapsed');
100
+ }
101
+ debounceHover(hoverSignal) {
102
+ const hoverObs = toObservable(hoverSignal);
103
+ const [enters, exits] = partition(hoverObs, hovered => hovered);
104
+ const waitedEnters = enters.pipe(switchMap(enter => race(of(enter).pipe(delay(this.expandDelay())), exits, this.manualExpandUnprevented$)), filter(result => Boolean(result)), map(() => this.element.nativeElement.matches(':hover')));
105
+ return merge(waitedEnters, exits);
106
+ }
107
+ setupExpandFromActivation() {
108
+ const userEvents = merge(this.clicked$, this.activationKeyPressed$);
109
+ // Emit anytime that the user clicks, or presses space/enter inside the nav,
110
+ // AND the ensuing event is not prevented when emitted to parent components.
111
+ return userEvents.pipe(takeUntilDestroyed(this.destroyRef), map(event => {
112
+ const expandEvent = new CollapsibleNavExpansionEvent(event);
113
+ this.manualExpand.emit(expandEvent);
114
+ return expandEvent;
115
+ }), filter(expandEvent => !expandEvent.expandPrevented));
116
+ }
64
117
  get isCollapsed() {
65
118
  return this.effectiveCollapsed();
66
119
  }
@@ -75,14 +128,14 @@ class NovoCollapsibleNavComponent {
75
128
  this.isHovered.set(false);
76
129
  }
77
130
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NovoCollapsibleNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
78
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.19", type: NovoCollapsibleNavComponent, isStandalone: false, selector: "novo-collapsible-nav", inputs: { collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, expandedWidth: { classPropertyName: "expandedWidth", publicName: "expandedWidth", isSignal: true, isRequired: false, transformFunction: null }, collapsedWidth: { classPropertyName: "collapsedWidth", publicName: "collapsedWidth", isSignal: true, isRequired: false, transformFunction: null }, overlayOnHover: { classPropertyName: "overlayOnHover", publicName: "overlayOnHover", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" }, properties: { "@expandCollapse": "this.expandCollapseState", "class.novo-collapsible-nav-collapsed": "this.isCollapsed" }, classAttribute: "novo-collapsible-nav" }, exportAs: ["novoCollapsibleNav"], ngImport: i0, template: "<div class=\"novo-collapsible-nav-header\">\n <ng-content select=\"[novo-collapsible-nav-header]\"></ng-content>\n</div>\n<div class=\"novo-collapsible-nav-body\">\n <ng-content select=\"[novo-collapsible-nav-body]\"></ng-content>\n</div>\n<div class=\"novo-collapsible-nav-footer\">\n <ng-content select=\"[novo-collapsible-nav-footer]\"></ng-content>\n</div>\n", styles: [".novo-collapsible-nav{display:flex;flex-direction:column;height:100%;overflow:hidden;background:var(--background-bright)}.novo-collapsible-nav .novo-collapsible-nav-header{flex:0 0 auto}.novo-collapsible-nav .novo-collapsible-nav-body{flex:1 1 auto;overflow:hidden auto}.novo-collapsible-nav .novo-collapsible-nav-footer{flex:0 0 auto}\n"], animations: [novoCollapsibleNavAnimations.expandCollapse], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
131
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.19", type: NovoCollapsibleNavComponent, isStandalone: false, selector: "novo-collapsible-nav", inputs: { collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, expandedWidth: { classPropertyName: "expandedWidth", publicName: "expandedWidth", isSignal: true, isRequired: false, transformFunction: null }, collapsedWidth: { classPropertyName: "collapsedWidth", publicName: "collapsedWidth", isSignal: true, isRequired: false, transformFunction: null }, expandDelay: { classPropertyName: "expandDelay", publicName: "expandDelay", isSignal: true, isRequired: false, transformFunction: null }, overlayOnHover: { classPropertyName: "overlayOnHover", publicName: "overlayOnHover", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange", expandDelay: "expandDelayChange", hoveredChange: "hoveredChange", transitionChange: "transitionChange", manualExpand: "manualExpand" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "@expandCollapse.start": "transitionStart($event)", "@expandCollapse.done": "transitionEnd($event)" }, properties: { "@expandCollapse": "this.expandCollapseState", "class.novo-collapsible-nav-collapsed": "this.isCollapsed" }, classAttribute: "novo-collapsible-nav" }, exportAs: ["novoCollapsibleNav"], ngImport: i0, template: "<div class=\"novo-collapsible-nav-header\">\n <ng-content select=\"[novo-collapsible-nav-header]\"></ng-content>\n</div>\n<div class=\"novo-collapsible-nav-body\">\n <ng-content select=\"[novo-collapsible-nav-body]\"></ng-content>\n</div>\n<div class=\"novo-collapsible-nav-footer\">\n <ng-content select=\"[novo-collapsible-nav-footer]\"></ng-content>\n</div>\n", styles: [".novo-collapsible-nav{display:flex;flex-direction:column;height:100%;overflow:hidden;background:var(--background-bright)}.novo-collapsible-nav .novo-collapsible-nav-header{flex:0 0 auto}.novo-collapsible-nav .novo-collapsible-nav-body{flex:1 1 auto;overflow:hidden auto}.novo-collapsible-nav .novo-collapsible-nav-footer{flex:0 0 auto}\n"], animations: [novoCollapsibleNavAnimations.expandCollapse], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
79
132
  }
80
133
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NovoCollapsibleNavComponent, decorators: [{
81
134
  type: Component,
82
135
  args: [{ selector: 'novo-collapsible-nav', exportAs: 'novoCollapsibleNav', animations: [novoCollapsibleNavAnimations.expandCollapse], host: {
83
136
  class: 'novo-collapsible-nav',
84
137
  }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: false, template: "<div class=\"novo-collapsible-nav-header\">\n <ng-content select=\"[novo-collapsible-nav-header]\"></ng-content>\n</div>\n<div class=\"novo-collapsible-nav-body\">\n <ng-content select=\"[novo-collapsible-nav-body]\"></ng-content>\n</div>\n<div class=\"novo-collapsible-nav-footer\">\n <ng-content select=\"[novo-collapsible-nav-footer]\"></ng-content>\n</div>\n", styles: [".novo-collapsible-nav{display:flex;flex-direction:column;height:100%;overflow:hidden;background:var(--background-bright)}.novo-collapsible-nav .novo-collapsible-nav-header{flex:0 0 auto}.novo-collapsible-nav .novo-collapsible-nav-body{flex:1 1 auto;overflow:hidden auto}.novo-collapsible-nav .novo-collapsible-nav-footer{flex:0 0 auto}\n"] }]
85
- }], ctorParameters: () => [], propDecorators: { collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }, { type: i0.Output, args: ["collapsedChange"] }], expandedWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandedWidth", required: false }] }], collapsedWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsedWidth", required: false }] }], overlayOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayOnHover", required: false }] }], onMouseEnter: [{
138
+ }], ctorParameters: () => [], propDecorators: { collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }, { type: i0.Output, args: ["collapsedChange"] }], expandedWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandedWidth", required: false }] }], collapsedWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsedWidth", required: false }] }], expandDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandDelay", required: false }] }, { type: i0.Output, args: ["expandDelayChange"] }], overlayOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayOnHover", required: false }] }], hoveredChange: [{ type: i0.Output, args: ["hoveredChange"] }], transitionChange: [{ type: i0.Output, args: ["transitionChange"] }], manualExpand: [{ type: i0.Output, args: ["manualExpand"] }], onMouseEnter: [{
86
139
  type: HostListener,
87
140
  args: ['mouseenter']
88
141
  }], onMouseLeave: [{
@@ -91,6 +144,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
91
144
  }], expandCollapseState: [{
92
145
  type: HostBinding,
93
146
  args: ['@expandCollapse']
147
+ }], transitionStart: [{
148
+ type: HostListener,
149
+ args: ['@expandCollapse.start', ['$event']]
150
+ }], transitionEnd: [{
151
+ type: HostListener,
152
+ args: ['@expandCollapse.done', ['$event']]
94
153
  }], isCollapsed: [{
95
154
  type: HostBinding,
96
155
  args: ['class.novo-collapsible-nav-collapsed']
@@ -322,13 +381,13 @@ class NovoSidenavComponent {
322
381
  // Note this has to be async in order to avoid some issues with two-bindings (see #8872).
323
382
  new EventEmitter(/* isAsync */ true);
324
383
  /** Event emitted when the drawer has been opened. */
325
- this._openedStream = this.openedChange.pipe(filter((o) => o), map(() => { }));
384
+ this._openedStream = this.openedChange.pipe(filter$1((o) => o), map$1(() => { }));
326
385
  /** Event emitted when the drawer has started opening. */
327
- this.openedStart = this._animationStarted.pipe(filter((e) => e.fromState !== e.toState && e.toState.indexOf('open') === 0), mapTo(undefined));
386
+ this.openedStart = this._animationStarted.pipe(filter$1((e) => e.fromState !== e.toState && e.toState.indexOf('open') === 0), mapTo(undefined));
328
387
  /** Event emitted when the drawer has been closed. */
329
- this._closedStream = this.openedChange.pipe(filter((o) => !o), map(() => { }));
388
+ this._closedStream = this.openedChange.pipe(filter$1((o) => !o), map$1(() => { }));
330
389
  /** Event emitted when the drawer has started closing. */
331
- this.closedStart = this._animationStarted.pipe(filter((e) => e.fromState !== e.toState && e.toState === 'void'), mapTo(undefined));
390
+ this.closedStart = this._animationStarted.pipe(filter$1((e) => e.fromState !== e.toState && e.toState === 'void'), mapTo(undefined));
332
391
  /** Emits when the component is destroyed. */
333
392
  this._destroyed = new Subject();
334
393
  /** Event emitted when the drawer's position changes. */
@@ -356,7 +415,7 @@ class NovoSidenavComponent {
356
415
  */
357
416
  this._ngZone.runOutsideAngular(() => {
358
417
  fromEvent(this._elementRef.nativeElement, 'keydown')
359
- .pipe(filter((event) => {
418
+ .pipe(filter$1((event) => {
360
419
  return event.key === "Escape" /* Key.Escape */ && !this.disableClose && !hasModifierKey(event);
361
420
  }), takeUntil(this._destroyed))
362
421
  .subscribe((event) => this._ngZone.run(() => {
@@ -767,7 +826,7 @@ class NovoLayoutContainer {
767
826
  */
768
827
  _watchDrawerToggle(drawer) {
769
828
  drawer._animationStarted
770
- .pipe(filter((event) => event.fromState !== event.toState), takeUntil(this._drawers.changes))
829
+ .pipe(filter$1((event) => event.fromState !== event.toState), takeUntil(this._drawers.changes))
771
830
  .subscribe((event) => {
772
831
  // Set the transition class on the container so that the animations occur. This should not
773
832
  // be set initially because animations should only be triggered via a change in state.
@@ -942,5 +1001,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
942
1001
  * Generated bundle index. Do not edit.
943
1002
  */
944
1003
 
945
- export { NOVO_LAYOUT_CONTAINER, NOVO_LAYOUT_DEFAULT_AUTOSIZE, NOVO_LAYOUT_DEFAULT_AUTOSIZE_FACTORY, NovoCollapsibleNavComponent, NovoLayoutContainer, NovoLayoutContent, NovoLayoutModule, NovoRailComponent, NovoSidenavComponent, throwNovoDuplicatedSidenavError };
1004
+ export { CollapsibleNavExpansionEvent, NOVO_LAYOUT_CONTAINER, NOVO_LAYOUT_DEFAULT_AUTOSIZE, NOVO_LAYOUT_DEFAULT_AUTOSIZE_FACTORY, NovoCollapsibleNavComponent, NovoLayoutContainer, NovoLayoutContent, NovoLayoutModule, NovoRailComponent, NovoSidenavComponent, throwNovoDuplicatedSidenavError };
946
1005
  //# sourceMappingURL=novo-elements-elements-layout.mjs.map