@hermes-ui/angular 0.1.5 → 0.1.7

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 (130) hide show
  1. package/README.md +52 -52
  2. package/button/_properties.buttons.scss +387 -387
  3. package/fesm2022/hermes-ui-angular-accordion.mjs.map +1 -1
  4. package/fesm2022/hermes-ui-angular-addons-a11y.mjs.map +1 -1
  5. package/fesm2022/hermes-ui-angular-addons-card-container.mjs.map +1 -1
  6. package/fesm2022/hermes-ui-angular-addons-certificate-viewer.mjs.map +1 -1
  7. package/fesm2022/hermes-ui-angular-addons-datagrid-filters.mjs.map +1 -1
  8. package/fesm2022/hermes-ui-angular-addons-datagrid.mjs +28 -28
  9. package/fesm2022/hermes-ui-angular-addons-datagrid.mjs.map +1 -1
  10. package/fesm2022/hermes-ui-angular-addons-dialog.mjs.map +1 -1
  11. package/fesm2022/hermes-ui-angular-addons-menu.mjs +8 -8
  12. package/fesm2022/hermes-ui-angular-addons-menu.mjs.map +1 -1
  13. package/fesm2022/hermes-ui-angular-addons-property-view.mjs.map +1 -1
  14. package/fesm2022/hermes-ui-angular-addons-stepper.mjs.map +1 -1
  15. package/fesm2022/hermes-ui-angular-addons-tabs.mjs.map +1 -1
  16. package/fesm2022/hermes-ui-angular-addons-testing.mjs +78 -78
  17. package/fesm2022/hermes-ui-angular-addons-testing.mjs.map +1 -1
  18. package/fesm2022/hermes-ui-angular-addons-theme-builder.mjs +1 -1
  19. package/fesm2022/hermes-ui-angular-addons-theme-builder.mjs.map +1 -1
  20. package/fesm2022/hermes-ui-angular-addons-var.mjs.map +1 -1
  21. package/fesm2022/hermes-ui-angular-addons-wizard.mjs.map +1 -1
  22. package/fesm2022/hermes-ui-angular-addons-workflow.mjs.map +1 -1
  23. package/fesm2022/hermes-ui-angular-button.mjs +74 -74
  24. package/fesm2022/hermes-ui-angular-button.mjs.map +1 -1
  25. package/fesm2022/hermes-ui-angular-card.mjs +48 -0
  26. package/fesm2022/hermes-ui-angular-card.mjs.map +1 -0
  27. package/fesm2022/hermes-ui-angular-collapsible-panel.mjs.map +1 -1
  28. package/fesm2022/hermes-ui-angular-data-datagrid.mjs +926 -926
  29. package/fesm2022/hermes-ui-angular-data-datagrid.mjs.map +1 -1
  30. package/fesm2022/hermes-ui-angular-data-stack-view.mjs +114 -114
  31. package/fesm2022/hermes-ui-angular-data-stack-view.mjs.map +1 -1
  32. package/fesm2022/hermes-ui-angular-data-tree-view.mjs +12 -12
  33. package/fesm2022/hermes-ui-angular-data-tree-view.mjs.map +1 -1
  34. package/fesm2022/hermes-ui-angular-data.mjs.map +1 -1
  35. package/fesm2022/hermes-ui-angular-divider.mjs +46 -0
  36. package/fesm2022/hermes-ui-angular-divider.mjs.map +1 -0
  37. package/fesm2022/hermes-ui-angular-emphasis-alert.mjs.map +1 -1
  38. package/fesm2022/hermes-ui-angular-emphasis-badge.mjs.map +1 -1
  39. package/fesm2022/hermes-ui-angular-emphasis-label.mjs +16 -16
  40. package/fesm2022/hermes-ui-angular-emphasis-label.mjs.map +1 -1
  41. package/fesm2022/hermes-ui-angular-emphasis.mjs.map +1 -1
  42. package/fesm2022/hermes-ui-angular-forms-checkbox.mjs +50 -50
  43. package/fesm2022/hermes-ui-angular-forms-checkbox.mjs.map +1 -1
  44. package/fesm2022/hermes-ui-angular-forms-combobox.mjs +126 -126
  45. package/fesm2022/hermes-ui-angular-forms-combobox.mjs.map +1 -1
  46. package/fesm2022/hermes-ui-angular-forms-common.mjs.map +1 -1
  47. package/fesm2022/hermes-ui-angular-forms-datalist.mjs +46 -46
  48. package/fesm2022/hermes-ui-angular-forms-datalist.mjs.map +1 -1
  49. package/fesm2022/hermes-ui-angular-forms-datepicker.mjs +375 -375
  50. package/fesm2022/hermes-ui-angular-forms-datepicker.mjs.map +1 -1
  51. package/fesm2022/hermes-ui-angular-forms-file-input.mjs +190 -190
  52. package/fesm2022/hermes-ui-angular-forms-file-input.mjs.map +1 -1
  53. package/fesm2022/hermes-ui-angular-forms-input.mjs +52 -52
  54. package/fesm2022/hermes-ui-angular-forms-input.mjs.map +1 -1
  55. package/fesm2022/hermes-ui-angular-forms-native-select.mjs +38 -38
  56. package/fesm2022/hermes-ui-angular-forms-native-select.mjs.map +1 -1
  57. package/fesm2022/hermes-ui-angular-forms-number-input.mjs +80 -80
  58. package/fesm2022/hermes-ui-angular-forms-number-input.mjs.map +1 -1
  59. package/fesm2022/hermes-ui-angular-forms-password.mjs +58 -58
  60. package/fesm2022/hermes-ui-angular-forms-password.mjs.map +1 -1
  61. package/fesm2022/hermes-ui-angular-forms-radio.mjs +50 -50
  62. package/fesm2022/hermes-ui-angular-forms-radio.mjs.map +1 -1
  63. package/fesm2022/hermes-ui-angular-forms-range.mjs +44 -44
  64. package/fesm2022/hermes-ui-angular-forms-range.mjs.map +1 -1
  65. package/fesm2022/hermes-ui-angular-forms-select.mjs +8 -8
  66. package/fesm2022/hermes-ui-angular-forms-select.mjs.map +1 -1
  67. package/fesm2022/hermes-ui-angular-forms-textarea.mjs +38 -38
  68. package/fesm2022/hermes-ui-angular-forms-textarea.mjs.map +1 -1
  69. package/fesm2022/hermes-ui-angular-forms.mjs.map +1 -1
  70. package/fesm2022/hermes-ui-angular-icon.mjs.map +1 -1
  71. package/fesm2022/hermes-ui-angular-layout-breadcrumbs.mjs.map +1 -1
  72. package/fesm2022/hermes-ui-angular-layout-main-container.mjs.map +1 -1
  73. package/fesm2022/hermes-ui-angular-layout-nav.mjs +46 -46
  74. package/fesm2022/hermes-ui-angular-layout-nav.mjs.map +1 -1
  75. package/fesm2022/hermes-ui-angular-layout-tabs.mjs +146 -146
  76. package/fesm2022/hermes-ui-angular-layout-tabs.mjs.map +1 -1
  77. package/fesm2022/hermes-ui-angular-layout-vertical-nav.mjs +31 -3
  78. package/fesm2022/hermes-ui-angular-layout-vertical-nav.mjs.map +1 -1
  79. package/fesm2022/hermes-ui-angular-layout.mjs.map +1 -1
  80. package/fesm2022/hermes-ui-angular-modal.mjs.map +1 -1
  81. package/fesm2022/hermes-ui-angular-pagination.mjs +116 -0
  82. package/fesm2022/hermes-ui-angular-pagination.mjs.map +1 -0
  83. package/fesm2022/hermes-ui-angular-popover-common.mjs +26 -3
  84. package/fesm2022/hermes-ui-angular-popover-common.mjs.map +1 -1
  85. package/fesm2022/hermes-ui-angular-popover-dropdown.mjs.map +1 -1
  86. package/fesm2022/hermes-ui-angular-popover-signpost.mjs +66 -66
  87. package/fesm2022/hermes-ui-angular-popover-signpost.mjs.map +1 -1
  88. package/fesm2022/hermes-ui-angular-popover-tooltip.mjs.map +1 -1
  89. package/fesm2022/hermes-ui-angular-popover.mjs.map +1 -1
  90. package/fesm2022/hermes-ui-angular-progress-progress-bars.mjs +10 -10
  91. package/fesm2022/hermes-ui-angular-progress-progress-bars.mjs.map +1 -1
  92. package/fesm2022/hermes-ui-angular-progress-spinner.mjs.map +1 -1
  93. package/fesm2022/hermes-ui-angular-stepper.mjs.map +1 -1
  94. package/fesm2022/hermes-ui-angular-timeline.mjs.map +1 -1
  95. package/fesm2022/hermes-ui-angular-toast.mjs +4 -4
  96. package/fesm2022/hermes-ui-angular-toast.mjs.map +1 -1
  97. package/fesm2022/hermes-ui-angular-utils-conditional.mjs.map +1 -1
  98. package/fesm2022/hermes-ui-angular-utils.mjs.map +1 -1
  99. package/fesm2022/hermes-ui-angular-wizard.mjs +56 -56
  100. package/fesm2022/hermes-ui-angular-wizard.mjs.map +1 -1
  101. package/fesm2022/hermes-ui-angular.mjs +16 -3
  102. package/fesm2022/hermes-ui-angular.mjs.map +1 -1
  103. package/hermes-ui.scss +7 -7
  104. package/layout/vertical-nav/_mixins.vertical-nav.scss +3 -7
  105. package/layout/vertical-nav/_properties.vertical-nav.scss +10 -5
  106. package/layout/vertical-nav/_variables.vertical-nav.scss +2 -0
  107. package/layout/vertical-nav/_vertical-nav.clarity.scss +14 -0
  108. package/package.json +13 -1
  109. package/popover/dropdown/_dropdown.clarity.scss +8 -7
  110. package/popover/dropdown/_menu-mixins.clarity.scss +22 -6
  111. package/popover/dropdown/_properties.dropdown.scss +20 -0
  112. package/popover/dropdown/_variables.dropdown.scss +7 -0
  113. package/toast/README.md +65 -65
  114. package/toast/_properties.toast.scss +56 -56
  115. package/toast/_toast.clarity.scss +190 -190
  116. package/toast/_variables.toast.scss +33 -33
  117. package/types/hermes-ui-angular-card.d.ts +24 -0
  118. package/types/hermes-ui-angular-card.d.ts.map +1 -0
  119. package/types/hermes-ui-angular-data-datagrid.d.ts.map +1 -1
  120. package/types/hermes-ui-angular-divider.d.ts +20 -0
  121. package/types/hermes-ui-angular-divider.d.ts.map +1 -0
  122. package/types/hermes-ui-angular-layout-vertical-nav.d.ts +11 -1
  123. package/types/hermes-ui-angular-layout-vertical-nav.d.ts.map +1 -1
  124. package/types/hermes-ui-angular-pagination.d.ts +52 -0
  125. package/types/hermes-ui-angular-pagination.d.ts.map +1 -0
  126. package/types/hermes-ui-angular-popover-common.d.ts +4 -3
  127. package/types/hermes-ui-angular-popover-common.d.ts.map +1 -1
  128. package/types/hermes-ui-angular-wizard.d.ts.map +1 -1
  129. package/types/hermes-ui-angular.d.ts +23 -17
  130. package/types/hermes-ui-angular.d.ts.map +1 -1
@@ -0,0 +1,116 @@
1
+ import * as i0 from '@angular/core';
2
+ import { ChangeDetectionStrategy, ViewEncapsulation, Component, Input, NgModule } from '@angular/core';
3
+ import { HermesIcon } from '@hermes-ui/angular/icon';
4
+
5
+ /*
6
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
7
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
8
+ * This software is released under MIT license.
9
+ * The full license information can be found in LICENSE in the root directory of this project.
10
+ */
11
+ /**
12
+ * @beta This mirrors the `@beta` status of `hermes-pagination` in `@hermes-ui/core` - the API may still change.
13
+ *
14
+ * Lays out pagination controls (`<hermes-pagination-button>`, a page indicator, an optional
15
+ * jump-to-page `hermesInput`) in a row. Always provide an `aria-label` describing what is being paginated.
16
+ *
17
+ * ```html
18
+ * <hermes-pagination aria-label="Pagination">
19
+ * <hermes-pagination-button action="first" ariaLabel="First page" [disabled]="page === 1"></hermes-pagination-button>
20
+ * <hermes-pagination-button action="prev" ariaLabel="Previous page" [disabled]="page === 1"></hermes-pagination-button>
21
+ * <span aria-label="current page">{{ page }} / {{ totalPages }}</span>
22
+ * <hermes-pagination-button action="next" ariaLabel="Next page" [disabled]="page === totalPages"></hermes-pagination-button>
23
+ * <hermes-pagination-button action="last" ariaLabel="Last page" [disabled]="page === totalPages"></hermes-pagination-button>
24
+ * </hermes-pagination>
25
+ * ```
26
+ */
27
+ class HermesPagination {
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: HermesPagination, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: HermesPagination, isStandalone: true, selector: "hermes-pagination", ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{--color: var(--hermes-global-typography-color-500, black);--font-size: var(--hermes-global-typography-font-size-3, .8125rem);--action-color: var(--color);display:flex;align-items:center;flex-wrap:nowrap;gap:var(--hermes-global-space-4);color:var(--color);font-size:var(--font-size)}::slotted(hermes-input[hermes-pagination-number]){--background: var(--hermes-alias-object-container-background);--border-radius: var(--hermes-alias-object-border-radius-100);--border: var(--hermes-alias-object-border-width-100) solid var(--hermes-alias-object-border-color);--font-size: var(--hermes-global-typography-font-size-3, .8125rem);--text-align: center}::slotted(span){display:block}::slotted(hermes-pagination-button:not([disabled])){--color: var(--action-color)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ExperimentalIsolatedShadowDom }); }
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: HermesPagination, decorators: [{
32
+ type: Component,
33
+ args: [{ selector: 'hermes-pagination', template: `<ng-content></ng-content>`, encapsulation: ViewEncapsulation.ExperimentalIsolatedShadowDom, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--color: var(--hermes-global-typography-color-500, black);--font-size: var(--hermes-global-typography-font-size-3, .8125rem);--action-color: var(--color);display:flex;align-items:center;flex-wrap:nowrap;gap:var(--hermes-global-space-4);color:var(--color);font-size:var(--font-size)}::slotted(hermes-input[hermes-pagination-number]){--background: var(--hermes-alias-object-container-background);--border-radius: var(--hermes-alias-object-border-radius-100);--border: var(--hermes-alias-object-border-width-100) solid var(--hermes-alias-object-border-color);--font-size: var(--hermes-global-typography-font-size-3, .8125rem);--text-align: center}::slotted(span){display:block}::slotted(hermes-pagination-button:not([disabled])){--color: var(--action-color)}\n"] }]
34
+ }] });
35
+
36
+ /*
37
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
38
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
39
+ * This software is released under MIT license.
40
+ * The full license information can be found in LICENSE in the root directory of this project.
41
+ */
42
+ // Mirrors getPaginationIconConfig() in @hermes-ui/core's pagination/utils.ts.
43
+ const ICON_CONFIG = {
44
+ first: { shape: 'step-forward-2', direction: 'down' },
45
+ prev: { shape: 'angle', direction: 'left' },
46
+ next: { shape: 'angle', direction: 'right' },
47
+ last: { shape: 'step-forward-2', direction: 'up' },
48
+ };
49
+ /**
50
+ * @beta Mirrors the `@beta` status of `hermes-pagination-button` in `@hermes-ui/core`.
51
+ *
52
+ * An icon-only action button meant to sit inside `<hermes-pagination>`. Always set `ariaLabel`
53
+ * (e.g. "First page", "Previous page") since the button carries no visible text.
54
+ */
55
+ class HermesPaginationButton {
56
+ constructor() {
57
+ this.action = 'next';
58
+ this.disabled = false;
59
+ }
60
+ get icon() {
61
+ return ICON_CONFIG[this.action] ?? { shape: 'ellipsis-vertical', direction: 'up' };
62
+ }
63
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: HermesPaginationButton, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
64
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.22", type: HermesPaginationButton, isStandalone: true, selector: "hermes-pagination-button", inputs: { action: "action", disabled: "disabled", ariaLabel: "ariaLabel" }, ngImport: i0, template: `
65
+ <button type="button" class="private-host" [disabled]="disabled" [attr.aria-label]="ariaLabel">
66
+ <hermes-icon [shape]="icon.shape" [direction]="icon.direction"></hermes-icon>
67
+ </button>
68
+ `, isInline: true, styles: [":host{--icon-size: var(--hermes-global-space-7);--color: var(--hermes-global-typography-color-300, hsl(198, 23%, 23%));--color-hover: var(--hermes-alias-object-interaction-color-hover);--color-active: var(--hermes-alias-object-interaction-color-active);--color-disabled: var(--hermes-alias-object-interaction-color-disabled);--outline: var(--hermes-alias-object-interaction-outline);--outline-offset: var(--hermes-alias-object-interaction-outline-offset);display:inline-block}.private-host{display:flex;align-items:center;justify-content:center;min-width:var(--icon-size);min-height:var(--icon-size);padding:0;border:none;background:transparent;color:var(--color);cursor:pointer}.private-host:hover:not(:disabled){color:var(--color-hover)}.private-host:active:not(:disabled){color:var(--color-active);transform:translateY(1px)}.private-host:disabled{color:var(--color-disabled);cursor:default}.private-host:focus-visible{outline:var(--outline);outline-offset:var(--outline-offset)}.private-host hermes-icon{width:var(--icon-size);height:var(--icon-size);pointer-events:none}\n"], dependencies: [{ kind: "component", type: HermesIcon, selector: "hermes-icon, hermes-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ExperimentalIsolatedShadowDom }); }
69
+ }
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: HermesPaginationButton, decorators: [{
71
+ type: Component,
72
+ args: [{ selector: 'hermes-pagination-button', template: `
73
+ <button type="button" class="private-host" [disabled]="disabled" [attr.aria-label]="ariaLabel">
74
+ <hermes-icon [shape]="icon.shape" [direction]="icon.direction"></hermes-icon>
75
+ </button>
76
+ `, encapsulation: ViewEncapsulation.ExperimentalIsolatedShadowDom, changeDetection: ChangeDetectionStrategy.OnPush, imports: [HermesIcon], styles: [":host{--icon-size: var(--hermes-global-space-7);--color: var(--hermes-global-typography-color-300, hsl(198, 23%, 23%));--color-hover: var(--hermes-alias-object-interaction-color-hover);--color-active: var(--hermes-alias-object-interaction-color-active);--color-disabled: var(--hermes-alias-object-interaction-color-disabled);--outline: var(--hermes-alias-object-interaction-outline);--outline-offset: var(--hermes-alias-object-interaction-outline-offset);display:inline-block}.private-host{display:flex;align-items:center;justify-content:center;min-width:var(--icon-size);min-height:var(--icon-size);padding:0;border:none;background:transparent;color:var(--color);cursor:pointer}.private-host:hover:not(:disabled){color:var(--color-hover)}.private-host:active:not(:disabled){color:var(--color-active);transform:translateY(1px)}.private-host:disabled{color:var(--color-disabled);cursor:default}.private-host:focus-visible{outline:var(--outline);outline-offset:var(--outline-offset)}.private-host hermes-icon{width:var(--icon-size);height:var(--icon-size);pointer-events:none}\n"] }]
77
+ }], propDecorators: { action: [{
78
+ type: Input
79
+ }], disabled: [{
80
+ type: Input
81
+ }], ariaLabel: [{
82
+ type: Input
83
+ }] } });
84
+
85
+ /*
86
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
87
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
88
+ * This software is released under MIT license.
89
+ * The full license information can be found in LICENSE in the root directory of this project.
90
+ */
91
+ class HermesPaginationModule {
92
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: HermesPaginationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
93
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.22", ngImport: i0, type: HermesPaginationModule, imports: [HermesPagination, HermesPaginationButton], exports: [HermesPagination, HermesPaginationButton] }); }
94
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: HermesPaginationModule, imports: [HermesPaginationButton] }); }
95
+ }
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: HermesPaginationModule, decorators: [{
97
+ type: NgModule,
98
+ args: [{
99
+ imports: [HermesPagination, HermesPaginationButton],
100
+ exports: [HermesPagination, HermesPaginationButton],
101
+ }]
102
+ }] });
103
+
104
+ /*
105
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
106
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
107
+ * This software is released under MIT license.
108
+ * The full license information can be found in LICENSE in the root directory of this project.
109
+ */
110
+
111
+ /**
112
+ * Generated bundle index. Do not edit.
113
+ */
114
+
115
+ export { HermesPagination, HermesPaginationButton, HermesPaginationModule };
116
+ //# sourceMappingURL=hermes-ui-angular-pagination.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-ui-angular-pagination.mjs","sources":["../../../pagination/pagination.ts","../../../pagination/pagination-button.ts","../../../pagination/pagination.module.ts","../../../pagination/index.ts","../../../pagination/hermes-ui-angular-pagination.ts"],"sourcesContent":["/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * @beta This mirrors the `@beta` status of `hermes-pagination` in `@hermes-ui/core` - the API may still change.\r\n *\r\n * Lays out pagination controls (`<hermes-pagination-button>`, a page indicator, an optional\r\n * jump-to-page `hermesInput`) in a row. Always provide an `aria-label` describing what is being paginated.\r\n *\r\n * ```html\r\n * <hermes-pagination aria-label=\"Pagination\">\r\n * <hermes-pagination-button action=\"first\" ariaLabel=\"First page\" [disabled]=\"page === 1\"></hermes-pagination-button>\r\n * <hermes-pagination-button action=\"prev\" ariaLabel=\"Previous page\" [disabled]=\"page === 1\"></hermes-pagination-button>\r\n * <span aria-label=\"current page\">{{ page }} / {{ totalPages }}</span>\r\n * <hermes-pagination-button action=\"next\" ariaLabel=\"Next page\" [disabled]=\"page === totalPages\"></hermes-pagination-button>\r\n * <hermes-pagination-button action=\"last\" ariaLabel=\"Last page\" [disabled]=\"page === totalPages\"></hermes-pagination-button>\r\n * </hermes-pagination>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'hermes-pagination',\r\n template: `<ng-content></ng-content>`,\r\n styleUrls: ['./pagination.component.scss'],\r\n encapsulation: ViewEncapsulation.ExperimentalIsolatedShadowDom,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class HermesPagination {}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\r\nimport { HermesIcon } from '@hermes-ui/angular/icon';\r\n\r\nexport type HermesPaginationAction = 'first' | 'prev' | 'next' | 'last';\r\n\r\ninterface PaginationIconConfig {\r\n shape: string;\r\n direction: 'up' | 'right' | 'down' | 'left';\r\n}\r\n\r\n// Mirrors getPaginationIconConfig() in @hermes-ui/core's pagination/utils.ts.\r\nconst ICON_CONFIG: Record<HermesPaginationAction, PaginationIconConfig> = {\r\n first: { shape: 'step-forward-2', direction: 'down' },\r\n prev: { shape: 'angle', direction: 'left' },\r\n next: { shape: 'angle', direction: 'right' },\r\n last: { shape: 'step-forward-2', direction: 'up' },\r\n};\r\n\r\n/**\r\n * @beta Mirrors the `@beta` status of `hermes-pagination-button` in `@hermes-ui/core`.\r\n *\r\n * An icon-only action button meant to sit inside `<hermes-pagination>`. Always set `ariaLabel`\r\n * (e.g. \"First page\", \"Previous page\") since the button carries no visible text.\r\n */\r\n@Component({\r\n selector: 'hermes-pagination-button',\r\n template: `\r\n <button type=\"button\" class=\"private-host\" [disabled]=\"disabled\" [attr.aria-label]=\"ariaLabel\">\r\n <hermes-icon [shape]=\"icon.shape\" [direction]=\"icon.direction\"></hermes-icon>\r\n </button>\r\n `,\r\n styleUrls: ['./pagination-button.component.scss'],\r\n encapsulation: ViewEncapsulation.ExperimentalIsolatedShadowDom,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [HermesIcon],\r\n})\r\nexport class HermesPaginationButton {\r\n @Input() action: HermesPaginationAction = 'next';\r\n @Input() disabled = false;\r\n @Input() ariaLabel: string;\r\n\r\n get icon(): PaginationIconConfig {\r\n return ICON_CONFIG[this.action] ?? { shape: 'ellipsis-vertical', direction: 'up' };\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { HermesPaginationButton } from './pagination-button';\r\nimport { HermesPagination } from './pagination';\r\n\r\n@NgModule({\r\n imports: [HermesPagination, HermesPaginationButton],\r\n exports: [HermesPagination, HermesPaginationButton],\r\n})\r\nexport class HermesPaginationModule {}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nexport * from './pagination';\r\nexport * from './pagination-button';\r\nexport * from './pagination.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -577,7 +577,10 @@ function getContentPosition(key) {
577
577
  */
578
578
  /** @dynamic */
579
579
  class HermesPopoverContent {
580
- constructor(element, container, template, overlayContainer, parent, overlay, popoverService, zone, platformId) {
580
+ constructor(element, container, template, overlayContainer, parent, overlay, popoverService, zone, platformId,
581
+ // Host directive, so this resolves to the SAME change detector as whatever
582
+ // component hosts it (HermesSelectContent, HermesDropdownMenu, etc).
583
+ changeDetectorRef) {
581
584
  this.container = container;
582
585
  this.template = template;
583
586
  this.parent = parent;
@@ -585,6 +588,7 @@ class HermesPopoverContent {
585
588
  this.popoverService = popoverService;
586
589
  this.zone = zone;
587
590
  this.platformId = platformId;
591
+ this.changeDetectorRef = changeDetectorRef;
588
592
  this._outsideClickClose = true;
589
593
  this._scrollToClose = false;
590
594
  this.popoverType = HermesPopoverType.DEFAULT;
@@ -687,6 +691,18 @@ class HermesPopoverContent {
687
691
  else {
688
692
  this.closePopover();
689
693
  }
694
+ // `isOffScreen`/`is-off-screen`-style host bindings on the component hosting this
695
+ // directive (HermesSelectContent, HermesDropdownMenu, HermesSignpostContent) read
696
+ // `popoverService.open` directly, not through a signal or an Input - Angular has no
697
+ // way to know that value changed on its own. The event that flips it is usually a
698
+ // raw CDK-registered document listener (OverlayOutsideClickDispatcher), not a
699
+ // compiled Angular template event binding, so it never marks this component (or its
700
+ // OnPush ancestors) dirty by itself. Without this, closing/reopening a popover whose
701
+ // OnPush ancestor chain isn't independently marked dirty by something else in the
702
+ // same tick (e.g. a sibling value change) leaves the just-closed panel's host
703
+ // bindings stale: still `position: static` in its original spot instead of the
704
+ // off-screen-fixed placement `isOffScreen` is supposed to apply once closed.
705
+ this.changeDetectorRef.markForCheck();
690
706
  });
691
707
  }
692
708
  ngOnDestroy() {
@@ -901,6 +917,13 @@ class HermesPopoverContent {
901
917
  block: 'nearest',
902
918
  inline: 'nearest',
903
919
  });
920
+ // scrollIntoView() can itself move the page (e.g. the origin was partially hidden
921
+ // after a prior scroll), which happens after the overlay was already attached and
922
+ // positioned above. The scroll listeners that would normally catch this and
923
+ // reposition are only registered in the setTimeout below - too late for this
924
+ // specific scroll - so without this the panel is left floating at the pre-scroll
925
+ // coordinates instead of anchored to the origin's now-current position.
926
+ this.overlayRef.updatePosition();
904
927
  this.setupIntersectionObserver();
905
928
  }
906
929
  setTimeout(() => {
@@ -1024,7 +1047,7 @@ class HermesPopoverContent {
1024
1047
  }
1025
1048
  return popover;
1026
1049
  }
1027
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: HermesPopoverContent, deps: [{ token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i0.TemplateRef, optional: true }, { token: i1.OverlayContainer }, { token: HermesPopoverContent, optional: true, skipSelf: true }, { token: i1.Overlay }, { token: HermesPopoverService }, { token: i0.NgZone }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Directive }); }
1050
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: HermesPopoverContent, deps: [{ token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i0.TemplateRef, optional: true }, { token: i1.OverlayContainer }, { token: HermesPopoverContent, optional: true, skipSelf: true }, { token: i1.Overlay }, { token: HermesPopoverService }, { token: i0.NgZone }, { token: PLATFORM_ID }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
1028
1051
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.22", type: HermesPopoverContent, isStandalone: true, selector: "[hermesPopoverContent]", inputs: { open: ["hermesPopoverContent", "open"], contentAt: ["hermesPopoverContentAt", "contentAt"], availablePositions: ["hermesPopoverContentAvailablePositions", "availablePositions"], contentType: ["hermesPopoverContentType", "contentType"], outsideClickClose: ["hermesPopoverContentOutsideClickToClose", "outsideClickClose"], scrollToClose: ["hermesPopoverContentScrollToClose", "scrollToClose"], contentOrigin: ["hermesPopoverContentOrigin", "contentOrigin"] }, ngImport: i0 }); }
1029
1052
  }
1030
1053
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: HermesPopoverContent, decorators: [{
@@ -1044,7 +1067,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImpo
1044
1067
  }] }, { type: i0.NgZone }, { type: undefined, decorators: [{
1045
1068
  type: Inject,
1046
1069
  args: [PLATFORM_ID]
1047
- }] }], propDecorators: { open: [{
1070
+ }] }, { type: i0.ChangeDetectorRef }], propDecorators: { open: [{
1048
1071
  type: Input,
1049
1072
  args: ['hermesPopoverContent']
1050
1073
  }], contentAt: [{