ng-hub-ui-modal 22.14.2 → 22.14.4

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/README.md CHANGED
@@ -946,10 +946,18 @@ docs(modal): update CSS variable table
946
946
 
947
947
  ---
948
948
 
949
+ ## Commercial support
950
+
951
+ These libraries are maintained by [Carlos Morcillo Fernández](https://www.carlosmorcillo.com), a freelance frontend architect working with teams that build and maintain Angular applications.
952
+
953
+ If your team depends on Hub-UI and needs more than an issue thread can solve, that is my day job: architecture audits, design systems, Angular migrations and team mentoring. For projects that also need design and a full team, I run them through [Frog Hub](https://froghub.es), my development studio.
954
+
955
+ Have a look at [the services](https://www.carlosmorcillo.com/en/services/) or [tell me about your project](https://www.carlosmorcillo.com/en/contact/).
956
+
949
957
  ## Support & License
950
958
 
951
959
  If this library saves you time, consider supporting further development:
952
960
 
953
961
  ☕ [Buy me a coffee](https://www.buymeacoffee.com/carlosmorcillo)
954
962
 
955
- **MIT License** — © [Carlos Morcillo](https://www.carlosmorcillo.com)
963
+ **MIT License** — © [Carlos Morcillo Fernández](https://www.carlosmorcillo.com)
@@ -906,7 +906,7 @@ class HubModalWindow {
906
906
  }
907
907
  </div>
908
908
  </div>
909
- `, isInline: true, styles: ["@charset \"UTF-8\";body.hub-modal-open{overflow:hidden}:root{--hub-modal-zindex-base: var(--hub-sys-zindex-modal, 1055);--hub-modal-zindex: var(--hub-modal-zindex-base, var(--hub-sys-zindex-modal, 1055));--hub-modal-backdrop-zindex: calc(var(--hub-modal-zindex, var(--hub-sys-zindex-modal, 1055)) - 1);--hub-modal-backdrop-bg: var(--hub-ref-color-black, #000000);--hub-modal-backdrop-opacity: var(--hub-sys-opacity-50, .5);--hub-modal-backdrop-opacity-hidden: var(--hub-sys-opacity-0, 0);--hub-modal-backdrop-transition: opacity .15s linear}:where(.hub-modal){--hub-modal-accent: var(--hub-sys-color-primary, #0d6efd);--hub-modal-accent-emphasis: color-mix(in oklch, var(--hub-modal-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-modal-accent-subtle: color-mix(in oklch, var(--hub-modal-accent) 12%, var(--hub-sys-surface-page, #ffffff));--hub-modal-accent-on: oklch(from var(--hub-modal-accent) clamp(0, (.62 - l) * 1000, 1) 0 h);--hub-modal-accent-border: color-mix(in oklch, var(--hub-modal-accent) 35%, var(--hub-sys-surface-page, #ffffff));--hub-modal-accent-bar-width: 0;--hub-modal-width: auto;--hub-modal-max-width: 500px;--hub-modal-margin-y: 1.75rem;--hub-modal-margin-x: auto;--hub-modal-margin-top: var(--hub-modal-margin-y, 1.75rem);--hub-modal-margin-right: var(--hub-modal-margin-x, auto);--hub-modal-margin-bottom: var(--hub-modal-margin-y, 1.75rem);--hub-modal-margin-left: var(--hub-modal-margin-x, auto);--hub-modal-margin-block: calc(var(--hub-modal-margin-top, 1.75rem) + var(--hub-modal-margin-bottom, 1.75rem));--hub-modal-margin: var(--hub-modal-margin-top) var(--hub-modal-margin-right) var(--hub-modal-margin-bottom) var(--hub-modal-margin-left);--hub-modal-placement-start-margin-top: var(--hub-modal-margin-top, 1.75rem);--hub-modal-placement-start-margin-right: auto;--hub-modal-placement-start-margin-bottom: var(--hub-modal-margin-bottom, 1.75rem);--hub-modal-placement-start-margin-left: 0;--hub-modal-placement-start-margin-block: calc( var(--hub-modal-placement-start-margin-top, 1.75rem) + var(--hub-modal-placement-start-margin-bottom, 1.75rem) );--hub-modal-placement-start-margin: var(--hub-modal-placement-start-margin-top) var(--hub-modal-placement-start-margin-right) var(--hub-modal-placement-start-margin-bottom) var(--hub-modal-placement-start-margin-left);--hub-modal-placement-end-margin-top: var(--hub-modal-margin-top, 1.75rem);--hub-modal-placement-end-margin-right: 0;--hub-modal-placement-end-margin-bottom: var(--hub-modal-margin-bottom, 1.75rem);--hub-modal-placement-end-margin-left: auto;--hub-modal-placement-end-margin-block: calc( var(--hub-modal-placement-end-margin-top, 1.75rem) + var(--hub-modal-placement-end-margin-bottom, 1.75rem) );--hub-modal-placement-end-margin: var(--hub-modal-placement-end-margin-top) var(--hub-modal-placement-end-margin-right) var(--hub-modal-placement-end-margin-bottom) var(--hub-modal-placement-end-margin-left);--hub-modal-placement-top-margin-top: 0;--hub-modal-placement-top-margin-right: auto;--hub-modal-placement-top-margin-bottom: 0;--hub-modal-placement-top-margin-left: auto;--hub-modal-placement-top-margin-block: calc( var(--hub-modal-placement-top-margin-top, 0px) + var(--hub-modal-placement-top-margin-bottom, 0px) );--hub-modal-placement-top-margin: var(--hub-modal-placement-top-margin-top) var(--hub-modal-placement-top-margin-right) var(--hub-modal-placement-top-margin-bottom) var(--hub-modal-placement-top-margin-left);--hub-modal-placement-bottom-margin-top: 0;--hub-modal-placement-bottom-margin-right: auto;--hub-modal-placement-bottom-margin-bottom: 0;--hub-modal-placement-bottom-margin-left: auto;--hub-modal-placement-bottom-margin-block: calc( var(--hub-modal-placement-bottom-margin-top, 0px) + var(--hub-modal-placement-bottom-margin-bottom, 0px) );--hub-modal-placement-bottom-margin: var(--hub-modal-placement-bottom-margin-top) var(--hub-modal-placement-bottom-margin-right) var(--hub-modal-placement-bottom-margin-bottom) var(--hub-modal-placement-bottom-margin-left);--hub-modal-color: var(--hub-sys-text-primary, #212529);--hub-modal-bg: var(--hub-sys-surface-page, #ffffff);--hub-modal-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-modal-border-width: var(--hub-ref-border-width, 1px);--hub-modal-border-radius: var(--hub-ref-radius-lg, .5rem);--hub-modal-placement-start-border-radius: 0 var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) 0;--hub-modal-placement-end-border-radius: var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) 0 0 var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem));--hub-modal-placement-top-border-radius: 0 0 var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem));--hub-modal-placement-bottom-border-radius: var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) 0 0;--hub-modal-inner-border-radius: calc( var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var( --hub-modal-border-width, var(--hub-ref-border-width, 1px) ) );--hub-modal-box-shadow: var(--hub-sys-shadow-lg, 0 1rem 3rem rgba(0, 0, 0, .175));--hub-modal-padding-x: var(--hub-ref-space-3, 1rem);--hub-modal-padding-y: var(--hub-ref-space-3, 1rem);--hub-modal-header-padding-x: var(--hub-modal-padding-x);--hub-modal-header-padding-y: var(--hub-modal-padding-y);--hub-modal-header-gap: var(--hub-ref-space-2, .5rem);--hub-modal-header-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-modal-header-border-width: var(--hub-ref-border-width, 1px);--hub-modal-title-font-size: var(--hub-ref-font-size-lg, 1.25rem);--hub-modal-title-font-weight: var(--hub-ref-font-weight-medium, 500);--hub-modal-title-line-height: var(--hub-ref-line-height-base, 1.5);--hub-modal-title-margin-x: 0;--hub-modal-title-margin-y: 0;--hub-modal-title-color: var(--hub-modal-color, var(--hub-sys-text-primary, #212529));--hub-modal-body-padding-x: var(--hub-modal-padding-x);--hub-modal-body-padding-y: var(--hub-modal-padding-y);--hub-modal-footer-padding-x: var(--hub-modal-padding-x);--hub-modal-footer-padding-y: var(--hub-modal-padding-y);--hub-modal-footer-gap: var(--hub-ref-space-2, .5rem);--hub-modal-footer-bg: var(--hub-modal-bg, var(--hub-sys-surface-page, #ffffff));--hub-modal-footer-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-modal-footer-border-width: var(--hub-ref-border-width, 1px);--hub-modal-close-color: var(--hub-sys-text-primary, #212529);--hub-modal-close-size: var(--hub-ref-font-size-lg, 1.25rem);--hub-modal-close-line-height: 1;--hub-modal-close-padding-x: 0;--hub-modal-close-padding-y: 0;--hub-modal-close-opacity: .5;--hub-modal-close-hover-opacity: .75;--hub-modal-fade-transform: translate(0, -50px);--hub-modal-show-transform: none;--hub-modal-transition: var(--hub-sys-transition-base, all .2s ease-in-out);--hub-modal-resize-duration: 200;--hub-modal-resize-easing: ease-in-out;--hub-modal-scale-transform: scale(1.02);--hub-modal-offcanvas-width: min(28rem, 100%);--hub-modal-offcanvas-height: min(60vh, 100%);--hub-modal-offcanvas-border-radius: 0}.hub-modal{position:fixed;inset:0;display:block;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0;pointer-events:auto;z-index:var(--hub-modal-zindex, var(--hub-sys-zindex-modal, 1055));color:var(--hub-modal-color, var(--hub-sys-text-primary, #212529))}.hub-modal--placement-top,.hub-modal--placement-bottom{display:flex;justify-content:center}.hub-modal--placement-top{align-items:flex-start}.hub-modal--placement-bottom{align-items:flex-end}.hub-modal__dialog{position:relative;width:var(--hub-modal-width, auto);max-width:var(--hub-modal-max-width, 500px);margin:var(--hub-modal-margin, 1.75rem auto);pointer-events:none}.hub-modal__dialog--sm{--hub-modal-max-width: 300px}.hub-modal__dialog--lg{--hub-modal-max-width: 800px}.hub-modal__dialog--xl{--hub-modal-max-width: 1140px}.hub-modal__dialog--centered,.hub-modal__dialog--centered-vertical{display:flex;align-items:center;min-height:calc(100% - var(--hub-modal-margin-block, 3.5rem))}.hub-modal__dialog--placement-start{margin:var(--hub-modal-placement-start-margin, var(--hub-modal-margin-top, 1.75rem) auto var(--hub-modal-margin-bottom, 1.75rem) 0);--hub-modal-fade-transform: translateX(-100%)}.hub-modal__dialog--placement-end{margin:var(--hub-modal-placement-end-margin, var(--hub-modal-margin-top, 1.75rem) 0 var(--hub-modal-margin-bottom, 1.75rem) auto);--hub-modal-fade-transform: translateX(100%)}.hub-modal__dialog--placement-top{margin:var(--hub-modal-placement-top-margin, 0 auto 0 auto);--hub-modal-fade-transform: translateY(-100%)}.hub-modal__dialog--placement-bottom{margin:var(--hub-modal-placement-bottom-margin, 0 auto 0 auto);--hub-modal-fade-transform: translateY(100%)}.hub-modal__dialog--scrollable{display:flex;max-height:calc(100% - var(--hub-modal-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-start.hub-modal__dialog--centered-vertical{min-height:calc(100% - var(--hub-modal-placement-start-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-end.hub-modal__dialog--centered-vertical{min-height:calc(100% - var(--hub-modal-placement-end-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-start.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-start-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-end.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-end-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-top.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-top-margin-block, 0px))}.hub-modal .hub-modal__dialog--placement-bottom.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-bottom-margin-block, 0px))}.hub-modal__content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;outline:0;color:var(--hub-modal-color, var(--hub-sys-text-primary, #212529));background-color:var(--hub-modal-bg, var(--hub-sys-surface-page, #ffffff));border:var(--hub-modal-border-width, var(--hub-ref-border-width, 1px)) solid var(--hub-modal-border-color, var(--hub-sys-border-color-default, #dee2e6));border-radius:var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem));box-shadow:var(--hub-modal-box-shadow, var(--hub-sys-shadow-lg, 0 1rem 3rem rgba(0, 0, 0, .175)))}.hub-modal__dialog{--hub-modal-dialog-inset: var(--hub-modal-margin-block, 3.5rem)}.hub-modal__dialog>.hub-modal__content{max-height:calc(100dvh - var(--hub-modal-dialog-inset));min-height:0}.hub-modal__dialog .hub-modal__body{min-height:0;overflow-y:auto}.hub-modal__dialog--scrollable .hub-modal__content{overflow:hidden}.hub-modal__dialog--placement-start .hub-modal__content{border-radius:var(--hub-modal-placement-start-border-radius)}.hub-modal__dialog--placement-end .hub-modal__content{border-radius:var(--hub-modal-placement-end-border-radius)}.hub-modal__dialog--placement-top .hub-modal__content{border-radius:var(--hub-modal-placement-top-border-radius)}.hub-modal__dialog--placement-bottom .hub-modal__content{border-radius:var(--hub-modal-placement-bottom-border-radius)}.hub-modal--primary{--hub-modal-accent: var(--hub-sys-color-primary, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--primary .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--secondary{--hub-modal-accent: var(--hub-sys-color-secondary, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--secondary .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--success{--hub-modal-accent: var(--hub-sys-color-success, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--success .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--danger{--hub-modal-accent: var(--hub-sys-color-danger, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--danger .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--warning{--hub-modal-accent: var(--hub-sys-color-warning, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--warning .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--info{--hub-modal-accent: var(--hub-sys-color-info, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--info .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--neutral{--hub-modal-accent: var(--hub-sys-color-neutral, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--neutral .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--light{--hub-modal-accent: var(--hub-sys-color-light, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--light .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--dark{--hub-modal-accent: var(--hub-sys-color-dark, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--dark .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal__header{display:flex;align-items:var(--hub-modal-header-align-items, center);gap:var(--hub-modal-header-gap, var(--hub-ref-space-2, .5rem));padding:var(--hub-modal-header-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-modal-header-padding-x, var(--hub-ref-space-3, 1rem));border-bottom:var(--hub-modal-header-border-width, var(--hub-ref-border-width, 1px)) solid var(--hub-modal-header-border-color, var(--hub-sys-border-color-default, #dee2e6));border-top-left-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))));border-top-right-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))))}.hub-modal__heading{display:flex;flex:1 1 auto;flex-direction:var(--hub-modal-heading-direction, row);align-items:var(--hub-modal-heading-align-items, center);gap:var(--hub-modal-heading-gap, var(--hub-modal-header-gap, var(--hub-ref-space-2, .5rem)));min-width:0}.hub-modal__header .modal-title,.hub-modal__header .hub-modal__title{color:var(--hub-modal-title-color, var(--hub-modal-color, var(--hub-sys-text-primary, #212529)));font-size:var(--hub-modal-title-font-size, var(--hub-ref-font-size-lg, 1.25rem));font-weight:var(--hub-modal-title-font-weight, var(--hub-ref-font-weight-medium, 500));line-height:var(--hub-modal-title-line-height, var(--hub-ref-line-height-base, 1.5));margin:var(--hub-modal-title-margin-y, 0) var(--hub-modal-title-margin-x, 0)}.hub-modal__body{position:relative;flex:1 1 auto;padding:var(--hub-modal-body-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-modal-body-padding-x, var(--hub-ref-space-3, 1rem))}.hub-modal__dialog--scrollable .hub-modal__body{overflow-y:auto}.hub-modal__footer{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--hub-modal-footer-gap, var(--hub-ref-space-2, .5rem));padding:var(--hub-modal-footer-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-modal-footer-padding-x, var(--hub-ref-space-3, 1rem));color:var(--hub-modal-color, var(--hub-sys-text-primary, #212529));background-color:var(--hub-modal-footer-bg, var(--hub-modal-bg, var(--hub-sys-surface-page, #ffffff)));border-top:var(--hub-modal-footer-border-width, var(--hub-ref-border-width, 1px)) solid var(--hub-modal-footer-border-color, var(--hub-sys-border-color-default, #dee2e6));border-bottom-right-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))));border-bottom-left-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))))}.hub-modal__close{margin-left:auto;padding:var(--hub-modal-close-padding-y, 0) var(--hub-modal-close-padding-x, 0);font-size:var(--hub-modal-close-size, var(--hub-ref-font-size-lg, 1.25rem));line-height:var(--hub-modal-close-line-height, 1);background:transparent;border:0;cursor:pointer;color:var(--hub-modal-close-color, var(--hub-sys-text-primary, #212529));opacity:var(--hub-modal-close-opacity, .5)}.hub-modal__close:before{content:\"\\d7\"}.hub-modal__close:hover,.hub-modal__close:focus{opacity:var(--hub-modal-close-hover-opacity, .75)}.hub-modal__close:focus-visible{outline:var(--hub-modal-close-focus-ring-width, 2px) solid var(--hub-modal-close-focus-ring-color, var(--hub-modal-accent));outline-offset:var(--hub-modal-close-focus-ring-offset, 2px);border-radius:var(--hub-modal-close-focus-ring-radius, var(--hub-ref-radius-sm, .25rem));opacity:1}.hub-modal.fade .hub-modal__dialog{transform:var(--hub-modal-fade-transform, translate(0, -50px));transition:var(--hub-modal-transition, var(--hub-sys-transition-base, all .2s ease-in-out))}.hub-modal.show .hub-modal__dialog{transform:var(--hub-modal-show-transform, none)}.hub-modal.hub-modal--static .hub-modal__dialog{transform:var(--hub-modal-scale-transform, scale(1.02))}.hub-modal__dialog--fullscreen{--hub-modal-dialog-inset: 0px;width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}.hub-modal__dialog--fullscreen.hub-modal__dialog--scrollable .hub-modal__content{max-height:100%}.hub-modal--offcanvas.hub-modal--placement-start .hub-modal__dialog{margin:0 auto 0 0}.hub-modal--offcanvas.hub-modal--placement-end .hub-modal__dialog{margin:0 0 0 auto}.hub-modal--offcanvas.hub-modal--placement-top .hub-modal__dialog,.hub-modal--offcanvas.hub-modal--placement-bottom .hub-modal__dialog{margin:0 auto}.hub-modal--offcanvas.hub-modal--placement-start .hub-modal__dialog,.hub-modal--offcanvas.hub-modal--placement-end .hub-modal__dialog{width:var(--hub-modal-offcanvas-width);max-width:var(--hub-modal-offcanvas-width);height:100%;max-height:100%}.hub-modal--offcanvas.hub-modal--placement-top .hub-modal__dialog,.hub-modal--offcanvas.hub-modal--placement-bottom .hub-modal__dialog{width:100%;max-width:100%;height:var(--hub-modal-offcanvas-height);max-height:var(--hub-modal-offcanvas-height)}.hub-modal--offcanvas .hub-modal__dialog{--hub-modal-dialog-inset: 0px}.hub-modal--offcanvas .hub-modal__content{height:100%;border-radius:var(--hub-modal-offcanvas-border-radius)}.hub-modal--offcanvas .hub-modal__body{min-height:0;overflow-y:auto}@media(max-width:575.98px){.hub-modal__dialog--fullscreen-sm-down{width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-sm-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-sm-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:767.98px){.hub-modal__dialog--fullscreen-md-down{width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-md-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-md-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:991.98px){.hub-modal__dialog--fullscreen-lg-down{width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-lg-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-lg-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:1199.98px){.hub-modal__dialog--fullscreen-xl-down{width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-xl-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-xl-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:1399.98px){.hub-modal__dialog--fullscreen-xxl-down{width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-xxl-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-xxl-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}.hub-modal__backdrop{position:fixed;inset:0;opacity:var(--hub-modal-backdrop-opacity-hidden, var(--hub-sys-opacity-0, 0));z-index:var(--hub-modal-backdrop-zindex, 1054);background-color:var(--hub-modal-backdrop-bg, var(--hub-ref-color-black, #000000));pointer-events:none}.hub-modal__backdrop.fade{transition:var(--hub-modal-backdrop-transition, opacity .15s linear)}.hub-modal__backdrop.show{opacity:var(--hub-modal-backdrop-opacity, var(--hub-sys-opacity-50, .5))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
909
+ `, isInline: true, styles: ["@charset \"UTF-8\";body.hub-modal-open{overflow:hidden}:root{--hub-modal-zindex-base: var(--hub-sys-zindex-modal, 1055);--hub-modal-zindex: var(--hub-modal-zindex-base, var(--hub-sys-zindex-modal, 1055));--hub-modal-backdrop-zindex: calc(var(--hub-modal-zindex, var(--hub-sys-zindex-modal, 1055)) - 1);--hub-modal-backdrop-bg: var(--hub-ref-color-black, #000000);--hub-modal-backdrop-opacity: var(--hub-sys-opacity-50, .5);--hub-modal-backdrop-opacity-hidden: var(--hub-sys-opacity-0, 0);--hub-modal-backdrop-transition: opacity .15s linear}:where(.hub-modal){--hub-modal-accent: var(--hub-sys-color-primary, #0d6efd);--hub-modal-accent-emphasis: color-mix(in oklch, var(--hub-modal-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-modal-accent-subtle: color-mix(in oklch, var(--hub-modal-accent) 12%, var(--hub-sys-surface-page, #ffffff));--hub-modal-accent-on: oklch(from var(--hub-modal-accent) clamp(0, (.62 - l) * 1000, 1) 0 h);--hub-modal-accent-border: color-mix(in oklch, var(--hub-modal-accent) 35%, var(--hub-sys-surface-page, #ffffff));--hub-modal-accent-bar-width: 0;--hub-modal-width: auto;--hub-modal-max-width: 500px;--hub-modal-margin-y: 1.75rem;--hub-modal-margin-x: auto;--hub-modal-margin-top: var(--hub-modal-margin-y, 1.75rem);--hub-modal-margin-right: var(--hub-modal-margin-x, auto);--hub-modal-margin-bottom: var(--hub-modal-margin-y, 1.75rem);--hub-modal-margin-left: var(--hub-modal-margin-x, auto);--hub-modal-margin-block: calc(var(--hub-modal-margin-top, 1.75rem) + var(--hub-modal-margin-bottom, 1.75rem));--hub-modal-margin: var(--hub-modal-margin-top) var(--hub-modal-margin-right) var(--hub-modal-margin-bottom) var(--hub-modal-margin-left);--hub-modal-placement-start-margin-top: var(--hub-modal-margin-top, 1.75rem);--hub-modal-placement-start-margin-right: auto;--hub-modal-placement-start-margin-bottom: var(--hub-modal-margin-bottom, 1.75rem);--hub-modal-placement-start-margin-left: 0;--hub-modal-placement-start-margin-block: calc( var(--hub-modal-placement-start-margin-top, 1.75rem) + var(--hub-modal-placement-start-margin-bottom, 1.75rem) );--hub-modal-placement-start-margin: var(--hub-modal-placement-start-margin-top) var(--hub-modal-placement-start-margin-right) var(--hub-modal-placement-start-margin-bottom) var(--hub-modal-placement-start-margin-left);--hub-modal-placement-end-margin-top: var(--hub-modal-margin-top, 1.75rem);--hub-modal-placement-end-margin-right: 0;--hub-modal-placement-end-margin-bottom: var(--hub-modal-margin-bottom, 1.75rem);--hub-modal-placement-end-margin-left: auto;--hub-modal-placement-end-margin-block: calc( var(--hub-modal-placement-end-margin-top, 1.75rem) + var(--hub-modal-placement-end-margin-bottom, 1.75rem) );--hub-modal-placement-end-margin: var(--hub-modal-placement-end-margin-top) var(--hub-modal-placement-end-margin-right) var(--hub-modal-placement-end-margin-bottom) var(--hub-modal-placement-end-margin-left);--hub-modal-placement-top-margin-top: 0;--hub-modal-placement-top-margin-right: auto;--hub-modal-placement-top-margin-bottom: 0;--hub-modal-placement-top-margin-left: auto;--hub-modal-placement-top-margin-block: calc( var(--hub-modal-placement-top-margin-top, 0px) + var(--hub-modal-placement-top-margin-bottom, 0px) );--hub-modal-placement-top-margin: var(--hub-modal-placement-top-margin-top) var(--hub-modal-placement-top-margin-right) var(--hub-modal-placement-top-margin-bottom) var(--hub-modal-placement-top-margin-left);--hub-modal-placement-bottom-margin-top: 0;--hub-modal-placement-bottom-margin-right: auto;--hub-modal-placement-bottom-margin-bottom: 0;--hub-modal-placement-bottom-margin-left: auto;--hub-modal-placement-bottom-margin-block: calc( var(--hub-modal-placement-bottom-margin-top, 0px) + var(--hub-modal-placement-bottom-margin-bottom, 0px) );--hub-modal-placement-bottom-margin: var(--hub-modal-placement-bottom-margin-top) var(--hub-modal-placement-bottom-margin-right) var(--hub-modal-placement-bottom-margin-bottom) var(--hub-modal-placement-bottom-margin-left);--hub-modal-color: var(--hub-sys-text-primary, #212529);--hub-modal-bg: var(--hub-sys-surface-page, #ffffff);--hub-modal-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-modal-border-width: var(--hub-ref-border-width, 1px);--hub-modal-border-radius: var(--hub-ref-radius-lg, .5rem);--hub-modal-placement-start-border-radius: 0 var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) 0;--hub-modal-placement-end-border-radius: var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) 0 0 var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem));--hub-modal-placement-top-border-radius: 0 0 var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem));--hub-modal-placement-bottom-border-radius: var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) 0 0;--hub-modal-inner-border-radius: calc( var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var( --hub-modal-border-width, var(--hub-ref-border-width, 1px) ) );--hub-modal-box-shadow: var(--hub-sys-shadow-lg, 0 1rem 3rem rgba(0, 0, 0, .175));--hub-modal-padding-x: var(--hub-ref-space-3, 1rem);--hub-modal-padding-y: var(--hub-ref-space-3, 1rem);--hub-modal-header-padding-x: var(--hub-modal-padding-x);--hub-modal-header-padding-y: var(--hub-modal-padding-y);--hub-modal-header-gap: var(--hub-ref-space-2, .5rem);--hub-modal-header-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-modal-header-border-width: var(--hub-ref-border-width, 1px);--hub-modal-title-font-size: var(--hub-ref-font-size-lg, 1.25rem);--hub-modal-title-font-weight: var(--hub-ref-font-weight-medium, 500);--hub-modal-title-line-height: var(--hub-ref-line-height-base, 1.5);--hub-modal-title-margin-x: 0;--hub-modal-title-margin-y: 0;--hub-modal-title-color: var(--hub-modal-color, var(--hub-sys-text-primary, #212529));--hub-modal-body-padding-x: var(--hub-modal-padding-x);--hub-modal-body-padding-y: var(--hub-modal-padding-y);--hub-modal-footer-padding-x: var(--hub-modal-padding-x);--hub-modal-footer-padding-y: var(--hub-modal-padding-y);--hub-modal-footer-gap: var(--hub-ref-space-2, .5rem);--hub-modal-footer-bg: var(--hub-modal-bg, var(--hub-sys-surface-page, #ffffff));--hub-modal-footer-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-modal-footer-border-width: var(--hub-ref-border-width, 1px);--hub-modal-close-color: var(--hub-sys-text-primary, #212529);--hub-modal-close-size: var(--hub-ref-font-size-lg, 1.25rem);--hub-modal-close-line-height: 1;--hub-modal-close-padding-x: 0;--hub-modal-close-padding-y: 0;--hub-modal-close-opacity: .5;--hub-modal-close-hover-opacity: .75;--hub-modal-fade-transform: translate(0, -50px);--hub-modal-show-transform: none;--hub-modal-transition: var(--hub-sys-transition-base, all .2s ease-in-out);--hub-modal-resize-duration: 200;--hub-modal-resize-easing: ease-in-out;--hub-modal-scale-transform: scale(1.02);--hub-modal-offcanvas-width: min(28rem, 100%);--hub-modal-offcanvas-height: min(60vh, 100%);--hub-modal-offcanvas-border-radius: 0}.hub-modal{position:fixed;inset:0;display:block;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0;pointer-events:auto;z-index:var(--hub-modal-zindex, var(--hub-sys-zindex-modal, 1055));color:var(--hub-modal-color, var(--hub-sys-text-primary, #212529))}.hub-modal--placement-top,.hub-modal--placement-bottom{display:flex;justify-content:center}.hub-modal--placement-top{align-items:flex-start}.hub-modal--placement-bottom{align-items:flex-end}.hub-modal__dialog{position:relative;width:var(--hub-modal-width, auto);max-width:var(--hub-modal-max-width, 500px);margin:var(--hub-modal-margin, 1.75rem auto);pointer-events:none}.hub-modal__dialog--sm{--hub-modal-max-width: 300px}.hub-modal__dialog--lg{--hub-modal-max-width: 800px}.hub-modal__dialog--xl{--hub-modal-max-width: 1140px}.hub-modal__dialog--centered,.hub-modal__dialog--centered-vertical{display:flex;align-items:center;min-height:calc(100% - var(--hub-modal-margin-block, 3.5rem))}.hub-modal__dialog--placement-start{margin:var(--hub-modal-placement-start-margin, var(--hub-modal-margin-top, 1.75rem) auto var(--hub-modal-margin-bottom, 1.75rem) 0);--hub-modal-fade-transform: translateX(-100%)}.hub-modal__dialog--placement-end{margin:var(--hub-modal-placement-end-margin, var(--hub-modal-margin-top, 1.75rem) 0 var(--hub-modal-margin-bottom, 1.75rem) auto);--hub-modal-fade-transform: translateX(100%)}.hub-modal__dialog--placement-top{margin:var(--hub-modal-placement-top-margin, 0 auto 0 auto);--hub-modal-fade-transform: translateY(-100%)}.hub-modal__dialog--placement-bottom{margin:var(--hub-modal-placement-bottom-margin, 0 auto 0 auto);--hub-modal-fade-transform: translateY(100%)}.hub-modal__dialog--scrollable{display:flex;max-height:calc(100% - var(--hub-modal-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-start.hub-modal__dialog--centered-vertical{min-height:calc(100% - var(--hub-modal-placement-start-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-end.hub-modal__dialog--centered-vertical{min-height:calc(100% - var(--hub-modal-placement-end-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-start.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-start-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-end.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-end-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-top.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-top-margin-block, 0px))}.hub-modal .hub-modal__dialog--placement-bottom.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-bottom-margin-block, 0px))}.hub-modal__content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;outline:0;color:var(--hub-modal-color, var(--hub-sys-text-primary, #212529));background-color:var(--hub-modal-bg, var(--hub-sys-surface-page, #ffffff));border:var(--hub-modal-border-width, var(--hub-ref-border-width, 1px)) solid var(--hub-modal-border-color, var(--hub-sys-border-color-default, #dee2e6));border-radius:var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem));box-shadow:var(--hub-modal-box-shadow, var(--hub-sys-shadow-lg, 0 1rem 3rem rgba(0, 0, 0, .175)))}.hub-modal__dialog{--hub-modal-dialog-inset: var(--hub-modal-margin-block, 3.5rem)}.hub-modal__dialog>.hub-modal__content{max-height:calc(100dvh - var(--hub-modal-dialog-inset));min-height:0}.hub-modal__dialog .hub-modal__body{min-height:0;overflow-y:auto}.hub-modal__dialog--scrollable .hub-modal__content{overflow:hidden}.hub-modal__dialog--placement-start .hub-modal__content{border-radius:var(--hub-modal-placement-start-border-radius)}.hub-modal__dialog--placement-end .hub-modal__content{border-radius:var(--hub-modal-placement-end-border-radius)}.hub-modal__dialog--placement-top .hub-modal__content{border-radius:var(--hub-modal-placement-top-border-radius)}.hub-modal__dialog--placement-bottom .hub-modal__content{border-radius:var(--hub-modal-placement-bottom-border-radius)}.hub-modal--primary{--hub-modal-accent: var(--hub-sys-color-primary, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--primary .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--secondary{--hub-modal-accent: var(--hub-sys-color-secondary, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--secondary .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--success{--hub-modal-accent: var(--hub-sys-color-success, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--success .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--danger{--hub-modal-accent: var(--hub-sys-color-danger, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--danger .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--warning{--hub-modal-accent: var(--hub-sys-color-warning, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--warning .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--info{--hub-modal-accent: var(--hub-sys-color-info, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--info .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--neutral{--hub-modal-accent: var(--hub-sys-color-neutral, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--neutral .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--light{--hub-modal-accent: var(--hub-sys-color-light, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--light .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--dark{--hub-modal-accent: var(--hub-sys-color-dark, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--dark .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal__header{display:flex;align-items:var(--hub-modal-header-align-items, center);gap:var(--hub-modal-header-gap, var(--hub-ref-space-2, .5rem));padding:var(--hub-modal-header-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-modal-header-padding-x, var(--hub-ref-space-3, 1rem));border-bottom:var(--hub-modal-header-border-width, var(--hub-ref-border-width, 1px)) solid var(--hub-modal-header-border-color, var(--hub-sys-border-color-default, #dee2e6));border-top-left-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))));border-top-right-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))))}.hub-modal__heading{display:flex;flex:1 1 auto;flex-direction:var(--hub-modal-heading-direction, row);align-items:var(--hub-modal-heading-align-items, center);gap:var(--hub-modal-heading-gap, var(--hub-modal-header-gap, var(--hub-ref-space-2, .5rem)));min-width:0}.hub-modal__header .modal-title,.hub-modal__header .hub-modal__title{color:var(--hub-modal-title-color, var(--hub-modal-color, var(--hub-sys-text-primary, #212529)));font-size:var(--hub-modal-title-font-size, var(--hub-ref-font-size-lg, 1.25rem));font-weight:var(--hub-modal-title-font-weight, var(--hub-ref-font-weight-medium, 500));line-height:var(--hub-modal-title-line-height, var(--hub-ref-line-height-base, 1.5));margin:var(--hub-modal-title-margin-y, 0) var(--hub-modal-title-margin-x, 0)}.hub-modal__body{position:relative;flex:1 1 auto;padding:var(--hub-modal-body-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-modal-body-padding-x, var(--hub-ref-space-3, 1rem))}.hub-modal__dialog--scrollable .hub-modal__body{overflow-y:auto}.hub-modal__footer{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--hub-modal-footer-gap, var(--hub-ref-space-2, .5rem));padding:var(--hub-modal-footer-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-modal-footer-padding-x, var(--hub-ref-space-3, 1rem));color:var(--hub-modal-color, var(--hub-sys-text-primary, #212529));background-color:var(--hub-modal-footer-bg, var(--hub-modal-bg, var(--hub-sys-surface-page, #ffffff)));border-top:var(--hub-modal-footer-border-width, var(--hub-ref-border-width, 1px)) solid var(--hub-modal-footer-border-color, var(--hub-sys-border-color-default, #dee2e6));border-bottom-right-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))));border-bottom-left-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))))}.hub-modal__close{margin-left:auto;padding:var(--hub-modal-close-padding-y, 0) var(--hub-modal-close-padding-x, 0);font-size:var(--hub-modal-close-size, var(--hub-ref-font-size-lg, 1.25rem));line-height:var(--hub-modal-close-line-height, 1);background:transparent;border:0;cursor:pointer;color:var(--hub-modal-close-color, var(--hub-sys-text-primary, #212529));opacity:var(--hub-modal-close-opacity, .5)}.hub-modal__close:before{content:\"\\d7\"}.hub-modal__close:hover,.hub-modal__close:focus{opacity:var(--hub-modal-close-hover-opacity, .75)}.hub-modal__close:focus-visible{outline:var(--hub-modal-close-focus-ring-width, 2px) solid var(--hub-modal-close-focus-ring-color, var(--hub-modal-accent));outline-offset:var(--hub-modal-close-focus-ring-offset, 2px);border-radius:var(--hub-modal-close-focus-ring-radius, var(--hub-ref-radius-sm, .25rem));opacity:1}.hub-modal.fade .hub-modal__dialog{transform:var(--hub-modal-fade-transform, translate(0, -50px));transition:var(--hub-modal-transition, var(--hub-sys-transition-base, all .2s ease-in-out))}.hub-modal.show .hub-modal__dialog{transform:var(--hub-modal-show-transform, none)}.hub-modal.hub-modal--static .hub-modal__dialog{transform:var(--hub-modal-scale-transform, scale(1.02))}.hub-modal__dialog--fullscreen{--hub-modal-dialog-inset: 0px;width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}.hub-modal__dialog--fullscreen.hub-modal__dialog--scrollable .hub-modal__content{max-height:100%}.hub-modal--offcanvas.hub-modal--placement-start .hub-modal__dialog{margin:0 auto 0 0}.hub-modal--offcanvas.hub-modal--placement-end .hub-modal__dialog{margin:0 0 0 auto}.hub-modal--offcanvas.hub-modal--placement-top .hub-modal__dialog,.hub-modal--offcanvas.hub-modal--placement-bottom .hub-modal__dialog{margin:0 auto}.hub-modal--offcanvas.hub-modal--placement-start .hub-modal__dialog,.hub-modal--offcanvas.hub-modal--placement-end .hub-modal__dialog{width:var(--hub-modal-offcanvas-width);max-width:var(--hub-modal-offcanvas-width);height:100%;max-height:100%}.hub-modal--offcanvas.hub-modal--placement-top .hub-modal__dialog,.hub-modal--offcanvas.hub-modal--placement-bottom .hub-modal__dialog{width:100%;max-width:100%;height:var(--hub-modal-offcanvas-height);max-height:var(--hub-modal-offcanvas-height)}.hub-modal--offcanvas .hub-modal__dialog{--hub-modal-dialog-inset: 0px}.hub-modal--offcanvas .hub-modal__content{height:100%;border-radius:var(--hub-modal-offcanvas-border-radius)}.hub-modal--offcanvas .hub-modal__body{min-height:0;overflow-y:auto}@media(max-width:575.98px){.hub-modal__dialog--fullscreen-sm-down{--hub-modal-dialog-inset: 0px;width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-sm-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-sm-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:767.98px){.hub-modal__dialog--fullscreen-md-down{--hub-modal-dialog-inset: 0px;width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-md-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-md-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:991.98px){.hub-modal__dialog--fullscreen-lg-down{--hub-modal-dialog-inset: 0px;width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-lg-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-lg-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:1199.98px){.hub-modal__dialog--fullscreen-xl-down{--hub-modal-dialog-inset: 0px;width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-xl-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-xl-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:1399.98px){.hub-modal__dialog--fullscreen-xxl-down{--hub-modal-dialog-inset: 0px;width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-xxl-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-xxl-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}.hub-modal__backdrop{position:fixed;inset:0;opacity:var(--hub-modal-backdrop-opacity-hidden, var(--hub-sys-opacity-0, 0));z-index:var(--hub-modal-backdrop-zindex, 1054);background-color:var(--hub-modal-backdrop-bg, var(--hub-ref-color-black, #000000));pointer-events:none}.hub-modal__backdrop.fade{transition:var(--hub-modal-backdrop-transition, opacity .15s linear)}.hub-modal__backdrop.show{opacity:var(--hub-modal-backdrop-opacity, var(--hub-sys-opacity-50, .5))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
910
910
  }
911
911
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HubModalWindow, decorators: [{
912
912
  type: Component,
@@ -953,7 +953,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
953
953
  }
954
954
  </div>
955
955
  </div>
956
- `, encapsulation: ViewEncapsulation.None, styles: ["@charset \"UTF-8\";body.hub-modal-open{overflow:hidden}:root{--hub-modal-zindex-base: var(--hub-sys-zindex-modal, 1055);--hub-modal-zindex: var(--hub-modal-zindex-base, var(--hub-sys-zindex-modal, 1055));--hub-modal-backdrop-zindex: calc(var(--hub-modal-zindex, var(--hub-sys-zindex-modal, 1055)) - 1);--hub-modal-backdrop-bg: var(--hub-ref-color-black, #000000);--hub-modal-backdrop-opacity: var(--hub-sys-opacity-50, .5);--hub-modal-backdrop-opacity-hidden: var(--hub-sys-opacity-0, 0);--hub-modal-backdrop-transition: opacity .15s linear}:where(.hub-modal){--hub-modal-accent: var(--hub-sys-color-primary, #0d6efd);--hub-modal-accent-emphasis: color-mix(in oklch, var(--hub-modal-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-modal-accent-subtle: color-mix(in oklch, var(--hub-modal-accent) 12%, var(--hub-sys-surface-page, #ffffff));--hub-modal-accent-on: oklch(from var(--hub-modal-accent) clamp(0, (.62 - l) * 1000, 1) 0 h);--hub-modal-accent-border: color-mix(in oklch, var(--hub-modal-accent) 35%, var(--hub-sys-surface-page, #ffffff));--hub-modal-accent-bar-width: 0;--hub-modal-width: auto;--hub-modal-max-width: 500px;--hub-modal-margin-y: 1.75rem;--hub-modal-margin-x: auto;--hub-modal-margin-top: var(--hub-modal-margin-y, 1.75rem);--hub-modal-margin-right: var(--hub-modal-margin-x, auto);--hub-modal-margin-bottom: var(--hub-modal-margin-y, 1.75rem);--hub-modal-margin-left: var(--hub-modal-margin-x, auto);--hub-modal-margin-block: calc(var(--hub-modal-margin-top, 1.75rem) + var(--hub-modal-margin-bottom, 1.75rem));--hub-modal-margin: var(--hub-modal-margin-top) var(--hub-modal-margin-right) var(--hub-modal-margin-bottom) var(--hub-modal-margin-left);--hub-modal-placement-start-margin-top: var(--hub-modal-margin-top, 1.75rem);--hub-modal-placement-start-margin-right: auto;--hub-modal-placement-start-margin-bottom: var(--hub-modal-margin-bottom, 1.75rem);--hub-modal-placement-start-margin-left: 0;--hub-modal-placement-start-margin-block: calc( var(--hub-modal-placement-start-margin-top, 1.75rem) + var(--hub-modal-placement-start-margin-bottom, 1.75rem) );--hub-modal-placement-start-margin: var(--hub-modal-placement-start-margin-top) var(--hub-modal-placement-start-margin-right) var(--hub-modal-placement-start-margin-bottom) var(--hub-modal-placement-start-margin-left);--hub-modal-placement-end-margin-top: var(--hub-modal-margin-top, 1.75rem);--hub-modal-placement-end-margin-right: 0;--hub-modal-placement-end-margin-bottom: var(--hub-modal-margin-bottom, 1.75rem);--hub-modal-placement-end-margin-left: auto;--hub-modal-placement-end-margin-block: calc( var(--hub-modal-placement-end-margin-top, 1.75rem) + var(--hub-modal-placement-end-margin-bottom, 1.75rem) );--hub-modal-placement-end-margin: var(--hub-modal-placement-end-margin-top) var(--hub-modal-placement-end-margin-right) var(--hub-modal-placement-end-margin-bottom) var(--hub-modal-placement-end-margin-left);--hub-modal-placement-top-margin-top: 0;--hub-modal-placement-top-margin-right: auto;--hub-modal-placement-top-margin-bottom: 0;--hub-modal-placement-top-margin-left: auto;--hub-modal-placement-top-margin-block: calc( var(--hub-modal-placement-top-margin-top, 0px) + var(--hub-modal-placement-top-margin-bottom, 0px) );--hub-modal-placement-top-margin: var(--hub-modal-placement-top-margin-top) var(--hub-modal-placement-top-margin-right) var(--hub-modal-placement-top-margin-bottom) var(--hub-modal-placement-top-margin-left);--hub-modal-placement-bottom-margin-top: 0;--hub-modal-placement-bottom-margin-right: auto;--hub-modal-placement-bottom-margin-bottom: 0;--hub-modal-placement-bottom-margin-left: auto;--hub-modal-placement-bottom-margin-block: calc( var(--hub-modal-placement-bottom-margin-top, 0px) + var(--hub-modal-placement-bottom-margin-bottom, 0px) );--hub-modal-placement-bottom-margin: var(--hub-modal-placement-bottom-margin-top) var(--hub-modal-placement-bottom-margin-right) var(--hub-modal-placement-bottom-margin-bottom) var(--hub-modal-placement-bottom-margin-left);--hub-modal-color: var(--hub-sys-text-primary, #212529);--hub-modal-bg: var(--hub-sys-surface-page, #ffffff);--hub-modal-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-modal-border-width: var(--hub-ref-border-width, 1px);--hub-modal-border-radius: var(--hub-ref-radius-lg, .5rem);--hub-modal-placement-start-border-radius: 0 var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) 0;--hub-modal-placement-end-border-radius: var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) 0 0 var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem));--hub-modal-placement-top-border-radius: 0 0 var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem));--hub-modal-placement-bottom-border-radius: var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) 0 0;--hub-modal-inner-border-radius: calc( var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var( --hub-modal-border-width, var(--hub-ref-border-width, 1px) ) );--hub-modal-box-shadow: var(--hub-sys-shadow-lg, 0 1rem 3rem rgba(0, 0, 0, .175));--hub-modal-padding-x: var(--hub-ref-space-3, 1rem);--hub-modal-padding-y: var(--hub-ref-space-3, 1rem);--hub-modal-header-padding-x: var(--hub-modal-padding-x);--hub-modal-header-padding-y: var(--hub-modal-padding-y);--hub-modal-header-gap: var(--hub-ref-space-2, .5rem);--hub-modal-header-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-modal-header-border-width: var(--hub-ref-border-width, 1px);--hub-modal-title-font-size: var(--hub-ref-font-size-lg, 1.25rem);--hub-modal-title-font-weight: var(--hub-ref-font-weight-medium, 500);--hub-modal-title-line-height: var(--hub-ref-line-height-base, 1.5);--hub-modal-title-margin-x: 0;--hub-modal-title-margin-y: 0;--hub-modal-title-color: var(--hub-modal-color, var(--hub-sys-text-primary, #212529));--hub-modal-body-padding-x: var(--hub-modal-padding-x);--hub-modal-body-padding-y: var(--hub-modal-padding-y);--hub-modal-footer-padding-x: var(--hub-modal-padding-x);--hub-modal-footer-padding-y: var(--hub-modal-padding-y);--hub-modal-footer-gap: var(--hub-ref-space-2, .5rem);--hub-modal-footer-bg: var(--hub-modal-bg, var(--hub-sys-surface-page, #ffffff));--hub-modal-footer-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-modal-footer-border-width: var(--hub-ref-border-width, 1px);--hub-modal-close-color: var(--hub-sys-text-primary, #212529);--hub-modal-close-size: var(--hub-ref-font-size-lg, 1.25rem);--hub-modal-close-line-height: 1;--hub-modal-close-padding-x: 0;--hub-modal-close-padding-y: 0;--hub-modal-close-opacity: .5;--hub-modal-close-hover-opacity: .75;--hub-modal-fade-transform: translate(0, -50px);--hub-modal-show-transform: none;--hub-modal-transition: var(--hub-sys-transition-base, all .2s ease-in-out);--hub-modal-resize-duration: 200;--hub-modal-resize-easing: ease-in-out;--hub-modal-scale-transform: scale(1.02);--hub-modal-offcanvas-width: min(28rem, 100%);--hub-modal-offcanvas-height: min(60vh, 100%);--hub-modal-offcanvas-border-radius: 0}.hub-modal{position:fixed;inset:0;display:block;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0;pointer-events:auto;z-index:var(--hub-modal-zindex, var(--hub-sys-zindex-modal, 1055));color:var(--hub-modal-color, var(--hub-sys-text-primary, #212529))}.hub-modal--placement-top,.hub-modal--placement-bottom{display:flex;justify-content:center}.hub-modal--placement-top{align-items:flex-start}.hub-modal--placement-bottom{align-items:flex-end}.hub-modal__dialog{position:relative;width:var(--hub-modal-width, auto);max-width:var(--hub-modal-max-width, 500px);margin:var(--hub-modal-margin, 1.75rem auto);pointer-events:none}.hub-modal__dialog--sm{--hub-modal-max-width: 300px}.hub-modal__dialog--lg{--hub-modal-max-width: 800px}.hub-modal__dialog--xl{--hub-modal-max-width: 1140px}.hub-modal__dialog--centered,.hub-modal__dialog--centered-vertical{display:flex;align-items:center;min-height:calc(100% - var(--hub-modal-margin-block, 3.5rem))}.hub-modal__dialog--placement-start{margin:var(--hub-modal-placement-start-margin, var(--hub-modal-margin-top, 1.75rem) auto var(--hub-modal-margin-bottom, 1.75rem) 0);--hub-modal-fade-transform: translateX(-100%)}.hub-modal__dialog--placement-end{margin:var(--hub-modal-placement-end-margin, var(--hub-modal-margin-top, 1.75rem) 0 var(--hub-modal-margin-bottom, 1.75rem) auto);--hub-modal-fade-transform: translateX(100%)}.hub-modal__dialog--placement-top{margin:var(--hub-modal-placement-top-margin, 0 auto 0 auto);--hub-modal-fade-transform: translateY(-100%)}.hub-modal__dialog--placement-bottom{margin:var(--hub-modal-placement-bottom-margin, 0 auto 0 auto);--hub-modal-fade-transform: translateY(100%)}.hub-modal__dialog--scrollable{display:flex;max-height:calc(100% - var(--hub-modal-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-start.hub-modal__dialog--centered-vertical{min-height:calc(100% - var(--hub-modal-placement-start-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-end.hub-modal__dialog--centered-vertical{min-height:calc(100% - var(--hub-modal-placement-end-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-start.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-start-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-end.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-end-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-top.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-top-margin-block, 0px))}.hub-modal .hub-modal__dialog--placement-bottom.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-bottom-margin-block, 0px))}.hub-modal__content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;outline:0;color:var(--hub-modal-color, var(--hub-sys-text-primary, #212529));background-color:var(--hub-modal-bg, var(--hub-sys-surface-page, #ffffff));border:var(--hub-modal-border-width, var(--hub-ref-border-width, 1px)) solid var(--hub-modal-border-color, var(--hub-sys-border-color-default, #dee2e6));border-radius:var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem));box-shadow:var(--hub-modal-box-shadow, var(--hub-sys-shadow-lg, 0 1rem 3rem rgba(0, 0, 0, .175)))}.hub-modal__dialog{--hub-modal-dialog-inset: var(--hub-modal-margin-block, 3.5rem)}.hub-modal__dialog>.hub-modal__content{max-height:calc(100dvh - var(--hub-modal-dialog-inset));min-height:0}.hub-modal__dialog .hub-modal__body{min-height:0;overflow-y:auto}.hub-modal__dialog--scrollable .hub-modal__content{overflow:hidden}.hub-modal__dialog--placement-start .hub-modal__content{border-radius:var(--hub-modal-placement-start-border-radius)}.hub-modal__dialog--placement-end .hub-modal__content{border-radius:var(--hub-modal-placement-end-border-radius)}.hub-modal__dialog--placement-top .hub-modal__content{border-radius:var(--hub-modal-placement-top-border-radius)}.hub-modal__dialog--placement-bottom .hub-modal__content{border-radius:var(--hub-modal-placement-bottom-border-radius)}.hub-modal--primary{--hub-modal-accent: var(--hub-sys-color-primary, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--primary .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--secondary{--hub-modal-accent: var(--hub-sys-color-secondary, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--secondary .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--success{--hub-modal-accent: var(--hub-sys-color-success, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--success .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--danger{--hub-modal-accent: var(--hub-sys-color-danger, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--danger .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--warning{--hub-modal-accent: var(--hub-sys-color-warning, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--warning .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--info{--hub-modal-accent: var(--hub-sys-color-info, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--info .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--neutral{--hub-modal-accent: var(--hub-sys-color-neutral, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--neutral .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--light{--hub-modal-accent: var(--hub-sys-color-light, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--light .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--dark{--hub-modal-accent: var(--hub-sys-color-dark, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--dark .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal__header{display:flex;align-items:var(--hub-modal-header-align-items, center);gap:var(--hub-modal-header-gap, var(--hub-ref-space-2, .5rem));padding:var(--hub-modal-header-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-modal-header-padding-x, var(--hub-ref-space-3, 1rem));border-bottom:var(--hub-modal-header-border-width, var(--hub-ref-border-width, 1px)) solid var(--hub-modal-header-border-color, var(--hub-sys-border-color-default, #dee2e6));border-top-left-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))));border-top-right-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))))}.hub-modal__heading{display:flex;flex:1 1 auto;flex-direction:var(--hub-modal-heading-direction, row);align-items:var(--hub-modal-heading-align-items, center);gap:var(--hub-modal-heading-gap, var(--hub-modal-header-gap, var(--hub-ref-space-2, .5rem)));min-width:0}.hub-modal__header .modal-title,.hub-modal__header .hub-modal__title{color:var(--hub-modal-title-color, var(--hub-modal-color, var(--hub-sys-text-primary, #212529)));font-size:var(--hub-modal-title-font-size, var(--hub-ref-font-size-lg, 1.25rem));font-weight:var(--hub-modal-title-font-weight, var(--hub-ref-font-weight-medium, 500));line-height:var(--hub-modal-title-line-height, var(--hub-ref-line-height-base, 1.5));margin:var(--hub-modal-title-margin-y, 0) var(--hub-modal-title-margin-x, 0)}.hub-modal__body{position:relative;flex:1 1 auto;padding:var(--hub-modal-body-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-modal-body-padding-x, var(--hub-ref-space-3, 1rem))}.hub-modal__dialog--scrollable .hub-modal__body{overflow-y:auto}.hub-modal__footer{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--hub-modal-footer-gap, var(--hub-ref-space-2, .5rem));padding:var(--hub-modal-footer-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-modal-footer-padding-x, var(--hub-ref-space-3, 1rem));color:var(--hub-modal-color, var(--hub-sys-text-primary, #212529));background-color:var(--hub-modal-footer-bg, var(--hub-modal-bg, var(--hub-sys-surface-page, #ffffff)));border-top:var(--hub-modal-footer-border-width, var(--hub-ref-border-width, 1px)) solid var(--hub-modal-footer-border-color, var(--hub-sys-border-color-default, #dee2e6));border-bottom-right-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))));border-bottom-left-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))))}.hub-modal__close{margin-left:auto;padding:var(--hub-modal-close-padding-y, 0) var(--hub-modal-close-padding-x, 0);font-size:var(--hub-modal-close-size, var(--hub-ref-font-size-lg, 1.25rem));line-height:var(--hub-modal-close-line-height, 1);background:transparent;border:0;cursor:pointer;color:var(--hub-modal-close-color, var(--hub-sys-text-primary, #212529));opacity:var(--hub-modal-close-opacity, .5)}.hub-modal__close:before{content:\"\\d7\"}.hub-modal__close:hover,.hub-modal__close:focus{opacity:var(--hub-modal-close-hover-opacity, .75)}.hub-modal__close:focus-visible{outline:var(--hub-modal-close-focus-ring-width, 2px) solid var(--hub-modal-close-focus-ring-color, var(--hub-modal-accent));outline-offset:var(--hub-modal-close-focus-ring-offset, 2px);border-radius:var(--hub-modal-close-focus-ring-radius, var(--hub-ref-radius-sm, .25rem));opacity:1}.hub-modal.fade .hub-modal__dialog{transform:var(--hub-modal-fade-transform, translate(0, -50px));transition:var(--hub-modal-transition, var(--hub-sys-transition-base, all .2s ease-in-out))}.hub-modal.show .hub-modal__dialog{transform:var(--hub-modal-show-transform, none)}.hub-modal.hub-modal--static .hub-modal__dialog{transform:var(--hub-modal-scale-transform, scale(1.02))}.hub-modal__dialog--fullscreen{--hub-modal-dialog-inset: 0px;width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}.hub-modal__dialog--fullscreen.hub-modal__dialog--scrollable .hub-modal__content{max-height:100%}.hub-modal--offcanvas.hub-modal--placement-start .hub-modal__dialog{margin:0 auto 0 0}.hub-modal--offcanvas.hub-modal--placement-end .hub-modal__dialog{margin:0 0 0 auto}.hub-modal--offcanvas.hub-modal--placement-top .hub-modal__dialog,.hub-modal--offcanvas.hub-modal--placement-bottom .hub-modal__dialog{margin:0 auto}.hub-modal--offcanvas.hub-modal--placement-start .hub-modal__dialog,.hub-modal--offcanvas.hub-modal--placement-end .hub-modal__dialog{width:var(--hub-modal-offcanvas-width);max-width:var(--hub-modal-offcanvas-width);height:100%;max-height:100%}.hub-modal--offcanvas.hub-modal--placement-top .hub-modal__dialog,.hub-modal--offcanvas.hub-modal--placement-bottom .hub-modal__dialog{width:100%;max-width:100%;height:var(--hub-modal-offcanvas-height);max-height:var(--hub-modal-offcanvas-height)}.hub-modal--offcanvas .hub-modal__dialog{--hub-modal-dialog-inset: 0px}.hub-modal--offcanvas .hub-modal__content{height:100%;border-radius:var(--hub-modal-offcanvas-border-radius)}.hub-modal--offcanvas .hub-modal__body{min-height:0;overflow-y:auto}@media(max-width:575.98px){.hub-modal__dialog--fullscreen-sm-down{width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-sm-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-sm-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:767.98px){.hub-modal__dialog--fullscreen-md-down{width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-md-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-md-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:991.98px){.hub-modal__dialog--fullscreen-lg-down{width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-lg-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-lg-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:1199.98px){.hub-modal__dialog--fullscreen-xl-down{width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-xl-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-xl-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:1399.98px){.hub-modal__dialog--fullscreen-xxl-down{width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-xxl-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-xxl-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}.hub-modal__backdrop{position:fixed;inset:0;opacity:var(--hub-modal-backdrop-opacity-hidden, var(--hub-sys-opacity-0, 0));z-index:var(--hub-modal-backdrop-zindex, 1054);background-color:var(--hub-modal-backdrop-bg, var(--hub-ref-color-black, #000000));pointer-events:none}.hub-modal__backdrop.fade{transition:var(--hub-modal-backdrop-transition, opacity .15s linear)}.hub-modal__backdrop.show{opacity:var(--hub-modal-backdrop-opacity, var(--hub-sys-opacity-50, .5))}\n"] }]
956
+ `, encapsulation: ViewEncapsulation.None, styles: ["@charset \"UTF-8\";body.hub-modal-open{overflow:hidden}:root{--hub-modal-zindex-base: var(--hub-sys-zindex-modal, 1055);--hub-modal-zindex: var(--hub-modal-zindex-base, var(--hub-sys-zindex-modal, 1055));--hub-modal-backdrop-zindex: calc(var(--hub-modal-zindex, var(--hub-sys-zindex-modal, 1055)) - 1);--hub-modal-backdrop-bg: var(--hub-ref-color-black, #000000);--hub-modal-backdrop-opacity: var(--hub-sys-opacity-50, .5);--hub-modal-backdrop-opacity-hidden: var(--hub-sys-opacity-0, 0);--hub-modal-backdrop-transition: opacity .15s linear}:where(.hub-modal){--hub-modal-accent: var(--hub-sys-color-primary, #0d6efd);--hub-modal-accent-emphasis: color-mix(in oklch, var(--hub-modal-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-modal-accent-subtle: color-mix(in oklch, var(--hub-modal-accent) 12%, var(--hub-sys-surface-page, #ffffff));--hub-modal-accent-on: oklch(from var(--hub-modal-accent) clamp(0, (.62 - l) * 1000, 1) 0 h);--hub-modal-accent-border: color-mix(in oklch, var(--hub-modal-accent) 35%, var(--hub-sys-surface-page, #ffffff));--hub-modal-accent-bar-width: 0;--hub-modal-width: auto;--hub-modal-max-width: 500px;--hub-modal-margin-y: 1.75rem;--hub-modal-margin-x: auto;--hub-modal-margin-top: var(--hub-modal-margin-y, 1.75rem);--hub-modal-margin-right: var(--hub-modal-margin-x, auto);--hub-modal-margin-bottom: var(--hub-modal-margin-y, 1.75rem);--hub-modal-margin-left: var(--hub-modal-margin-x, auto);--hub-modal-margin-block: calc(var(--hub-modal-margin-top, 1.75rem) + var(--hub-modal-margin-bottom, 1.75rem));--hub-modal-margin: var(--hub-modal-margin-top) var(--hub-modal-margin-right) var(--hub-modal-margin-bottom) var(--hub-modal-margin-left);--hub-modal-placement-start-margin-top: var(--hub-modal-margin-top, 1.75rem);--hub-modal-placement-start-margin-right: auto;--hub-modal-placement-start-margin-bottom: var(--hub-modal-margin-bottom, 1.75rem);--hub-modal-placement-start-margin-left: 0;--hub-modal-placement-start-margin-block: calc( var(--hub-modal-placement-start-margin-top, 1.75rem) + var(--hub-modal-placement-start-margin-bottom, 1.75rem) );--hub-modal-placement-start-margin: var(--hub-modal-placement-start-margin-top) var(--hub-modal-placement-start-margin-right) var(--hub-modal-placement-start-margin-bottom) var(--hub-modal-placement-start-margin-left);--hub-modal-placement-end-margin-top: var(--hub-modal-margin-top, 1.75rem);--hub-modal-placement-end-margin-right: 0;--hub-modal-placement-end-margin-bottom: var(--hub-modal-margin-bottom, 1.75rem);--hub-modal-placement-end-margin-left: auto;--hub-modal-placement-end-margin-block: calc( var(--hub-modal-placement-end-margin-top, 1.75rem) + var(--hub-modal-placement-end-margin-bottom, 1.75rem) );--hub-modal-placement-end-margin: var(--hub-modal-placement-end-margin-top) var(--hub-modal-placement-end-margin-right) var(--hub-modal-placement-end-margin-bottom) var(--hub-modal-placement-end-margin-left);--hub-modal-placement-top-margin-top: 0;--hub-modal-placement-top-margin-right: auto;--hub-modal-placement-top-margin-bottom: 0;--hub-modal-placement-top-margin-left: auto;--hub-modal-placement-top-margin-block: calc( var(--hub-modal-placement-top-margin-top, 0px) + var(--hub-modal-placement-top-margin-bottom, 0px) );--hub-modal-placement-top-margin: var(--hub-modal-placement-top-margin-top) var(--hub-modal-placement-top-margin-right) var(--hub-modal-placement-top-margin-bottom) var(--hub-modal-placement-top-margin-left);--hub-modal-placement-bottom-margin-top: 0;--hub-modal-placement-bottom-margin-right: auto;--hub-modal-placement-bottom-margin-bottom: 0;--hub-modal-placement-bottom-margin-left: auto;--hub-modal-placement-bottom-margin-block: calc( var(--hub-modal-placement-bottom-margin-top, 0px) + var(--hub-modal-placement-bottom-margin-bottom, 0px) );--hub-modal-placement-bottom-margin: var(--hub-modal-placement-bottom-margin-top) var(--hub-modal-placement-bottom-margin-right) var(--hub-modal-placement-bottom-margin-bottom) var(--hub-modal-placement-bottom-margin-left);--hub-modal-color: var(--hub-sys-text-primary, #212529);--hub-modal-bg: var(--hub-sys-surface-page, #ffffff);--hub-modal-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-modal-border-width: var(--hub-ref-border-width, 1px);--hub-modal-border-radius: var(--hub-ref-radius-lg, .5rem);--hub-modal-placement-start-border-radius: 0 var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) 0;--hub-modal-placement-end-border-radius: var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) 0 0 var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem));--hub-modal-placement-top-border-radius: 0 0 var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem));--hub-modal-placement-bottom-border-radius: var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) 0 0;--hub-modal-inner-border-radius: calc( var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var( --hub-modal-border-width, var(--hub-ref-border-width, 1px) ) );--hub-modal-box-shadow: var(--hub-sys-shadow-lg, 0 1rem 3rem rgba(0, 0, 0, .175));--hub-modal-padding-x: var(--hub-ref-space-3, 1rem);--hub-modal-padding-y: var(--hub-ref-space-3, 1rem);--hub-modal-header-padding-x: var(--hub-modal-padding-x);--hub-modal-header-padding-y: var(--hub-modal-padding-y);--hub-modal-header-gap: var(--hub-ref-space-2, .5rem);--hub-modal-header-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-modal-header-border-width: var(--hub-ref-border-width, 1px);--hub-modal-title-font-size: var(--hub-ref-font-size-lg, 1.25rem);--hub-modal-title-font-weight: var(--hub-ref-font-weight-medium, 500);--hub-modal-title-line-height: var(--hub-ref-line-height-base, 1.5);--hub-modal-title-margin-x: 0;--hub-modal-title-margin-y: 0;--hub-modal-title-color: var(--hub-modal-color, var(--hub-sys-text-primary, #212529));--hub-modal-body-padding-x: var(--hub-modal-padding-x);--hub-modal-body-padding-y: var(--hub-modal-padding-y);--hub-modal-footer-padding-x: var(--hub-modal-padding-x);--hub-modal-footer-padding-y: var(--hub-modal-padding-y);--hub-modal-footer-gap: var(--hub-ref-space-2, .5rem);--hub-modal-footer-bg: var(--hub-modal-bg, var(--hub-sys-surface-page, #ffffff));--hub-modal-footer-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-modal-footer-border-width: var(--hub-ref-border-width, 1px);--hub-modal-close-color: var(--hub-sys-text-primary, #212529);--hub-modal-close-size: var(--hub-ref-font-size-lg, 1.25rem);--hub-modal-close-line-height: 1;--hub-modal-close-padding-x: 0;--hub-modal-close-padding-y: 0;--hub-modal-close-opacity: .5;--hub-modal-close-hover-opacity: .75;--hub-modal-fade-transform: translate(0, -50px);--hub-modal-show-transform: none;--hub-modal-transition: var(--hub-sys-transition-base, all .2s ease-in-out);--hub-modal-resize-duration: 200;--hub-modal-resize-easing: ease-in-out;--hub-modal-scale-transform: scale(1.02);--hub-modal-offcanvas-width: min(28rem, 100%);--hub-modal-offcanvas-height: min(60vh, 100%);--hub-modal-offcanvas-border-radius: 0}.hub-modal{position:fixed;inset:0;display:block;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0;pointer-events:auto;z-index:var(--hub-modal-zindex, var(--hub-sys-zindex-modal, 1055));color:var(--hub-modal-color, var(--hub-sys-text-primary, #212529))}.hub-modal--placement-top,.hub-modal--placement-bottom{display:flex;justify-content:center}.hub-modal--placement-top{align-items:flex-start}.hub-modal--placement-bottom{align-items:flex-end}.hub-modal__dialog{position:relative;width:var(--hub-modal-width, auto);max-width:var(--hub-modal-max-width, 500px);margin:var(--hub-modal-margin, 1.75rem auto);pointer-events:none}.hub-modal__dialog--sm{--hub-modal-max-width: 300px}.hub-modal__dialog--lg{--hub-modal-max-width: 800px}.hub-modal__dialog--xl{--hub-modal-max-width: 1140px}.hub-modal__dialog--centered,.hub-modal__dialog--centered-vertical{display:flex;align-items:center;min-height:calc(100% - var(--hub-modal-margin-block, 3.5rem))}.hub-modal__dialog--placement-start{margin:var(--hub-modal-placement-start-margin, var(--hub-modal-margin-top, 1.75rem) auto var(--hub-modal-margin-bottom, 1.75rem) 0);--hub-modal-fade-transform: translateX(-100%)}.hub-modal__dialog--placement-end{margin:var(--hub-modal-placement-end-margin, var(--hub-modal-margin-top, 1.75rem) 0 var(--hub-modal-margin-bottom, 1.75rem) auto);--hub-modal-fade-transform: translateX(100%)}.hub-modal__dialog--placement-top{margin:var(--hub-modal-placement-top-margin, 0 auto 0 auto);--hub-modal-fade-transform: translateY(-100%)}.hub-modal__dialog--placement-bottom{margin:var(--hub-modal-placement-bottom-margin, 0 auto 0 auto);--hub-modal-fade-transform: translateY(100%)}.hub-modal__dialog--scrollable{display:flex;max-height:calc(100% - var(--hub-modal-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-start.hub-modal__dialog--centered-vertical{min-height:calc(100% - var(--hub-modal-placement-start-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-end.hub-modal__dialog--centered-vertical{min-height:calc(100% - var(--hub-modal-placement-end-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-start.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-start-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-end.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-end-margin-block, 3.5rem))}.hub-modal .hub-modal__dialog--placement-top.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-top-margin-block, 0px))}.hub-modal .hub-modal__dialog--placement-bottom.hub-modal__dialog--scrollable{max-height:calc(100% - var(--hub-modal-placement-bottom-margin-block, 0px))}.hub-modal__content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;outline:0;color:var(--hub-modal-color, var(--hub-sys-text-primary, #212529));background-color:var(--hub-modal-bg, var(--hub-sys-surface-page, #ffffff));border:var(--hub-modal-border-width, var(--hub-ref-border-width, 1px)) solid var(--hub-modal-border-color, var(--hub-sys-border-color-default, #dee2e6));border-radius:var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem));box-shadow:var(--hub-modal-box-shadow, var(--hub-sys-shadow-lg, 0 1rem 3rem rgba(0, 0, 0, .175)))}.hub-modal__dialog{--hub-modal-dialog-inset: var(--hub-modal-margin-block, 3.5rem)}.hub-modal__dialog>.hub-modal__content{max-height:calc(100dvh - var(--hub-modal-dialog-inset));min-height:0}.hub-modal__dialog .hub-modal__body{min-height:0;overflow-y:auto}.hub-modal__dialog--scrollable .hub-modal__content{overflow:hidden}.hub-modal__dialog--placement-start .hub-modal__content{border-radius:var(--hub-modal-placement-start-border-radius)}.hub-modal__dialog--placement-end .hub-modal__content{border-radius:var(--hub-modal-placement-end-border-radius)}.hub-modal__dialog--placement-top .hub-modal__content{border-radius:var(--hub-modal-placement-top-border-radius)}.hub-modal__dialog--placement-bottom .hub-modal__content{border-radius:var(--hub-modal-placement-bottom-border-radius)}.hub-modal--primary{--hub-modal-accent: var(--hub-sys-color-primary, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--primary .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--secondary{--hub-modal-accent: var(--hub-sys-color-secondary, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--secondary .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--success{--hub-modal-accent: var(--hub-sys-color-success, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--success .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--danger{--hub-modal-accent: var(--hub-sys-color-danger, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--danger .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--warning{--hub-modal-accent: var(--hub-sys-color-warning, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--warning .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--info{--hub-modal-accent: var(--hub-sys-color-info, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--info .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--neutral{--hub-modal-accent: var(--hub-sys-color-neutral, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--neutral .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--light{--hub-modal-accent: var(--hub-sys-color-light, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--light .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal--dark{--hub-modal-accent: var(--hub-sys-color-dark, var(--hub-sys-color-primary, #0d6efd));--hub-modal-bg: var(--hub-modal-accent-subtle);--hub-modal-border-color: var(--hub-modal-accent-border);--hub-modal-header-border-color: var(--hub-modal-accent-border);--hub-modal-footer-border-color: var(--hub-modal-accent-border);--hub-modal-title-color: var(--hub-modal-accent)}.hub-modal--dark .hub-modal__content:before{content:\"\";position:absolute;inset:0 0 auto;height:var(--hub-modal-accent-bar-width, 0);background-color:var(--hub-modal-accent);border-start-start-radius:inherit;border-start-end-radius:inherit;pointer-events:none}.hub-modal__header{display:flex;align-items:var(--hub-modal-header-align-items, center);gap:var(--hub-modal-header-gap, var(--hub-ref-space-2, .5rem));padding:var(--hub-modal-header-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-modal-header-padding-x, var(--hub-ref-space-3, 1rem));border-bottom:var(--hub-modal-header-border-width, var(--hub-ref-border-width, 1px)) solid var(--hub-modal-header-border-color, var(--hub-sys-border-color-default, #dee2e6));border-top-left-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))));border-top-right-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))))}.hub-modal__heading{display:flex;flex:1 1 auto;flex-direction:var(--hub-modal-heading-direction, row);align-items:var(--hub-modal-heading-align-items, center);gap:var(--hub-modal-heading-gap, var(--hub-modal-header-gap, var(--hub-ref-space-2, .5rem)));min-width:0}.hub-modal__header .modal-title,.hub-modal__header .hub-modal__title{color:var(--hub-modal-title-color, var(--hub-modal-color, var(--hub-sys-text-primary, #212529)));font-size:var(--hub-modal-title-font-size, var(--hub-ref-font-size-lg, 1.25rem));font-weight:var(--hub-modal-title-font-weight, var(--hub-ref-font-weight-medium, 500));line-height:var(--hub-modal-title-line-height, var(--hub-ref-line-height-base, 1.5));margin:var(--hub-modal-title-margin-y, 0) var(--hub-modal-title-margin-x, 0)}.hub-modal__body{position:relative;flex:1 1 auto;padding:var(--hub-modal-body-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-modal-body-padding-x, var(--hub-ref-space-3, 1rem))}.hub-modal__dialog--scrollable .hub-modal__body{overflow-y:auto}.hub-modal__footer{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--hub-modal-footer-gap, var(--hub-ref-space-2, .5rem));padding:var(--hub-modal-footer-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-modal-footer-padding-x, var(--hub-ref-space-3, 1rem));color:var(--hub-modal-color, var(--hub-sys-text-primary, #212529));background-color:var(--hub-modal-footer-bg, var(--hub-modal-bg, var(--hub-sys-surface-page, #ffffff)));border-top:var(--hub-modal-footer-border-width, var(--hub-ref-border-width, 1px)) solid var(--hub-modal-footer-border-color, var(--hub-sys-border-color-default, #dee2e6));border-bottom-right-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))));border-bottom-left-radius:var(--hub-modal-inner-border-radius, calc(var(--hub-modal-border-radius, var(--hub-ref-radius-lg, .5rem)) - var(--hub-modal-border-width, var(--hub-ref-border-width, 1px))))}.hub-modal__close{margin-left:auto;padding:var(--hub-modal-close-padding-y, 0) var(--hub-modal-close-padding-x, 0);font-size:var(--hub-modal-close-size, var(--hub-ref-font-size-lg, 1.25rem));line-height:var(--hub-modal-close-line-height, 1);background:transparent;border:0;cursor:pointer;color:var(--hub-modal-close-color, var(--hub-sys-text-primary, #212529));opacity:var(--hub-modal-close-opacity, .5)}.hub-modal__close:before{content:\"\\d7\"}.hub-modal__close:hover,.hub-modal__close:focus{opacity:var(--hub-modal-close-hover-opacity, .75)}.hub-modal__close:focus-visible{outline:var(--hub-modal-close-focus-ring-width, 2px) solid var(--hub-modal-close-focus-ring-color, var(--hub-modal-accent));outline-offset:var(--hub-modal-close-focus-ring-offset, 2px);border-radius:var(--hub-modal-close-focus-ring-radius, var(--hub-ref-radius-sm, .25rem));opacity:1}.hub-modal.fade .hub-modal__dialog{transform:var(--hub-modal-fade-transform, translate(0, -50px));transition:var(--hub-modal-transition, var(--hub-sys-transition-base, all .2s ease-in-out))}.hub-modal.show .hub-modal__dialog{transform:var(--hub-modal-show-transform, none)}.hub-modal.hub-modal--static .hub-modal__dialog{transform:var(--hub-modal-scale-transform, scale(1.02))}.hub-modal__dialog--fullscreen{--hub-modal-dialog-inset: 0px;width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}.hub-modal__dialog--fullscreen.hub-modal__dialog--scrollable .hub-modal__content{max-height:100%}.hub-modal--offcanvas.hub-modal--placement-start .hub-modal__dialog{margin:0 auto 0 0}.hub-modal--offcanvas.hub-modal--placement-end .hub-modal__dialog{margin:0 0 0 auto}.hub-modal--offcanvas.hub-modal--placement-top .hub-modal__dialog,.hub-modal--offcanvas.hub-modal--placement-bottom .hub-modal__dialog{margin:0 auto}.hub-modal--offcanvas.hub-modal--placement-start .hub-modal__dialog,.hub-modal--offcanvas.hub-modal--placement-end .hub-modal__dialog{width:var(--hub-modal-offcanvas-width);max-width:var(--hub-modal-offcanvas-width);height:100%;max-height:100%}.hub-modal--offcanvas.hub-modal--placement-top .hub-modal__dialog,.hub-modal--offcanvas.hub-modal--placement-bottom .hub-modal__dialog{width:100%;max-width:100%;height:var(--hub-modal-offcanvas-height);max-height:var(--hub-modal-offcanvas-height)}.hub-modal--offcanvas .hub-modal__dialog{--hub-modal-dialog-inset: 0px}.hub-modal--offcanvas .hub-modal__content{height:100%;border-radius:var(--hub-modal-offcanvas-border-radius)}.hub-modal--offcanvas .hub-modal__body{min-height:0;overflow-y:auto}@media(max-width:575.98px){.hub-modal__dialog--fullscreen-sm-down{--hub-modal-dialog-inset: 0px;width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-sm-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-sm-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:767.98px){.hub-modal__dialog--fullscreen-md-down{--hub-modal-dialog-inset: 0px;width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-md-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-md-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:991.98px){.hub-modal__dialog--fullscreen-lg-down{--hub-modal-dialog-inset: 0px;width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-lg-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-lg-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:1199.98px){.hub-modal__dialog--fullscreen-xl-down{--hub-modal-dialog-inset: 0px;width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-xl-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-xl-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}@media(max-width:1399.98px){.hub-modal__dialog--fullscreen-xxl-down{--hub-modal-dialog-inset: 0px;width:100%;max-width:100%;height:100%;max-height:100%;margin:0}.hub-modal__dialog--fullscreen-xxl-down .hub-modal__content{height:100%;border:0;border-radius:0;display:flex;flex-direction:column}.hub-modal__dialog--fullscreen-xxl-down .hub-modal__body{flex:1 1 auto;min-height:0;overflow-y:auto}}.hub-modal__backdrop{position:fixed;inset:0;opacity:var(--hub-modal-backdrop-opacity-hidden, var(--hub-sys-opacity-0, 0));z-index:var(--hub-modal-backdrop-zindex, 1054);background-color:var(--hub-modal-backdrop-bg, var(--hub-ref-color-black, #000000));pointer-events:none}.hub-modal__backdrop.fade{transition:var(--hub-modal-backdrop-transition, opacity .15s linear)}.hub-modal__backdrop.show{opacity:var(--hub-modal-backdrop-opacity, var(--hub-sys-opacity-50, .5))}\n"] }]
957
957
  }], propDecorators: { _dialogEl: [{ type: i0.ViewChild, args: ['dialog', { isSignal: true }] }], _headingContainerEl: [{ type: i0.ViewChild, args: ['headingContainer', { isSignal: true }] }], _bodyContainerEl: [{ type: i0.ViewChild, args: ['bodyContainer', { isSignal: true }] }], _footerContainerEl: [{ type: i0.ViewChild, args: ['footerContainer', { isSignal: true }] }], _closeButtonEl: [{ type: i0.ViewChild, args: ['closeButton', { isSignal: true }] }], _contentEl: [{ type: i0.ViewChild, args: ['content', { isSignal: true }] }], animation: [{ type: i0.Input, args: [{ isSignal: true, alias: "animation", required: false }] }], ariaLabelledBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabelledBy", required: false }] }], ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaDescribedBy", required: false }] }], closeAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeAriaLabel", required: false }] }], closeButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeButton", required: false }] }], backdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "backdrop", required: false }] }], centered: [{ type: i0.Input, args: [{ isSignal: true, alias: "centered", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], offcanvas: [{ type: i0.Input, args: [{ isSignal: true, alias: "offcanvas", required: false }] }], fullscreen: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullscreen", required: false }] }], keyboard: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyboard", required: false }] }], scrollable: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollable", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], windowClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "windowClass", required: false }] }], modalDialogClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "modalDialogClass", required: false }] }], dismissEvent: [{ type: i0.Output, args: ["dismiss"] }] } });
958
958
 
959
959
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ng-hub-ui-modal.mjs","sources":["../../../projects/modal/src/lib/modal-placement.ts","../../../projects/modal/src/lib/modal-config.ts","../../../projects/modal/src/lib/modal-backdrop.ts","../../../projects/modal/src/lib/modal-dismiss-reasons.ts","../../../projects/modal/src/lib/modal-ref.ts","../../../projects/modal/src/lib/modal-window.ts","../../../projects/modal/src/lib/modal-stack.ts","../../../projects/modal/src/lib/modal.ts","../../../projects/modal/src/lib/modal.module.ts","../../../projects/modal/src/public-api.ts","../../../projects/modal/src/ng-hub-ui-modal.ts"],"sourcesContent":["/**\n * Supported modal placements within the viewport.\n */\nexport enum HubModalPlacement {\n\t/**\n\t * Places the modal in the center of the viewport.\n\t */\n\tCenter = 'center',\n\n\t/**\n\t * Anchors the modal to the start edge of the viewport.\n\t */\n\tStart = 'start',\n\n\t/**\n\t * Anchors the modal to the end edge of the viewport.\n\t */\n\tEnd = 'end',\n\n\t/**\n\t * Anchors the modal to the top edge of the viewport.\n\t */\n\tTop = 'top',\n\n\t/**\n\t * Anchors the modal to the bottom edge of the viewport.\n\t */\n\tBottom = 'bottom'\n}\n","import { Injectable, Injector } from '@angular/core';\nimport { HubModalPlacement } from './modal-placement';\n// import { HubConfig } from '../hub-config';\n\n/**\n * Options available when opening new modal windows with `HubModal.open()` method.\n *\n * The optional generic parameter `D` types the `data` payload delivered to the\n * modal content through `HubActiveModal<D>.data` / the `HUB_MODAL_DATA` token.\n */\nexport interface HubModalOptions<D = unknown> {\n\t/**\n\t * If `true`, modal opening and closing will be animated.\n\t *\n\t * @since 8.0.0\n\t */\n\tanimation?: boolean;\n\n\t/**\n\t * `aria-labelledby` attribute value to set on the modal window.\n\t *\n\t * @since 2.2.0\n\t */\n\tariaLabelledBy?: string;\n\n\t/**\n\t * `aria-describedby` attribute value to set on the modal window.\n\t *\n\t * @since 6.1.0\n\t */\n\tariaDescribedBy?: string;\n\n\t/**\n\t * Accessible name of the dismiss button the modal draws in its own header.\n\t *\n\t * That button carries no text — its glyph is painted by CSS — so this string is the\n\t * whole of what a screen reader announces. It ships in English, which leaves a\n\t * localized application with a control it cannot translate; pass the translated\n\t * string here, or set the default once on `HubModalConfig`.\n\t *\n\t * Default value is `'Close'`.\n\t */\n\tcloseAriaLabel?: string;\n\n\t/**\n\t * Whether the dialog draws the dismiss button in its own header.\n\t *\n\t * `false` for a dialog there is no free way out of — a choice that has to be made, a\n\t * wizard that provisions something on its way out and says so on the button that does\n\t * it. The button is left out of the DOM rather than hidden, because a button hidden\n\t * with CSS is still announced by a screen reader and still reached by the tab order,\n\t * which is the hiding that consumers were writing by hand.\n\t *\n\t * It governs the built-in button alone: `backdrop: 'static'` and `keyboard: false` are\n\t * the other two ways out, and each is still its own decision.\n\t *\n\t * Default value is `true`.\n\t */\n\tcloseButton?: boolean;\n\n\t/**\n\t * If `true`, the backdrop element will be created for a given modal.\n\t *\n\t * Alternatively, specify `'static'` for a backdrop which doesn't close the modal on click.\n\t *\n\t * Default value is `true`.\n\t */\n\tbackdrop?: boolean | 'static';\n\n\t/**\n\t * Callback right before the modal will be dismissed.\n\t *\n\t * If this function returns:\n\t * * `false`\n\t * * a promise resolved with `false`\n\t * * a promise that is rejected\n\t *\n\t * then the modal won't be dismissed.\n\t */\n\tbeforeDismiss?: () => boolean | Promise<boolean>;\n\n\t/**\n\t * If `true`, the modal will be centered vertically.\n\t *\n\t * Default value is `false`.\n\t *\n\t * @since 1.1.0\n\t */\n\tcentered?: boolean;\n\n\t/**\n\t * Controls where the modal is placed within the viewport.\n\t *\n\t * Default value is `'center'`.\n\t */\n\tplacement?: HubModalPlacement;\n\n\t/**\n\t * Opens the dialog as a drawer: flush against the edge named by `placement`, square on\n\t * that side, stretched to the full height (or width, from the top or bottom), and\n\t * scrolling in the body so the header and footer stay put.\n\t *\n\t * Separate from `placement` rather than implied by it. An edge placement already ships\n\t * and already means \"a floating dialog that enters from this side\"; making it mean\n\t * \"drawer\" would change what every consumer of it sees, with nothing to catch it — a\n\t * silent visual break is worse than an extra option.\n\t *\n\t * With no `placement`, this opens from the end edge, so a drawer is one decision.\n\t *\n\t * Default value is `false`.\n\t */\n\toffcanvas?: boolean;\n\n\t/**\n\t * Dismisses the modal when the application navigates away from the screen that opened it.\n\t *\n\t * A dialog belongs to the screen underneath it. Left alone it outlives that screen: the new\n\t * one renders behind a backdrop that swallows every click, and nothing on it explains why the\n\t * page stopped responding. Closing it is what a reader expects and what the CDK's dialog has\n\t * done for years, so it is the default here too.\n\t *\n\t * A change of path or query string counts, because either one replaces the screen under the\n\t * dialog. A change of anchor does not: it moves the reader inside that same screen. A wizard\n\t * that drives navigation itself, and stays open across it, is the case for turning this off.\n\t *\n\t * The dismissal reason is `ModalDismissReasons.NAVIGATION`.\n\t *\n\t * Default value is `true`.\n\t */\n\tcloseOnNavigation?: boolean;\n\n\t/**\n\t * A selector specifying the element all new modal windows should be appended to.\n\t * Since v5.3.0 it is also possible to pass the reference to an `HTMLElement`.\n\t *\n\t * If not specified, will be `body`.\n\t */\n\tcontainer?: string | HTMLElement;\n\n\t/**\n\t * If `true` modal will always be displayed in fullscreen mode.\n\t *\n\t * For values like `'md'` it means that modal will be displayed in fullscreen mode\n\t * only if the viewport width is below `'md'`. For custom strings (ex. when passing `'mysize'`)\n\t * it will add a `'modal-fullscreen-mysize-down'` class.\n\t *\n\t * If not specified will be `false`.\n\t *\n\t * @since 12.1.0\n\t */\n\tfullscreen?: 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | boolean | string;\n\n\t/**\n\t * The `Injector` to use for modal content.\n\t */\n\tinjector?: Injector;\n\n\t/**\n\t * If `true`, the modal will be closed when `Escape` key is pressed\n\t *\n\t * Default value is `true`.\n\t */\n\tkeyboard?: boolean;\n\n\t/**\n\t * Scrollable modal content (false by default).\n\t *\n\t * @since 5.0.0\n\t */\n\tscrollable?: boolean;\n\n\t/**\n\t * Size of a new modal window.\n\t */\n\tsize?: 'sm' | 'lg' | 'xl' | string;\n\n\t/**\n\t * Semantic accent of the modal, for meaningful dialogs (a destructive\n\t * confirmation, a success notice…). Applies the `hub-modal--<variant>` class\n\t * to the window, which tints the dialog surface, its outer and header/footer\n\t * borders, and its title.\n\t *\n\t * The built-in values (`'primary'` · `'success'` · `'danger'` · `'warning'`\n\t * · `'info'`) map to the design-system colours, but **any string is accepted**\n\t * — the modal reads `--hub-sys-color-<variant>` from the host application.\n\t *\n\t * A top accent bar is available too, but ships at zero width: set\n\t * `--hub-modal-accent-bar-width` to turn it on.\n\t *\n\t * If not specified, the modal is rendered neutral.\n\t */\n\tvariant?: 'primary' | 'success' | 'danger' | 'warning' | 'info' | (string & {});\n\n\t/**\n\t * A custom class to append to the modal window.\n\t */\n\twindowClass?: string;\n\n\t/**\n\t * A custom class to append to the modal dialog.\n\t *\n\t * @since 9.1.0\n\t */\n\tmodalDialogClass?: string;\n\n\t/**\n\t * A custom class to append to the modal backdrop.\n\t *\n\t * @since 1.1.0\n\t */\n\tbackdropClass?: string;\n\n\t/**\n\t * Allows to specify a custom selector for the header element of the modal window. This can be useful if you want to target\n\t * a specific element within the modal to act as the header, for example, to apply custom styling or functionality to it. By\n\t * providing a CSS selector string, you can target the desired\theader element within the modal content.\n\t */\n\theaderSelector?: string;\n\n\t/**\n\t * Allows to specify a custom selector for the footer element of the modal window. This can be useful if you want to target\n\t * a specific element within the modal to act as the footer, for example, to apply custom styling or functionality to it. By\n\t * providing a CSS selector string, you can target the desired footer element within the modal content.\n\t */\n\tfooterSelector?: string;\n\n\t/**\n\t * Selector for the block whose children become the modal's **body**.\n\t *\n\t * The body is the one slot that has always been implicit: whatever was left over once the\n\t * header and the footer had been taken out. That works while the three parts are written\n\t * in order, and stops working the moment the content has anything else in it — a\n\t * `<ng-container>` holding state, a comment, a stray text node — because leftovers are\n\t * defined by what they are *not*.\n\t *\n\t * Naming it makes the body an ordinary slot like the other two. Nothing is ever dropped:\n\t * whatever matches this selector goes into the body first, and anything left unclaimed by\n\t * any of the three follows it, so adding the selector to existing content cannot lose a\n\t * node.\n\t *\n\t * @example\n\t * this.modal.open(MyModalComponent, {\n\t * headerSelector: '[hubModalHeader]',\n\t * bodySelector: '[hubModalBody]',\n\t * footerSelector: '[hubModalFooter]'\n\t * });\n\t */\n\tbodySelector?: string;\n\n\t/** Used to specify a custom selector for elements that can trigger the dismissal of the modal window. By providing a CSS selector\n\t * string for `dismissSelector`, you can target specific elements within the modal content that, when interacted with (e.g., clicked),\n\t * will close or dismiss the modal window.\n\t */\n\tdismissSelector?: string;\n\n\t/**\n\t * Used to specify a custom selector for elements that can trigger the closing of the modal window. By providing a CSS selector\n\t * string for `closeSelector`, you can target specific elements within the modal content that, when interacted with (e.g., clicked),\n\t * will close the modal window. This allows for customization of the elements that can act as close buttons for the modal.\n\t */\n\tcloseSelector?: string;\n\n\t/** Used to store any additional data that needs to be passed to the modal window when it is opened. This property allows you\n\t * to provide custom data to the modal component, which can then be accessed and utilized within the modal content or logic.\n\t * It provides flexibility for passing dynamic information to the modal window based on the specific use case or requirements.\n\t */\n\tdata?: D;\n}\n\n/**\n * Options that can be changed on an opened modal with `HubModalRef.update()` and `HubActiveModal.update()` methods.\n *\n * @since 14.2.0\n */\nexport type HubModalUpdatableOptions = Pick<\n\tHubModalOptions,\n\t| 'ariaLabelledBy'\n\t| 'ariaDescribedBy'\n\t| 'centered'\n\t| 'placement'\n\t| 'offcanvas'\n\t| 'fullscreen'\n\t| 'backdropClass'\n\t| 'size'\n\t| 'variant'\n\t| 'windowClass'\n\t| 'modalDialogClass'\n>;\n\n/**\n * A configuration service for the [`HubModal`](#/components/modal/api#HubModal) service.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all modals used in the application.\n *\n * @since 3.1.0\n */\n@Injectable({ providedIn: 'root' })\nexport class HubModalConfig implements Required<HubModalOptions> {\n\t// private _hubConfig = inject(HubConfig);\n\tprivate _animation?: boolean;\n\n\tariaLabelledBy!: string;\n\tariaDescribedBy!: string;\n\tcloseAriaLabel = 'Close';\n\tcloseButton = true;\n\tbackdrop: boolean | 'static' = true;\n\tbeforeDismiss!: () => boolean | Promise<boolean>;\n\tcentered!: boolean;\n\tcloseOnNavigation = true;\n\tplacement: HubModalPlacement = HubModalPlacement.Center;\n\toffcanvas = false;\n\tcontainer!: string | HTMLElement;\n\tfullscreen: 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | boolean | string = false;\n\tinjector!: Injector;\n\tkeyboard = true;\n\tscrollable!: boolean;\n\tsize!: 'sm' | 'lg' | 'xl' | string;\n\tvariant!: 'primary' | 'success' | 'danger' | 'warning' | 'info' | (string & {});\n\twindowClass!: string;\n\tmodalDialogClass!: string;\n\tbackdropClass!: string;\n\theaderSelector!: string;\n\tfooterSelector!: string;\n\tbodySelector!: string;\n\tdismissSelector: string = '[data-dismiss=\"modal\"]';\n\tcloseSelector: string = '[data-close=\"modal\"]';\n\tdata: any;\n\n\tget animation(): boolean {\n\t\treturn this._animation ?? true; /* this._hubConfig.animation */\n\t}\n\tset animation(animation: boolean) {\n\t\tthis._animation = animation;\n\t}\n}\n","import {\n\tafterNextRender,\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tinject,\n\tInjector,\n\tinput,\n\tNgZone,\n\tOnInit\n} from '@angular/core';\nimport { hubRunTransition, reflow } from 'ng-hub-ui-utils';\nimport { Observable } from 'rxjs';\n\n/**\n * Represents the backdrop element associated with an active modal window.\n * It is responsible for displaying a dark overlay and handling entry/exit animations.\n */\n@Component({\n\tselector: 'hub-modal-backdrop',\n\tstandalone: true,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: '',\n\thost: {\n\t\t'[class]': '\"hub-modal__backdrop\" + (backdropClass() ? \" \" + backdropClass() : \"\")',\n\t\t'[class.show]': '!animation()',\n\t\t'[class.fade]': 'animation()'\n\t}\n})\nexport class HubModalBackdrop implements OnInit {\n\tprivate _nativeElement = inject(ElementRef).nativeElement as HTMLElement;\n\tprivate _zone = inject(NgZone);\n\tprivate _injector = inject(Injector);\n\n\t/**\n\t * Determines whether the backdrop should use CSS transitions during its initialization and destruction.\n\t */\n\treadonly animation = input<boolean>(true);\n\n\t/**\n\t * Allows applying a custom CSS class to the backdrop element.\n\t */\n\treadonly backdropClass = input<string>();\n\n\tngOnInit() {\n\t\t// `NgZone.onStable` never emits under `provideZonelessChangeDetection` (the zone is a\n\t\t// `NoopNgZone`), so the entry transition never ran there. `afterNextRender` fires in\n\t\t// both modes. See the same fix in `HubModalWindowComponent.ngOnInit`.\n\t\tafterNextRender(\n\t\t\t() => {\n\t\t\t\thubRunTransition(\n\t\t\t\t\tthis._zone,\n\t\t\t\t\tthis._nativeElement,\n\t\t\t\t\t(element: HTMLElement, animation: boolean) => {\n\t\t\t\t\t\tif (animation) {\n\t\t\t\t\t\t\treflow(element);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.classList.add('show');\n\t\t\t\t\t},\n\t\t\t\t\t{ animation: this.animation(), runningTransition: 'continue' }\n\t\t\t\t);\n\t\t\t},\n\t\t\t{ injector: this._injector }\n\t\t);\n\t}\n\n\t/**\n\t * Triggers the hide transition for the backdrop element and removes the `show` CSS class.\n\t *\n\t * @returns An observable that completes once the exit transition has ended.\n\t */\n\thide(): Observable<void> {\n\t\treturn hubRunTransition(this._zone, this._nativeElement, ({ classList }) => classList.remove('show'), {\n\t\t\tanimation: this.animation(),\n\t\t\trunningTransition: 'stop'\n\t\t});\n\t}\n}\n","export enum ModalDismissReasons {\n\tBACKDROP_CLICK,\n\tESC,\n\tNAVIGATION\n}\n","import { ComponentRef, InjectionToken } from '@angular/core';\nimport { ContentRef, isDefined, isPromise } from 'ng-hub-ui-utils';\nimport { Observable, of, Subject, zip } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { HubModalBackdrop } from './modal-backdrop';\nimport { HubModalOptions, HubModalUpdatableOptions } from './modal-config';\nimport { HubModalWindow } from './modal-window';\n\n/**\n * Injection token carrying the `HubModalOptions.data` payload down to the modal\n * content component. Inject it to read the payload in a typed way, mirroring the\n * Angular CDK `DIALOG_DATA` pattern:\n *\n * ```ts\n * private readonly data = inject(HUB_MODAL_DATA) as MyPayload;\n * ```\n *\n * It is provided alongside `HubActiveModal` in the content component's element\n * injector and resolves to `null` when no `data` option was supplied.\n *\n * @since 22.3.0\n */\nexport const HUB_MODAL_DATA = new InjectionToken<unknown>('HUB_MODAL_DATA');\n\n/**\n * A reference to the currently opened (active) modal.\n *\n * Instances of this class can be injected into your component passed as modal content.\n * So you can `.update()`, `.close()` or `.dismiss()` the modal window from your component.\n *\n * The optional generic parameter `D` types the {@link HubActiveModal.data} payload\n * passed through `HubModalOptions.data`.\n */\nexport class HubActiveModal<D = unknown, R = any> {\n\t/**\n\t * Creates the active modal reference.\n\t *\n\t * @param _data The payload supplied via `HubModalOptions.data`, if any.\n\t */\n\tconstructor(private readonly _data: D = null as D) {}\n\n\t/**\n\t * The typed payload passed to the modal through `HubModalOptions.data`.\n\t *\n\t * Equivalent to injecting the {@link HUB_MODAL_DATA} token, but strongly typed\n\t * when the generic parameter `D` is supplied. Resolves to `null` when no `data`\n\t * option was provided.\n\t *\n\t * @since 22.3.0\n\t */\n\tget data(): D {\n\t\treturn this._data;\n\t}\n\n\t/**\n\t * Updates options of an opened modal.\n\t *\n\t * @since 14.2.0\n\t */\n\tupdate(options: HubModalUpdatableOptions): void {}\n\t/**\n\t * Closes the modal with an optional `result` value.\n\t *\n\t * The `HubModalRef.result` promise will be resolved with the provided value.\n\t */\n\tclose(result?: R): void {}\n\n\t/**\n\t * Dismisses the modal with an optional `reason` value.\n\t *\n\t * The `HubModalRef.result` promise will be rejected with the provided value.\n\t */\n\tdismiss(reason?: any): void {}\n}\n\nconst WINDOW_ATTRIBUTES: string[] = [\n\t'animation',\n\t'ariaLabelledBy',\n\t'ariaDescribedBy',\n\t'closeAriaLabel',\n\t'closeButton',\n\t'backdrop',\n\t'centered',\n\t'placement',\n\t'offcanvas',\n\t'fullscreen',\n\t'keyboard',\n\t'scrollable',\n\t'size',\n\t'variant',\n\t'windowClass',\n\t'modalDialogClass'\n];\nconst BACKDROP_ATTRIBUTES: string[] = ['animation', 'backdropClass'];\n\n/**\n * A reference to the newly opened modal returned by the `HubModal.open()` method.\n */\nexport class HubModalRef<C = any, R = any> {\n\tprivate _closed = new Subject<R>();\n\tprivate _dismissed = new Subject<any>();\n\tprivate _hidden = new Subject<void>();\n\tprivate _resolve!: (result: R | PromiseLike<R>) => void;\n\tprivate _reject!: (reason?: any) => void;\n\n\tprivate _applyWindowOptions(windowComponentRef: ComponentRef<HubModalWindow>, options: HubModalOptions): void {\n\t\tWINDOW_ATTRIBUTES.forEach((optionName: string) => {\n\t\t\tconst opts: any = options as any;\n\t\t\tif (isDefined(opts[optionName])) {\n\t\t\t\twindowComponentRef.setInput(optionName, opts[optionName]);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _applyBackdropOptions(backdropComponentRef: ComponentRef<HubModalBackdrop>, options: HubModalOptions): void {\n\t\tBACKDROP_ATTRIBUTES.forEach((optionName: string) => {\n\t\t\tconst opts: any = options as any;\n\t\t\tif (isDefined(opts[optionName])) {\n\t\t\t\tbackdropComponentRef.setInput(optionName, opts[optionName]);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Updates options of an opened modal.\n\t *\n\t * @since 14.2.0\n\t */\n\tupdate(options: HubModalUpdatableOptions): void {\n\t\tthis._applyWindowOptions(this._windowCmptRef, options);\n\t\tif (this._backdropCmptRef && this._backdropCmptRef.instance) {\n\t\t\tthis._applyBackdropOptions(this._backdropCmptRef, options);\n\t\t}\n\t}\n\n\t/**\n\t * The instance of a component used for the modal content.\n\t *\n\t * When a `TemplateRef` is used as the content or when the modal is closed, will return `undefined`.\n\t */\n\tget componentInstance(): C | void {\n\t\tif (this._contentRef && this._contentRef.componentRef) {\n\t\t\treturn this._contentRef.componentRef.instance;\n\t\t}\n\t}\n\n\t/**\n\t * The promise that is resolved when the modal is closed and rejected when the modal is dismissed.\n\t */\n\tresult: Promise<R>;\n\n\t/**\n\t * The observable that emits when the modal is closed via the `.close()` method.\n\t *\n\t * It will emit the result passed to the `.close()` method.\n\t *\n\t * @since 8.0.0\n\t */\n\tget closed(): Observable<R> {\n\t\treturn this._closed.asObservable().pipe(takeUntil(this._hidden));\n\t}\n\n\t/**\n\t * The observable that emits when the modal is dismissed via the `.dismiss()` method.\n\t *\n\t * It will emit the reason passed to the `.dismissed()` method by the user, or one of the internal\n\t * reasons like backdrop click or ESC key press.\n\t *\n\t * @since 8.0.0\n\t */\n\tget dismissed(): Observable<any> {\n\t\treturn this._dismissed.asObservable().pipe(takeUntil(this._hidden));\n\t}\n\n\t/**\n\t * The observable that emits when both modal window and backdrop are closed and animations were finished.\n\t * At this point modal and backdrop elements will be removed from the DOM tree.\n\t *\n\t * This observable will be completed after emitting.\n\t *\n\t * @since 8.0.0\n\t */\n\tget hidden(): Observable<void> {\n\t\treturn this._hidden.asObservable();\n\t}\n\n\t/**\n\t * The observable that emits when modal is fully visible and animation was finished.\n\t * Modal DOM element is always available synchronously after calling 'modal.open()' service.\n\t *\n\t * This observable will be completed after emitting.\n\t * It will not emit, if modal is closed before open animation is finished.\n\t *\n\t * @since 8.0.0\n\t */\n\tget shown(): Observable<void> {\n\t\treturn this._windowCmptRef.instance.shown.asObservable();\n\t}\n\n\tconstructor(\n\t\tprivate _windowCmptRef: ComponentRef<HubModalWindow>,\n\t\tprivate _contentRef: ContentRef,\n\t\tprivate _backdropCmptRef?: ComponentRef<HubModalBackdrop>,\n\t\tprivate _beforeDismiss?: () => boolean | Promise<boolean>\n\t) {\n\t\t_windowCmptRef.instance.dismissEvent.subscribe((reason: any) => {\n\t\t\tthis.dismiss(reason);\n\t\t});\n\n\t\tthis.result = new Promise((resolve, reject) => {\n\t\t\tthis._resolve = resolve;\n\t\t\tthis._reject = reject;\n\t\t});\n\t\tthis.result.then(null, () => {});\n\t}\n\n\t/**\n\t * Closes the modal with an optional `result` value.\n\t *\n\t * The `HubMobalRef.result` promise will be resolved with the provided value.\n\t */\n\tclose(result?: R): void {\n\t\tif (this._windowCmptRef) {\n\t\t\t// `close()` without a value legitimately emits `undefined` through the\n\t\t\t// `R`-typed stream, mirroring the optional `result` parameter.\n\t\t\tthis._closed.next(result as R);\n\t\t\tthis._resolve(result as R);\n\t\t\tthis._removeModalElements();\n\t\t}\n\t}\n\n\tprivate _dismiss(reason?: any) {\n\t\tthis._dismissed.next(reason);\n\t\tthis._reject(reason);\n\t\tthis._removeModalElements();\n\t}\n\n\t/**\n\t * Dismisses the modal with an optional `reason` value.\n\t *\n\t * The `HubModalRef.result` promise will be rejected with the provided value.\n\t */\n\tdismiss(reason?: any): void {\n\t\tif (this._windowCmptRef) {\n\t\t\tif (!this._beforeDismiss) {\n\t\t\t\tthis._dismiss(reason);\n\t\t\t} else {\n\t\t\t\tconst dismiss = this._beforeDismiss();\n\t\t\t\tif (isPromise(dismiss as any)) {\n\t\t\t\t\t(dismiss as Promise<boolean>).then(\n\t\t\t\t\t\t(result) => {\n\t\t\t\t\t\t\tif (result !== false) {\n\t\t\t\t\t\t\t\tthis._dismiss(reason);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => {}\n\t\t\t\t\t);\n\t\t\t\t} else if (dismiss !== false) {\n\t\t\t\t\tthis._dismiss(reason);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _removeModalElements() {\n\t\tconst windowTransition$ = this._windowCmptRef.instance.hide();\n\t\tconst backdropTransition$ = this._backdropCmptRef ? this._backdropCmptRef.instance.hide() : of(undefined);\n\n\t\t// hiding window\n\t\twindowTransition$.subscribe(() => {\n\t\t\tconst { nativeElement } = this._windowCmptRef.location;\n\t\t\tnativeElement.parentNode?.removeChild(nativeElement);\n\t\t\tthis._windowCmptRef.destroy();\n\t\t\tthis._contentRef?.viewRef?.destroy();\n\n\t\t\tthis._windowCmptRef = <any>null;\n\t\t\tthis._contentRef = <any>null;\n\t\t});\n\n\t\t// hiding backdrop\n\t\tbackdropTransition$.subscribe(() => {\n\t\t\tif (this._backdropCmptRef) {\n\t\t\t\tconst { nativeElement } = this._backdropCmptRef.location;\n\t\t\t\tnativeElement.parentNode?.removeChild(nativeElement);\n\t\t\t\tthis._backdropCmptRef.destroy();\n\t\t\t\tthis._backdropCmptRef = <any>null;\n\t\t\t}\n\t\t});\n\n\t\t// all done\n\t\tzip(windowTransition$, backdropTransition$).subscribe(() => {\n\t\t\tthis._hidden.next();\n\t\t\tthis._hidden.complete();\n\t\t});\n\t}\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n\tafterNextRender,\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tinject,\n\tInjector,\n\tinput,\n\tNgZone,\n\tOnDestroy,\n\tOnInit,\n\toutput,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { getFocusableBoundaryElements, hubRunTransition, isString, reflow, TransitionOptions } from 'ng-hub-ui-utils';\nimport { fromEvent, Observable, Subject, zip } from 'rxjs';\nimport { filter, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { ModalDismissReasons } from './modal-dismiss-reasons';\nimport { HubModalPlacement } from './modal-placement';\n\n/**\n * The internal component representing the modal window.\n * It renders the modal dialog structure, handles ARIA attributes, encapsulates the projected content,\n * and manages interactions like keyboard dismissals and backdrop clicks.\n */\n@Component({\n\tselector: 'hub-modal-window',\n\timports: [],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\t'[class]':\n\t\t\t'\"hub-modal\" + hostPlacementClass + (variant() ? \" hub-modal--\" + variant() : \"\") + (windowClass() ? \" \" + windowClass() : \"\")',\n\t\t'[class.fade]': 'animation()',\n\t\trole: 'dialog',\n\t\ttabindex: '-1',\n\t\t'[attr.aria-modal]': 'true',\n\t\t'[attr.aria-labelledby]': 'ariaLabelledBy()',\n\t\t'[attr.aria-describedby]': 'ariaDescribedBy()'\n\t},\n\ttemplate: `\n\t\t<div\n\t\t\t#dialog\n\t\t\t[class]=\"\n\t\t\t\t'hub-modal__dialog' +\n\t\t\t\t(size() ? ' hub-modal__dialog--' + size() : '') +\n\t\t\t\tplacementClass +\n\t\t\t\tcenteredClass +\n\t\t\t\tfullscreenClass +\n\t\t\t\t(scrollable() ? ' hub-modal__dialog--scrollable' : '') +\n\t\t\t\t(modalDialogClass() ? ' ' + modalDialogClass() : '')\n\t\t\t\"\n\t\t\trole=\"document\"\n\t\t>\n\t\t\t<div #content class=\"hub-modal__content\">\n\t\t\t\t@if (singleContent) {\n\t\t\t\t\t<div #bodyContainer class=\"hub-modal__body\"></div>\n\t\t\t\t} @else {\n\t\t\t\t\t<div class=\"hub-modal__header\">\n\t\t\t\t\t\t<div #headingContainer class=\"hub-modal__heading\"></div>\n\t\t\t\t\t\t@if (closeButton()) {\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t#closeButton\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"hub-modal__close\"\n\t\t\t\t\t\t\t\t[attr.aria-label]=\"closeAriaLabel()\"\n\t\t\t\t\t\t\t\t(click)=\"dismiss(null)\"\n\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div #bodyContainer class=\"hub-modal__body\"></div>\n\t\t\t\t\t<div #footerContainer class=\"hub-modal__footer\"></div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t`,\n\t// Reason 1 of CODING_RULES: most of this stylesheet dresses elements that are not in this\n\t// component's view and can never carry its marker attribute — `body.hub-modal-open`, the\n\t// `:root` block the backdrop reads, and `.hub-modal__backdrop`, which is a sibling component\n\t// created on the container element rather than a descendant of the window. Every selector it\n\t// emits stays under the library's own `hub-modal` prefix.\n\tencapsulation: ViewEncapsulation.None,\n\tstyleUrl: './modal.scss'\n})\nexport class HubModalWindow implements OnInit, OnDestroy {\n\tprivate _document = inject(DOCUMENT);\n\tprivate _elRef = inject(ElementRef<HTMLElement>);\n\tprivate _zone = inject(NgZone);\n\tprivate _injector = inject(Injector);\n\n\tprivate _closed$ = new Subject<void>();\n\tprivate _elWithFocus: Element | null = null; // element that is focused prior to modal opening\n\n\tprivate readonly _dialogEl = viewChild.required<ElementRef<HTMLElement>>('dialog');\n\tprivate readonly _headingContainerEl = viewChild<ElementRef<HTMLElement>>('headingContainer');\n\tprivate readonly _bodyContainerEl = viewChild<ElementRef<HTMLElement>>('bodyContainer');\n\tprivate readonly _footerContainerEl = viewChild<ElementRef<HTMLElement>>('footerContainer');\n\tprivate readonly _closeButtonEl = viewChild<ElementRef<HTMLButtonElement>>('closeButton');\n\tprivate readonly _contentEl = viewChild<ElementRef<HTMLElement>>('content');\n\n\t/**\n\t * Determines whether the modal window should animate its entry and exit.\n\t */\n\treadonly animation = input<boolean>(true);\n\n\t/** Watches the content box so a change in its height can be animated rather than jumped. */\n\tprivate _resizeObserver: ResizeObserver | null = null;\n\tprivate _lastHeight: number | null = null;\n\tprivate _resizeAnimation: Animation | null = null;\n\n\t/**\n\t * Identifier to apply to the `aria-labelledby` attribute of the modal.\n\t */\n\treadonly ariaLabelledBy = input<string>();\n\n\t/**\n\t * Identifier to apply to the `aria-describedby` attribute of the modal.\n\t */\n\treadonly ariaDescribedBy = input<string>();\n\n\t/**\n\t * Accessible name of the dismiss button drawn in the built-in header.\n\t *\n\t * The glyph is painted by CSS, so the button has no text node and this attribute is\n\t * the only name assistive technology can read.\n\t */\n\treadonly closeAriaLabel = input<string>('Close');\n\n\t/**\n\t * Whether the built-in header draws its dismiss button.\n\t *\n\t * `false` leaves it out of the DOM rather than hiding it, which is the whole point: a\n\t * button hidden with CSS is still announced by a screen reader and still reached by the\n\t * tab order, so the dialog would keep offering a way out it does not have.\n\t */\n\treadonly closeButton = input<boolean>(true);\n\n\t/**\n\t * Configures the presence and behavior of the modal backdrop (`true`, `false`, or `'static'`).\n\t */\n\treadonly backdrop = input<boolean | string>(true);\n\n\t/**\n\t * If `true`, the modal dialog will be centered vertically.\n\t */\n\treadonly centered = input<boolean>();\n\n\t/**\n\t * Specifies the modal placement inside the viewport.\n\t */\n\treadonly placement = input<HubModalPlacement>(HubModalPlacement.Center);\n\n\t/**\n\t * Opens the dialog as a drawer against the edge named by {@link placement}.\n\t */\n\treadonly offcanvas = input<boolean>(false);\n\n\t/**\n\t * Enables fullscreen mode for the modal, either always (`true`) or below specific breakpoints.\n\t */\n\treadonly fullscreen = input<string | boolean>();\n\n\t/**\n\t * If `true`, pressing the ESC key will close the modal.\n\t */\n\treadonly keyboard = input(true);\n\n\t/**\n\t * If `true`, the modal content will be scrollable when it exceeds the viewport height.\n\t */\n\treadonly scrollable = input<boolean>();\n\n\t/**\n\t * Specifies the size of the modal (`'sm'`, `'lg'`, `'xl'`, etc.).\n\t */\n\treadonly size = input<string>();\n\n\t/**\n\t * Semantic accent of the modal (`'primary'`, `'success'`, `'danger'`,\n\t * `'warning'`, `'info'`, or any custom token name). Applies the\n\t * `hub-modal--<variant>` class, which tints the dialog surface, its borders\n\t * and its title with that accent.\n\t */\n\treadonly variant = input<string>();\n\n\t/**\n\t * A custom CSS class to append to the modal window wrapper.\n\t */\n\treadonly windowClass = input<string>();\n\n\t/**\n\t * A custom CSS class to append to the inner modal dialog element.\n\t */\n\treadonly modalDialogClass = input<string>();\n\n\tsingleContent!: boolean;\n\n\t/**\n\t * Emits when the user dismisses the modal (e.g. via ESC, backdrop click, or custom close buttons).\n\t */\n\treadonly dismissEvent = output({ alias: 'dismiss' });\n\n\t/**\n\t * Emits and completes once the modal window is fully visible and its transition has ended.\n\t */\n\tshown = new Subject<void>();\n\n\t/**\n\t * Emits and completes once the modal is fully hidden and its DOM elements are ready to be destroyed.\n\t */\n\thidden = new Subject<void>();\n\n\t/**\n\t * Computes the CSS class for fullscreen behavior based on the `fullscreen` input.\n\t */\n\tget fullscreenClass(): string {\n\t\tconst fullscreen = this.fullscreen();\n\t\treturn fullscreen === true\n\t\t\t? ' hub-modal__dialog--fullscreen'\n\t\t\t: isString(fullscreen)\n\t\t\t\t? ` hub-modal__dialog--fullscreen-${fullscreen}-down`\n\t\t\t\t: '';\n\t}\n\n\t/**\n\t * Computes the CSS class corresponding to the requested modal placement.\n\t */\n\tget placementClass(): string {\n\t\tconst placement = this.effectivePlacement;\n\t\treturn placement && placement !== HubModalPlacement.Center ? ` hub-modal__dialog--placement-${placement}` : '';\n\t}\n\n\t/**\n\t * The placement the dialog is actually anchored to.\n\t *\n\t * A drawer with no edge is not a drawer, so asking for `offcanvas` without a placement\n\t * resolves to the end edge rather than leaving the mode inert against a centred dialog.\n\t * That is what makes opening one a single decision.\n\t */\n\tget effectivePlacement(): HubModalPlacement {\n\t\tconst placement = this.placement();\n\n\t\tif (this.offcanvas() && (!placement || placement === HubModalPlacement.Center)) {\n\t\t\treturn HubModalPlacement.End;\n\t\t}\n\n\t\treturn placement;\n\t}\n\n\t/**\n\t * Computes the CSS class applied to the modal host to control viewport anchoring.\n\t */\n\tget hostPlacementClass(): string {\n\t\tconst placement = this.effectivePlacement;\n\t\tconst placementClass = placement && placement !== HubModalPlacement.Center ? ` hub-modal--placement-${placement}` : '';\n\n\t\treturn this.offcanvas() ? `${placementClass} hub-modal--offcanvas` : placementClass;\n\t}\n\n\t/**\n\t * Computes the CSS class used to center the modal on the secondary axis, depending on its placement.\n\t */\n\tget centeredClass(): string {\n\t\tif (!this.centered()) {\n\t\t\treturn '';\n\t\t}\n\n\t\tswitch (this.placement()) {\n\t\t\tcase HubModalPlacement.Start:\n\t\t\tcase HubModalPlacement.End:\n\t\t\t\treturn ' hub-modal__dialog--centered-vertical';\n\t\t\tcase HubModalPlacement.Top:\n\t\t\tcase HubModalPlacement.Bottom:\n\t\t\t\treturn '';\n\t\t\tcase HubModalPlacement.Center:\n\t\t\tdefault:\n\t\t\t\treturn ' hub-modal__dialog--centered';\n\t\t}\n\t}\n\n\t/**\n\t * Dismisses the modal by emitting the `dismissEvent` with the provided reason.\n\t *\n\t * @param reason The reason the modal was dismissed (e.g. 'ESC', 'BACKDROP_CLICK', or custom data).\n\t */\n\tdismiss(reason: any): void {\n\t\tthis.dismissEvent.emit(reason);\n\t}\n\n\t/**\n\t * Attaches the projected content nodes into their respective structural containers\n\t * (header, body, and footer) within the modal dialog.\n\t *\n\t * Header nodes go into the heading container, which sits inside the header next to the\n\t * close button. The heading's direction, gap and alignment therefore apply to them alone,\n\t * and the button stays the header's last child whatever the caller projects.\n\t *\n\t * @param contentNodes A nested array containing nodes segmented into header, body, and footer parts.\n\t */\n\tattachContent([headerNodes, bodyNodes, footerNodes]: Node[][]): void {\n\t\tconst bodyContainer = this._bodyContainerEl()?.nativeElement;\n\t\tif (!bodyContainer) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.singleContent) {\n\t\t\tthis._appendNodes(bodyContainer, bodyNodes);\n\t\t\treturn;\n\t\t}\n\n\t\tconst headingContainer = this._headingContainerEl()?.nativeElement;\n\t\tconst footerContainer = this._footerContainerEl()?.nativeElement;\n\n\t\tif (headingContainer) {\n\t\t\tthis._appendNodes(headingContainer, headerNodes);\n\t\t}\n\t\tthis._appendNodes(bodyContainer, bodyNodes);\n\t\tif (footerContainer) {\n\t\t\tthis._appendNodes(footerContainer, footerNodes);\n\t\t}\n\t}\n\n\tngOnInit() {\n\t\tthis._elWithFocus = this._document.activeElement;\n\t\t// Defer until the window's own DOM is laid out, then run the entry transition and\n\t\t// arm the Escape / backdrop-click handlers.\n\t\t//\n\t\t// This used to wait on `NgZone.onStable`. Under `provideZonelessChangeDetection`\n\t\t// the injected zone is a `NoopNgZone` whose `onStable` never emits, so `_show()`\n\t\t// never ran: the window never got its `show` class and — far worse — never called\n\t\t// `_enableEventHandling()`, leaving every modal in a zoneless app unclosable by\n\t\t// Escape or by clicking the backdrop. `afterNextRender` is the zone-agnostic hook\n\t\t// for \"the DOM exists now\", and fires in both modes.\n\t\tafterNextRender(\n\t\t\t() => {\n\t\t\t\tthis._show();\n\t\t\t\tthis._observeResize();\n\t\t\t},\n\t\t\t{ injector: this._injector }\n\t\t);\n\t}\n\n\tngOnDestroy() {\n\t\tthis._disableEventHandling();\n\t\tthis._resizeObserver?.disconnect();\n\t\tthis._resizeObserver = null;\n\t\tthis._resizeAnimation?.cancel();\n\t}\n\n\t/**\n\t * Animates the dialog between heights instead of letting it jump.\n\t *\n\t * A modal is sized by whatever it holds, so its height is `auto` before a change and `auto`\n\t * after it. CSS transitions never fire on that — the specified value did not change, only the\n\t * content did — and `interpolate-size` does not help for the same reason: it interpolates\n\t * *to* a keyword, it does not notice a box growing underneath one. So the two heights are\n\t * measured and animated explicitly, which also keeps the behaviour identical in every\n\t * browser rather than only where `interpolate-size` has shipped.\n\t */\n\tprivate _observeResize(): void {\n\t\tconst content = this._contentEl()?.nativeElement;\n\n\t\tif (!content || typeof ResizeObserver === 'undefined') {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._resizeObserver = new ResizeObserver(() => {\n\t\t\t// While our own animation drives the box, every one of its frames comes back through\n\t\t\t// here. Reacting would cancel and restart it on each frame, which reads as a stutter\n\t\t\t// rather than a movement.\n\t\t\tif (this._resizeAnimation) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst next = content.getBoundingClientRect().height;\n\t\t\tconst previous = this._lastHeight;\n\t\t\tthis._lastHeight = next;\n\n\t\t\t// The first callback is the modal arriving, which the entry transition already owns.\n\t\t\tif (previous === null || Math.abs(next - previous) < 1 || !this._shouldAnimateResize()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._animateHeight(content, previous, next);\n\t\t});\n\n\t\tthis._resizeObserver.observe(content);\n\t}\n\n\t/** Honours both the modal's own opt-out and the reader's. */\n\tprivate _shouldAnimateResize(): boolean {\n\t\treturn this.animation() && !this._document.defaultView?.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\t}\n\n\t/**\n\t * @param content - The box being resized.\n\t * @param from - Height it is leaving, in pixels.\n\t * @param to - Height it has already reached, in pixels.\n\t */\n\tprivate _animateHeight(content: HTMLElement, from: number, to: number): void {\n\t\tconst styles = getComputedStyle(content);\n\t\tconst duration = parseFloat(styles.getPropertyValue('--hub-modal-resize-duration')) || 200;\n\t\tconst easing = styles.getPropertyValue('--hub-modal-resize-easing').trim() || 'ease-in-out';\n\n\t\tcontent.style.overflow = 'hidden';\n\n\t\tconst animation = content.animate([{ height: `${from}px` }, { height: `${to}px` }], { duration, easing });\n\t\tthis._resizeAnimation = animation;\n\n\t\tconst settle = () => {\n\t\t\tcontent.style.overflow = '';\n\n\t\t\tif (this._resizeAnimation !== animation) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._resizeAnimation = null;\n\t\t\t// The content may have moved again while this ran, so record where it truly ended:\n\t\t\t// the next change has to measure from the real height, not the one we aimed at.\n\t\t\tthis._lastHeight = content.getBoundingClientRect().height;\n\t\t};\n\n\t\tanimation.finished.then(settle).catch(settle);\n\t}\n\n\t/**\n\t * Determines the focus element, blocks further interactions, configures the exit transition context,\n\t * removes 'show' CSS classes from the modal, and restores focus back to the previously focused element.\n\t *\n\t * @returns An observable that emits when the exit transition completely finishes.\n\t */\n\thide(): Observable<any> {\n\t\tconst { nativeElement } = this._elRef;\n\t\tconst context: TransitionOptions<any> = {\n\t\t\tanimation: this.animation(),\n\t\t\trunningTransition: 'stop'\n\t\t};\n\n\t\tconst windowTransition$ = hubRunTransition(\n\t\t\tthis._zone,\n\t\t\tnativeElement,\n\t\t\t() => nativeElement.classList.remove('show'),\n\t\t\tcontext\n\t\t);\n\t\tconst dialogTransition$ = hubRunTransition(this._zone, this._dialogEl().nativeElement, () => {}, context);\n\n\t\tconst transitions$ = zip(windowTransition$, dialogTransition$);\n\t\ttransitions$.subscribe(() => {\n\t\t\tthis.hidden.next();\n\t\t\tthis.hidden.complete();\n\t\t});\n\n\t\tthis._disableEventHandling();\n\t\tthis._restoreFocus();\n\n\t\treturn transitions$;\n\t}\n\n\tprivate _show() {\n\t\tconst context: TransitionOptions<any> = {\n\t\t\tanimation: this.animation(),\n\t\t\trunningTransition: 'continue'\n\t\t};\n\n\t\tconst windowTransition$ = hubRunTransition(\n\t\t\tthis._zone,\n\t\t\tthis._elRef.nativeElement,\n\t\t\t(element: HTMLElement, animation: boolean) => {\n\t\t\t\tif (animation) {\n\t\t\t\t\treflow(element);\n\t\t\t\t}\n\t\t\t\telement.classList.add('show');\n\t\t\t},\n\t\t\tcontext\n\t\t);\n\t\tconst dialogTransition$ = hubRunTransition(this._zone, this._dialogEl().nativeElement, () => {}, context);\n\n\t\tzip(windowTransition$, dialogTransition$).subscribe(() => {\n\t\t\tthis.shown.next();\n\t\t\tthis.shown.complete();\n\t\t});\n\n\t\tthis._enableEventHandling();\n\t\tthis._setFocus();\n\t}\n\n\tprivate _enableEventHandling() {\n\t\tconst { nativeElement } = this._elRef;\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tfromEvent<KeyboardEvent>(nativeElement, 'keydown')\n\t\t\t\t.pipe(\n\t\t\t\t\ttakeUntil(this._closed$),\n\t\t\t\t\tfilter((e) => e.key === 'Escape')\n\t\t\t\t)\n\t\t\t\t.subscribe((event) => {\n\t\t\t\t\tif (this.keyboard()) {\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\tif (!event.defaultPrevented) {\n\t\t\t\t\t\t\t\tthis._zone.run(() => this.dismiss(ModalDismissReasons.ESC));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (this.backdrop() === 'static') {\n\t\t\t\t\t\tthis._bumpBackdrop();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t// We're listening to 'mousedown' and 'mouseup' to prevent modal from closing when pressing the mouse\n\t\t\t// inside the modal dialog and releasing it outside\n\t\t\tlet preventClose = false;\n\t\t\tfromEvent<MouseEvent>(this._dialogEl().nativeElement, 'mousedown')\n\t\t\t\t.pipe(\n\t\t\t\t\ttakeUntil(this._closed$),\n\t\t\t\t\ttap(() => (preventClose = false)),\n\t\t\t\t\tswitchMap(() => fromEvent<MouseEvent>(nativeElement, 'mouseup').pipe(takeUntil(this._closed$), take(1))),\n\t\t\t\t\tfilter(({ target }) => nativeElement === target)\n\t\t\t\t)\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tpreventClose = true;\n\t\t\t\t});\n\n\t\t\t// We're listening to 'click' to dismiss modal on modal window click, except when:\n\t\t\t// 1. clicking on modal dialog itself\n\t\t\t// 2. closing was prevented by mousedown/up handlers\n\t\t\t// 3. clicking on scrollbar when the viewport is too small and modal doesn't fit (click is not triggered at all)\n\t\t\tfromEvent<MouseEvent>(nativeElement, 'click')\n\t\t\t\t.pipe(takeUntil(this._closed$))\n\t\t\t\t.subscribe(({ target }) => {\n\t\t\t\t\tif (nativeElement === target) {\n\t\t\t\t\t\tconst backdrop = this.backdrop();\n\t\t\t\t\t\tif (backdrop === 'static') {\n\t\t\t\t\t\t\tthis._bumpBackdrop();\n\t\t\t\t\t\t} else if (backdrop === true && !preventClose) {\n\t\t\t\t\t\t\tthis._zone.run(() => this.dismiss(ModalDismissReasons.BACKDROP_CLICK));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tpreventClose = false;\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate _disableEventHandling() {\n\t\tthis._closed$.next();\n\t}\n\n\tprivate _setFocus() {\n\t\tconst { nativeElement } = this._elRef;\n\t\tif (!nativeElement.contains(document.activeElement)) {\n\t\t\tconst autoFocusable = nativeElement.querySelector(`[hubAutofocus]`) as HTMLElement;\n\n\t\t\t// The dialog's own dismiss button is skipped when choosing where focus\n\t\t\t// lands. It is the first focusable element in the DOM, so it used to take\n\t\t\t// the focus on every open: a destructive confirm opened with the caret on\n\t\t\t// «cancel this dialog» rather than on what it asks, and the browser drew its\n\t\t\t// default focus ring over the header. Whoever wants it focused can still say\n\t\t\t// so with `hubAutofocus`, and a dialog whose only focusable element is the\n\t\t\t// close button falls through to the dialog itself, which carries\n\t\t\t// `tabindex=\"-1\"` for exactly this.\n\t\t\tconst closeButton = this._closeButtonEl()?.nativeElement ?? null;\n\t\t\tconst firstFocusable = getFocusableBoundaryElements(nativeElement).find((element) => element !== closeButton);\n\n\t\t\tconst elementToFocus = autoFocusable || firstFocusable || nativeElement;\n\t\t\telementToFocus.focus();\n\t\t}\n\t}\n\n\tprivate _restoreFocus() {\n\t\tconst body = this._document.body;\n\t\tconst elWithFocus = this._elWithFocus;\n\n\t\tlet elementToFocus: HTMLElement;\n\t\tif (elWithFocus instanceof HTMLElement && body.contains(elWithFocus)) {\n\t\t\telementToFocus = elWithFocus;\n\t\t} else {\n\t\t\telementToFocus = body as unknown as HTMLElement;\n\t\t}\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tsetTimeout(() => elementToFocus.focus());\n\t\t\tthis._elWithFocus = null;\n\t\t});\n\t}\n\n\tprivate _bumpBackdrop() {\n\t\tif (this.backdrop() === 'static') {\n\t\t\thubRunTransition(\n\t\t\t\tthis._zone,\n\t\t\t\tthis._elRef.nativeElement,\n\t\t\t\t({ classList }) => {\n\t\t\t\t\tclassList.add('hub-modal--static');\n\t\t\t\t\treturn () => classList.remove('hub-modal--static');\n\t\t\t\t},\n\t\t\t\t{ animation: this.animation(), runningTransition: 'continue' }\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Moves each node, in order, to the end of a slot container. `appendChild` takes a node out\n\t * of wherever it is, so the caller's content leaves its original host as it lands here.\n\t *\n\t * @param container The slot element receiving the nodes.\n\t * @param nodes The nodes collected for that slot.\n\t */\n\tprivate _appendNodes(container: HTMLElement, nodes: Node[]): void {\n\t\tnodes.forEach((node) => container.appendChild(node));\n\t}\n}\n","import { DOCUMENT, Location } from '@angular/common';\nimport {\n\tApplicationRef,\n\tComponentRef,\n\tcreateComponent,\n\tDestroyRef,\n\tEnvironmentInjector,\n\tEventEmitter,\n\tinject,\n\tInjectable,\n\tInjector,\n\tNgZone,\n\tTemplateRef,\n\tType\n} from '@angular/core';\nimport { ContentRef, hubFocusTrap, isDefined, isString, ScrollBar } from 'ng-hub-ui-utils';\nimport { Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { HubModalBackdrop } from './modal-backdrop';\nimport { HubModalOptions, HubModalUpdatableOptions } from './modal-config';\nimport { ModalDismissReasons } from './modal-dismiss-reasons';\nimport { HUB_MODAL_DATA, HubActiveModal, HubModalRef } from './modal-ref';\nimport { HubModalWindow } from './modal-window';\n\n/**\n * The URL without its fragment, which is what decides whether the screen changed.\n *\n * An anchor moves the reader inside the screen the dialog belongs to; it does not replace it. A\n * sidebar that writes the anchor of the section on screen as the reader scrolls is ordinary, and\n * without this it would close every dialog a moment after it opened.\n */\nfunction withoutFragment(url: string): string {\n\tconst fragment = url.indexOf('#');\n\treturn fragment === -1 ? url : url.slice(0, fragment);\n}\n\n/**\n * A service that manages the stack of currently active modal windows.\n * It is responsible for creating, attaching, and orchestrating the rendering\n * of the modal dialogue, its backdrop, and its content.\n */\n@Injectable({ providedIn: 'root' })\nexport class HubModalStack {\n\tprivate _applicationRef = inject(ApplicationRef);\n\tprivate _injector = inject(Injector);\n\tprivate _environmentInjector = inject(EnvironmentInjector);\n\tprivate _document = inject(DOCUMENT);\n\tprivate _scrollBar = inject(ScrollBar);\n\n\t// Optional: the library has to work in an application with no router, where `Location`\n\t// has no strategy to read from and is not provided at all.\n\tprivate _location = inject(Location, { optional: true });\n\tprivate _destroyRef = inject(DestroyRef);\n\n\tprivate _activeWindowCmptHasChanged = new Subject<void>();\n\tprivate _ariaHiddenValues: Map<Element, string | null> = new Map();\n\tprivate _scrollBarRestoreFn: null | (() => void) = null;\n\t/** How far a dialog and its backdrop are lifted over the level below: one each. */\n\tprivate static readonly ZINDEX_STEP = 2;\n\n\tprivate _modalRefs: HubModalRef[] = [];\n\tprivate _closeOnNavigation = new WeakSet<HubModalRef>();\n\tprivate _watchingUrl = false;\n\tprivate _windowCmpts: ComponentRef<HubModalWindow>[] = [];\n\tprivate _activeInstances: EventEmitter<HubModalRef[]> = new EventEmitter();\n\n\tconstructor() {\n\t\tconst ngZone = inject(NgZone);\n\n\t\t// Trap focus on active WindowCmpt\n\t\tthis._activeWindowCmptHasChanged.subscribe(() => {\n\t\t\tif (this._windowCmpts.length) {\n\t\t\t\tconst activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1];\n\t\t\t\thubFocusTrap(ngZone, activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged);\n\t\t\t\tthis._revertAriaHidden();\n\t\t\t\tthis._setAriaHidden(activeWindowCmpt.location.nativeElement);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _restoreScrollBar() {\n\t\tconst scrollBarRestoreFn = this._scrollBarRestoreFn;\n\t\tif (scrollBarRestoreFn) {\n\t\t\tthis._scrollBarRestoreFn = null;\n\t\t\tscrollBarRestoreFn();\n\t\t}\n\t}\n\n\tprivate _hideScrollBar() {\n\t\tif (!this._scrollBarRestoreFn) {\n\t\t\tthis._scrollBarRestoreFn = this._scrollBar.hide();\n\t\t}\n\t}\n\n\t/**\n\t * Opens a new modal window configured with the provided options.\n\t *\n\t * @param contentInjector The dependency injector to be used for the modal content component.\n\t * @param content The content to display inside the modal. Can be a component class, a template reference, or a string.\n\t * @param options Configuration options that dictate how the modal is rendered and behaves.\n\t * @returns An instance of `HubModalRef` which can be used to control the modal or subscribe to its events.\n\t * @throws Error if the specified container element is not found in the DOM.\n\t */\n\topen(contentInjector: Injector, content: any, options: HubModalOptions): HubModalRef {\n\t\tconst containerEl =\n\t\t\toptions.container instanceof HTMLElement\n\t\t\t\t? options.container\n\t\t\t\t: isDefined(options.container)\n\t\t\t\t\t? this._document.querySelector(options.container!)\n\t\t\t\t\t: this._document.body;\n\n\t\tif (!containerEl) {\n\t\t\tthrow new Error(`The specified modal container \"${options.container || 'body'}\" was not found in the DOM.`);\n\t\t}\n\n\t\tthis._hideScrollBar();\n\n\t\tconst activeModal = new HubActiveModal(options.data ?? null);\n\n\t\tcontentInjector = options.injector || contentInjector;\n\t\tconst environmentInjector = contentInjector.get(EnvironmentInjector, null) || this._environmentInjector;\n\t\tconst contentRef = this._getContentRef(contentInjector, environmentInjector, content, activeModal, options);\n\n\t\t// Read before the new reference joins them: it is how many dialogs this one opens over.\n\t\tconst level = this._modalRefs.length;\n\n\t\tconst backdropCmptRef: ComponentRef<HubModalBackdrop> | undefined =\n\t\t\toptions.backdrop !== false ? this._attachBackdrop(containerEl) : undefined;\n\t\tconst windowCmptRef: ComponentRef<HubModalWindow> = this._attachWindowComponent(containerEl, contentRef.nodes, options);\n\n\t\tthis._stack(level, windowCmptRef.location.nativeElement, backdropCmptRef?.location.nativeElement);\n\t\tconst hubModalRef: HubModalRef = new HubModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);\n\n\t\tthis._registerModalRef(hubModalRef);\n\t\tthis._registerWindowCmpt(windowCmptRef);\n\n\t\tif (options.closeOnNavigation !== false) {\n\t\t\tthis._closeOnNavigation.add(hubModalRef);\n\t\t\tthis._watchUrlChanges();\n\t\t}\n\n\t\t// We have to cleanup DOM after the last modal when BOTH 'hidden' was emitted and 'result' promise was resolved:\n\t\t// - with animations OFF, 'hidden' emits synchronously, then 'result' is resolved asynchronously\n\t\t// - with animations ON, 'result' is resolved asynchronously, then 'hidden' emits asynchronously\n\t\thubModalRef.hidden.pipe(take(1)).subscribe(() =>\n\t\t\tPromise.resolve(true).then(() => {\n\t\t\t\tif (!this._modalRefs.length) {\n\t\t\t\t\tthis._document.body.classList.remove('hub-modal-open');\n\t\t\t\t\tthis._restoreScrollBar();\n\t\t\t\t\tthis._revertAriaHidden();\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tactiveModal.close = (result: any) => {\n\t\t\thubModalRef.close(result);\n\t\t};\n\t\tactiveModal.dismiss = (reason: any) => {\n\t\t\thubModalRef.dismiss(reason);\n\t\t};\n\n\t\tactiveModal.update = (options: HubModalUpdatableOptions) => {\n\t\t\thubModalRef.update(options);\n\t\t};\n\n\t\thubModalRef.update(options);\n\t\tif (this._modalRefs.length === 1) {\n\t\t\tthis._document.body.classList.add('hub-modal-open');\n\t\t}\n\n\t\tif (backdropCmptRef && backdropCmptRef.instance) {\n\t\t\tbackdropCmptRef.changeDetectorRef.detectChanges();\n\t\t}\n\t\twindowCmptRef.changeDetectorRef.detectChanges();\n\t\treturn hubModalRef;\n\t}\n\n\t/**\n\t * Allows observing the array of active modal instances.\n\t *\n\t * @returns An event emitter that streams changes to the active modal references.\n\t */\n\tget activeInstances() {\n\t\treturn this._activeInstances;\n\t}\n\n\t/**\n\t * Dismisses all currently open modal windows.\n\t *\n\t * @param reason Optional reason to pass to the dismissal routines of the active modals.\n\t */\n\tdismissAll(reason?: any) {\n\t\tthis._modalRefs.forEach((hubModalRef) => hubModalRef.dismiss(reason));\n\t}\n\n\t/**\n\t * Checks whether there are any currently open modal windows.\n\t *\n\t * @returns `true` if at least one modal is active, `false` otherwise.\n\t */\n\thasOpenModals(): boolean {\n\t\treturn this._modalRefs.length > 0;\n\t}\n\n\t/**\n\t * Lifts a dialog and its backdrop above the ones already open.\n\t *\n\t * Every dialog used to be painted at the same height, and so was every backdrop, so the\n\t * second backdrop landed *under* the first dialog: the new one floated over a page that\n\t * was not dimmed, and what it covered still looked reachable. Two steps per level keeps\n\t * each backdrop between the dialog below it and its own.\n\t *\n\t * The first dialog is left untouched on purpose. Writing the value inline would override\n\t * a `--hub-modal-zindex` the application themed, and at level zero there is nothing to\n\t * lift it above.\n\t */\n\tprivate _stack(level: number, windowEl: HTMLElement, backdropEl?: HTMLElement) {\n\t\tif (level === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lift = level * HubModalStack.ZINDEX_STEP;\n\t\tconst base = 'var(--hub-modal-zindex-base, var(--hub-sys-zindex-modal, 1055))';\n\n\t\twindowEl.style.setProperty('--hub-modal-zindex', `calc(${base} + ${lift})`);\n\t\t// Set on the element rather than left to the `:root` rule that derives it: a custom\n\t\t// property is substituted where it is declared, so the derived value inherits already\n\t\t// computed and never sees the window's own.\n\t\tbackdropEl?.style.setProperty('--hub-modal-backdrop-zindex', `calc(${base} + ${lift - 1})`);\n\t}\n\n\tprivate _attachBackdrop(containerEl: Element): ComponentRef<HubModalBackdrop> {\n\t\tlet backdropCmptRef = createComponent(HubModalBackdrop, {\n\t\t\tenvironmentInjector: this._applicationRef.injector,\n\t\t\telementInjector: this._injector\n\t\t});\n\t\tthis._applicationRef.attachView(backdropCmptRef.hostView);\n\t\tcontainerEl.appendChild(backdropCmptRef.location.nativeElement);\n\t\treturn backdropCmptRef;\n\t}\n\n\tprivate _attachWindowComponent(\n\t\tcontainerEl: Element,\n\t\tcontentNodes: Node[][],\n\t\toptions: HubModalOptions\n\t): ComponentRef<HubModalWindow> {\n\t\tconst singleContent = !options.headerSelector && !options.footerSelector;\n\t\tlet windowCmptRef = createComponent(HubModalWindow, {\n\t\t\tenvironmentInjector: this._applicationRef.injector,\n\t\t\telementInjector: this._injector\n\t\t});\n\n\t\tObject.assign(windowCmptRef.instance, { singleContent });\n\n\t\tthis._applicationRef.attachView(windowCmptRef.hostView);\n\t\tcontainerEl.appendChild(windowCmptRef.location.nativeElement);\n\t\twindowCmptRef.changeDetectorRef.detectChanges();\n\t\twindowCmptRef.instance.attachContent(contentNodes);\n\t\treturn windowCmptRef;\n\t}\n\n\tprivate _getContentRef(\n\t\tcontentInjector: Injector,\n\t\tenvironmentInjector: EnvironmentInjector,\n\t\tcontent: Type<any> | TemplateRef<any> | string,\n\t\tactiveModal: HubActiveModal,\n\t\toptions: HubModalOptions\n\t): ContentRef {\n\t\tif (!content) {\n\t\t\treturn new ContentRef([]);\n\t\t} else if (content instanceof TemplateRef) {\n\t\t\treturn this._createFromTemplateRef(content, activeModal, options);\n\t\t} else if (isString(content)) {\n\t\t\treturn this._createFromString(content);\n\t\t} else {\n\t\t\treturn this._createFromComponent(contentInjector, environmentInjector, content, activeModal, options);\n\t\t}\n\t}\n\n\tprivate _createFromTemplateRef(\n\t\ttemplateRef: TemplateRef<any>,\n\t\tactiveModal: HubActiveModal,\n\t\toptions: HubModalOptions\n\t): ContentRef {\n\t\tconst context = {\n\t\t\t$implicit: activeModal,\n\t\t\tclose(result: any) {\n\t\t\t\tactiveModal.close(result);\n\t\t\t},\n\t\t\tdismiss(reason: any) {\n\t\t\t\tactiveModal.dismiss(reason);\n\t\t\t}\n\t\t};\n\t\tconst viewRef = templateRef.createEmbeddedView(context);\n\t\tthis._applicationRef.attachView(viewRef);\n\n\t\tconst containerNode = document.createElement('ng-container');\n\t\tcontainerNode.append(...viewRef.rootNodes);\n\n\t\tthis._addDismissEventListener(containerNode, context as any, options);\n\t\tthis._addCloseEventListener(containerNode, context as any, options);\n\n\t\treturn new ContentRef(splitIntoSlots(containerNode, options), viewRef);\n\t}\n\n\tprivate _createFromString(content: string): ContentRef {\n\t\tconst component = this._document.createTextNode(`${content}`);\n\t\t// Three slots, always: `attachContent` destructures `[header, body, footer]`, and\n\t\t// `splitIntoSlots` — the path every other kind of content takes — returns three.\n\t\t// Returning one put the text in the HEADER slot and left the body `undefined`, so\n\t\t// appending it threw before the window could arm its Escape handler: a string modal\n\t\t// opened blank and could not be closed with the keyboard.\n\t\treturn new ContentRef([[], [component], []]);\n\t}\n\n\tprivate _createFromComponent(\n\t\tcontentInjector: Injector,\n\t\tenvironmentInjector: EnvironmentInjector,\n\t\tcomponentType: Type<any>,\n\t\tcontext: HubActiveModal,\n\t\toptions: HubModalOptions\n\t): ContentRef {\n\t\tconst elementInjector = Injector.create({\n\t\t\tproviders: [\n\t\t\t\t{ provide: HubActiveModal, useValue: context },\n\t\t\t\t{ provide: HUB_MODAL_DATA, useValue: options.data ?? null }\n\t\t\t],\n\t\t\tparent: contentInjector\n\t\t});\n\t\tconst componentRef = createComponent(componentType, {\n\t\t\tenvironmentInjector,\n\t\t\telementInjector\n\t\t});\n\n\t\t/**\n\t\t * @deprecated Since 22.3.0. Kept for one release for backward compatibility.\n\t\t * Prefer reading the payload through the typed `inject(HUB_MODAL_DATA)` token or\n\t\t * `inject(HubActiveModal).data`. This untyped monkey-patch of a `data` field on the\n\t\t * component instance will be removed in a future major.\n\t\t */\n\t\tif (options.data) {\n\t\t\tObject.assign(componentRef.instance, {\n\t\t\t\tdata: options.data\n\t\t\t});\n\t\t}\n\n\t\tconst componentNativeEl: HTMLElement = componentRef.location.nativeElement;\n\t\tthis._applicationRef.attachView(componentRef.hostView);\n\n\t\tthis._addDismissEventListener(componentNativeEl, context, options);\n\t\tthis._addCloseEventListener(componentNativeEl, context as any, options);\n\n\t\t// The component host is only a query root: `splitIntoSlots` hands its children to the\n\t\t// window and the host itself never enters the document, so anything set on it is lost.\n\t\t// `scrollable` is delivered by the dialog instead, in `HubModalWindow`.\n\t\treturn new ContentRef(splitIntoSlots(componentNativeEl, options), componentRef.hostView, componentRef);\n\t}\n\n\tprivate _setAriaHidden(element: Element) {\n\t\tconst parent = element.parentElement;\n\t\tif (parent && element !== this._document.body) {\n\t\t\tArray.from(parent.children).forEach((sibling) => {\n\t\t\t\tif (sibling !== element && sibling.nodeName !== 'SCRIPT') {\n\t\t\t\t\tthis._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden'));\n\t\t\t\t\tsibling.setAttribute('aria-hidden', 'true');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._setAriaHidden(parent);\n\t\t}\n\t}\n\n\tprivate _revertAriaHidden() {\n\t\tthis._ariaHiddenValues.forEach((value, element) => {\n\t\t\tif (value) {\n\t\t\t\telement.setAttribute('aria-hidden', value);\n\t\t\t} else {\n\t\t\t\telement.removeAttribute('aria-hidden');\n\t\t\t}\n\t\t});\n\t\tthis._ariaHiddenValues.clear();\n\t}\n\n\t/**\n\t * Starts listening for URL changes, so an open dialog does not outlive the screen that\n\t * opened it.\n\t *\n\t * `Location.onUrlChange` rather than `Location.subscribe`: the latter only hears the browser's\n\t * own back and forward, and the navigation that strands a dialog is usually a link the reader\n\t * clicked, which the router resolves without any of that.\n\t *\n\t * One listener for the whole stack, registered once and dropped only when the application is\n\t * torn down. One per dialog is what this looked like first, and it does not work: `Location`\n\t * notifies with a `forEach` over the live array, and a dialog that unsubscribes while being\n\t * dismissed shifts the indices under that walk, so the listener sitting after it is skipped —\n\t * silently, and not necessarily one of ours.\n\t */\n\tprivate _watchUrlChanges() {\n\t\tif (this._watchingUrl || !this._location) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._watchingUrl = true;\n\t\tlet previous = withoutFragment(this._location.path(true));\n\n\t\tthis._destroyRef.onDestroy(\n\t\t\tthis._location.onUrlChange((url) => {\n\t\t\t\tconst next = withoutFragment(url);\n\t\t\t\tif (next === previous) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tprevious = next;\n\t\t\t\tthis._dismissOnNavigation();\n\t\t\t})\n\t\t);\n\t}\n\n\t/**\n\t * Dismisses every open dialog that did not opt out of closing on navigation.\n\t *\n\t * Walks a copy: a dismissal takes its own reference out of `_modalRefs` as it goes.\n\t */\n\tprivate _dismissOnNavigation() {\n\t\tfor (const hubModalRef of [...this._modalRefs]) {\n\t\t\tif (this._closeOnNavigation.has(hubModalRef)) {\n\t\t\t\thubModalRef.dismiss(ModalDismissReasons.NAVIGATION);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _registerModalRef(hubModalRef: HubModalRef) {\n\t\tconst unregisterModalRef = () => {\n\t\t\tconst index = this._modalRefs.indexOf(hubModalRef);\n\t\t\tif (index > -1) {\n\t\t\t\tthis._modalRefs.splice(index, 1);\n\t\t\t\tthis._activeInstances.emit(this._modalRefs);\n\t\t\t}\n\t\t};\n\t\tthis._modalRefs.push(hubModalRef);\n\t\tthis._activeInstances.emit(this._modalRefs);\n\t\thubModalRef.result.then(unregisterModalRef, unregisterModalRef);\n\t}\n\n\tprivate _registerWindowCmpt(hubWindowCmpt: ComponentRef<HubModalWindow>) {\n\t\tthis._windowCmpts.push(hubWindowCmpt);\n\t\tthis._activeWindowCmptHasChanged.next();\n\n\t\thubWindowCmpt.onDestroy(() => {\n\t\t\tconst index = this._windowCmpts.indexOf(hubWindowCmpt);\n\t\t\tif (index > -1) {\n\t\t\t\tthis._windowCmpts.splice(index, 1);\n\t\t\t\tthis._activeWindowCmptHasChanged.next();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Attaches click event listeners to elements within a container based on a specified dismiss selector to dismiss a modal.\n\t *\n\t * @param {HTMLElement} container - The `container` parameter is an HTMLElement that represents the DOM element which contains the\n\t * modal content.\n\t * @param {HubActiveModal} context - The `context` parameter in the `_addDismissEventListener` function refers to the active modal\n\t * instance that is being displayed. It is used to call the `dismiss` method on the modal instance when a dismissible element is\n\t * clicked.\n\t * @param {HubModalOptions} options - The `options` parameter is an object that contains configuration options for the modal. It\n\t * may include properties such as `dismissSelector`, which is used to specify a CSS selector for elements that, when clicked, will\n\t * dismiss the modal by calling the `dismiss` method on the `context` object.\n\t */\n\tprivate _addDismissEventListener(container: HTMLElement, context: HubActiveModal, options: HubModalOptions) {\n\t\tif (options.dismissSelector) {\n\t\t\tconst dismissaable: NodeListOf<Element> = container.querySelectorAll(options.dismissSelector);\n\t\t\tfor (const item of Array.from(dismissaable)) {\n\t\t\t\titem.addEventListener('click', () => context.dismiss());\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Attaches click event listeners to elements matching a specified selector to close a modal window.\n\t *\n\t * @param {HTMLElement} container - The `container` parameter is an HTMLElement that represents the DOM element which contains the\n\t * modal content.\n\t * @param {HubActiveModal} context - The `context` parameter in the `_addCloseEventListener` function is of type `HubActiveModal`.\n\t * It is used to reference the active modal instance within the function and call the `close()` method on it when a close event is\n\t * triggered.\n\t * @param {HubModalOptions} options - The `options` parameter is an object that contains configuration options for the modal. It\n\t * may include properties such as `closeSelector`, which is used to specify the selector for elements that can trigger the modal\n\t * to close when clicked.\n\t */\n\tprivate _addCloseEventListener(container: HTMLElement, context: HubActiveModal, options: HubModalOptions) {\n\t\tif (options.closeSelector) {\n\t\t\tconst dismissaable: NodeListOf<Element> = container.querySelectorAll(options.closeSelector);\n\t\t\tfor (const item of Array.from(dismissaable)) {\n\t\t\t\titem.addEventListener('click', () => context.close());\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Split a container into the modal's three slots, taking nothing out of the document twice.\n *\n * Order is load-bearing and used not to be. The old code read the body as\n * `Array.from(container.childNodes)` **between** the header and the footer extractions, so\n * the footer's marker element was still a child when the body was captured: the body ended\n * up carrying an emptied marker `<div>` that the footer had already stripped.\n *\n * Every declared slot is taken out first; what nobody claimed is the body's, and it follows\n * whatever an explicit `bodySelector` matched. That is what makes the new option safe to add\n * to content that already works — naming the body can reorder it, never lose it.\n */\nfunction splitIntoSlots(\n\tcontainer: HTMLElement,\n\toptions: { headerSelector?: string; bodySelector?: string; footerSelector?: string }\n): Node[][] {\n\tconst header = options.headerSelector ? extractAndRemoveNodesBySelector(container, options.headerSelector) : [];\n\tconst footer = options.footerSelector ? extractAndRemoveNodesBySelector(container, options.footerSelector) : [];\n\tconst declaredBody = options.bodySelector ? extractAndRemoveNodesBySelector(container, options.bodySelector) : [];\n\n\t// Whatever is left belongs to the body, so nothing a consumer wrote can go missing.\n\tconst remainder = Array.from(container.childNodes);\n\n\treturn [header, [...declaredBody, ...remainder], footer];\n}\n\n/**\n * Extracts the children of every element matching `selector` inside `container` and takes those\n * matched elements out of the DOM, so the caller can hand the children to another slot without\n * the marker element travelling with them.\n *\n * @param {HTMLElement} container - Element searched for the selector.\n * @param {string} selector - CSS selector identifying the slot markers.\n *\n * @returns The children of every matched element, in document order.\n */\nfunction extractAndRemoveNodesBySelector(container: HTMLElement, selector: string): Array<Node> {\n\tconst containerNodes = container.querySelectorAll(selector);\n\n\tconst nodes = Array.from(containerNodes).reduce((acc, c) => {\n\t\treturn [...acc, ...Array.from(c.childNodes)];\n\t}, [] as Array<Node>);\n\n\tArray.from(containerNodes).forEach((node) => node.remove());\n\treturn nodes;\n}\n","import { inject, Injectable, Injector, TemplateRef, Type } from '@angular/core';\n\nimport { HubModalConfig, HubModalOptions } from './modal-config';\nimport { HubModalRef } from './modal-ref';\nimport { HubModalStack } from './modal-stack';\n\n/**\n * A service for opening modal windows.\n *\n * Creating a modal is straightforward: create a component or a template and pass it as an argument to\n * the `.open()` method.\n */\n@Injectable({ providedIn: 'root' })\nexport class HubModal {\n\tprivate _injector = inject(Injector);\n\tprivate _modalStack = inject(HubModalStack);\n\tprivate _config = inject(HubModalConfig);\n\n\t/**\n\t * Opens a new modal window with the specified content and supplied options.\n\t *\n\t * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,\n\t * then instances of those components can be injected with an instance of the `HubActiveModal` class. You can then\n\t * use `HubActiveModal` methods to close / dismiss modals from \"inside\" of your component.\n\t *\n\t * Also see the [`HubModalOptions`](#/components/modal/api#HubModalOptions) for the list of supported options.\n\t *\n\t * Generics: `C` is the content component type (inferred from the class you pass,\n\t * so `componentInstance` is typed without casts), `R` is the result type flowing\n\t * through `close()` / `result` / `closed`, and `D` types the `options.data`\n\t * payload (paired with `HubActiveModal<D>` / `HUB_MODAL_DATA` on the inside).\n\t */\n\topen<C = any, R = any, D = unknown>(\n\t\tcontent: Type<C> | TemplateRef<any> | string,\n\t\toptions: HubModalOptions<D> = {}\n\t): HubModalRef<C, R> {\n\t\tconst combinedOptions = {\n\t\t\t...this._config,\n\t\t\tanimation: this._config.animation,\n\t\t\t...options\n\t\t};\n\t\treturn this._modalStack.open(this._injector, content, combinedOptions) as HubModalRef<C, R>;\n\t}\n\n\t/**\n\t * Returns an observable that holds the active modal instances.\n\t */\n\tget activeInstances() {\n\t\treturn this._modalStack.activeInstances;\n\t}\n\n\t/**\n\t * Dismisses all currently displayed modal windows with the supplied reason.\n\t *\n\t * @since 3.1.0\n\t */\n\tdismissAll(reason?: any) {\n\t\tthis._modalStack.dismissAll(reason);\n\t}\n\n\t/**\n\t * Indicates if there are currently any open modal windows in the application.\n\t *\n\t * @since 3.3.0\n\t */\n\thasOpenModals(): boolean {\n\t\treturn this._modalStack.hasOpenModals();\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport { HubModal } from './modal';\nexport { HubModal } from './modal';\nexport { HubModalConfig } from './modal-config';\nexport type { HubModalOptions, HubModalUpdatableOptions } from './modal-config';\nexport { ModalDismissReasons } from './modal-dismiss-reasons';\nexport { HubModalPlacement } from './modal-placement';\nexport { HUB_MODAL_DATA, HubActiveModal, HubModalRef } from './modal-ref';\n\n/**\n * Backward-compatibility module kept for NgModule-based applications.\n *\n * @deprecated Inject `HubModal` directly. It is `providedIn: 'root'`, so this module adds\n * nothing an application does not already have; importing it only creates a redundant second\n * instance in that injector, delegating to the same root `HubModalStack` and `HubModalConfig`.\n * Scheduled for removal in **23.0.0**.\n */\n@NgModule({ providers: [HubModal] })\nexport class HubModalModule {}\n","/*\n * Public API Surface of modal\n */\nexport {\n\tModalDismissReasons,\n\tHUB_MODAL_DATA,\n\tHubActiveModal,\n\tHubModal,\n\tHubModalConfig,\n\tHubModalModule,\n\tHubModalPlacement,\n\tHubModalRef\n} from './lib/modal.module';\nexport type { HubModalOptions, HubModalUpdatableOptions } from './lib/modal.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-hub-ui-modal.mjs","sources":["../../../projects/modal/src/lib/modal-placement.ts","../../../projects/modal/src/lib/modal-config.ts","../../../projects/modal/src/lib/modal-backdrop.ts","../../../projects/modal/src/lib/modal-dismiss-reasons.ts","../../../projects/modal/src/lib/modal-ref.ts","../../../projects/modal/src/lib/modal-window.ts","../../../projects/modal/src/lib/modal-stack.ts","../../../projects/modal/src/lib/modal.ts","../../../projects/modal/src/lib/modal.module.ts","../../../projects/modal/src/public-api.ts","../../../projects/modal/src/ng-hub-ui-modal.ts"],"sourcesContent":["/**\n * Supported modal placements within the viewport.\n */\nexport enum HubModalPlacement {\n\t/**\n\t * Places the modal in the center of the viewport.\n\t */\n\tCenter = 'center',\n\n\t/**\n\t * Anchors the modal to the start edge of the viewport.\n\t */\n\tStart = 'start',\n\n\t/**\n\t * Anchors the modal to the end edge of the viewport.\n\t */\n\tEnd = 'end',\n\n\t/**\n\t * Anchors the modal to the top edge of the viewport.\n\t */\n\tTop = 'top',\n\n\t/**\n\t * Anchors the modal to the bottom edge of the viewport.\n\t */\n\tBottom = 'bottom'\n}\n","import { Injectable, Injector } from '@angular/core';\nimport { HubModalPlacement } from './modal-placement';\n// import { HubConfig } from '../hub-config';\n\n/**\n * Options available when opening new modal windows with `HubModal.open()` method.\n *\n * The optional generic parameter `D` types the `data` payload delivered to the\n * modal content through `HubActiveModal<D>.data` / the `HUB_MODAL_DATA` token.\n */\nexport interface HubModalOptions<D = unknown> {\n\t/**\n\t * If `true`, modal opening and closing will be animated.\n\t *\n\t * @since 8.0.0\n\t */\n\tanimation?: boolean;\n\n\t/**\n\t * `aria-labelledby` attribute value to set on the modal window.\n\t *\n\t * @since 2.2.0\n\t */\n\tariaLabelledBy?: string;\n\n\t/**\n\t * `aria-describedby` attribute value to set on the modal window.\n\t *\n\t * @since 6.1.0\n\t */\n\tariaDescribedBy?: string;\n\n\t/**\n\t * Accessible name of the dismiss button the modal draws in its own header.\n\t *\n\t * That button carries no text — its glyph is painted by CSS — so this string is the\n\t * whole of what a screen reader announces. It ships in English, which leaves a\n\t * localized application with a control it cannot translate; pass the translated\n\t * string here, or set the default once on `HubModalConfig`.\n\t *\n\t * Default value is `'Close'`.\n\t */\n\tcloseAriaLabel?: string;\n\n\t/**\n\t * Whether the dialog draws the dismiss button in its own header.\n\t *\n\t * `false` for a dialog there is no free way out of — a choice that has to be made, a\n\t * wizard that provisions something on its way out and says so on the button that does\n\t * it. The button is left out of the DOM rather than hidden, because a button hidden\n\t * with CSS is still announced by a screen reader and still reached by the tab order,\n\t * which is the hiding that consumers were writing by hand.\n\t *\n\t * It governs the built-in button alone: `backdrop: 'static'` and `keyboard: false` are\n\t * the other two ways out, and each is still its own decision.\n\t *\n\t * Default value is `true`.\n\t */\n\tcloseButton?: boolean;\n\n\t/**\n\t * If `true`, the backdrop element will be created for a given modal.\n\t *\n\t * Alternatively, specify `'static'` for a backdrop which doesn't close the modal on click.\n\t *\n\t * Default value is `true`.\n\t */\n\tbackdrop?: boolean | 'static';\n\n\t/**\n\t * Callback right before the modal will be dismissed.\n\t *\n\t * If this function returns:\n\t * * `false`\n\t * * a promise resolved with `false`\n\t * * a promise that is rejected\n\t *\n\t * then the modal won't be dismissed.\n\t */\n\tbeforeDismiss?: () => boolean | Promise<boolean>;\n\n\t/**\n\t * If `true`, the modal will be centered vertically.\n\t *\n\t * Default value is `false`.\n\t *\n\t * @since 1.1.0\n\t */\n\tcentered?: boolean;\n\n\t/**\n\t * Controls where the modal is placed within the viewport.\n\t *\n\t * Default value is `'center'`.\n\t */\n\tplacement?: HubModalPlacement;\n\n\t/**\n\t * Opens the dialog as a drawer: flush against the edge named by `placement`, square on\n\t * that side, stretched to the full height (or width, from the top or bottom), and\n\t * scrolling in the body so the header and footer stay put.\n\t *\n\t * Separate from `placement` rather than implied by it. An edge placement already ships\n\t * and already means \"a floating dialog that enters from this side\"; making it mean\n\t * \"drawer\" would change what every consumer of it sees, with nothing to catch it — a\n\t * silent visual break is worse than an extra option.\n\t *\n\t * With no `placement`, this opens from the end edge, so a drawer is one decision.\n\t *\n\t * Default value is `false`.\n\t */\n\toffcanvas?: boolean;\n\n\t/**\n\t * Dismisses the modal when the application navigates away from the screen that opened it.\n\t *\n\t * A dialog belongs to the screen underneath it. Left alone it outlives that screen: the new\n\t * one renders behind a backdrop that swallows every click, and nothing on it explains why the\n\t * page stopped responding. Closing it is what a reader expects and what the CDK's dialog has\n\t * done for years, so it is the default here too.\n\t *\n\t * A change of path or query string counts, because either one replaces the screen under the\n\t * dialog. A change of anchor does not: it moves the reader inside that same screen. A wizard\n\t * that drives navigation itself, and stays open across it, is the case for turning this off.\n\t *\n\t * The dismissal reason is `ModalDismissReasons.NAVIGATION`.\n\t *\n\t * Default value is `true`.\n\t */\n\tcloseOnNavigation?: boolean;\n\n\t/**\n\t * A selector specifying the element all new modal windows should be appended to.\n\t * Since v5.3.0 it is also possible to pass the reference to an `HTMLElement`.\n\t *\n\t * If not specified, will be `body`.\n\t */\n\tcontainer?: string | HTMLElement;\n\n\t/**\n\t * If `true` modal will always be displayed in fullscreen mode.\n\t *\n\t * For values like `'md'` it means that modal will be displayed in fullscreen mode\n\t * only if the viewport width is below `'md'`. For custom strings (ex. when passing `'mysize'`)\n\t * it will add a `'modal-fullscreen-mysize-down'` class.\n\t *\n\t * If not specified will be `false`.\n\t *\n\t * @since 12.1.0\n\t */\n\tfullscreen?: 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | boolean | string;\n\n\t/**\n\t * The `Injector` to use for modal content.\n\t */\n\tinjector?: Injector;\n\n\t/**\n\t * If `true`, the modal will be closed when `Escape` key is pressed\n\t *\n\t * Default value is `true`.\n\t */\n\tkeyboard?: boolean;\n\n\t/**\n\t * Scrollable modal content (false by default).\n\t *\n\t * @since 5.0.0\n\t */\n\tscrollable?: boolean;\n\n\t/**\n\t * Size of a new modal window.\n\t */\n\tsize?: 'sm' | 'lg' | 'xl' | string;\n\n\t/**\n\t * Semantic accent of the modal, for meaningful dialogs (a destructive\n\t * confirmation, a success notice…). Applies the `hub-modal--<variant>` class\n\t * to the window, which tints the dialog surface, its outer and header/footer\n\t * borders, and its title.\n\t *\n\t * The built-in values (`'primary'` · `'success'` · `'danger'` · `'warning'`\n\t * · `'info'`) map to the design-system colours, but **any string is accepted**\n\t * — the modal reads `--hub-sys-color-<variant>` from the host application.\n\t *\n\t * A top accent bar is available too, but ships at zero width: set\n\t * `--hub-modal-accent-bar-width` to turn it on.\n\t *\n\t * If not specified, the modal is rendered neutral.\n\t */\n\tvariant?: 'primary' | 'success' | 'danger' | 'warning' | 'info' | (string & {});\n\n\t/**\n\t * A custom class to append to the modal window.\n\t */\n\twindowClass?: string;\n\n\t/**\n\t * A custom class to append to the modal dialog.\n\t *\n\t * @since 9.1.0\n\t */\n\tmodalDialogClass?: string;\n\n\t/**\n\t * A custom class to append to the modal backdrop.\n\t *\n\t * @since 1.1.0\n\t */\n\tbackdropClass?: string;\n\n\t/**\n\t * Allows to specify a custom selector for the header element of the modal window. This can be useful if you want to target\n\t * a specific element within the modal to act as the header, for example, to apply custom styling or functionality to it. By\n\t * providing a CSS selector string, you can target the desired\theader element within the modal content.\n\t */\n\theaderSelector?: string;\n\n\t/**\n\t * Allows to specify a custom selector for the footer element of the modal window. This can be useful if you want to target\n\t * a specific element within the modal to act as the footer, for example, to apply custom styling or functionality to it. By\n\t * providing a CSS selector string, you can target the desired footer element within the modal content.\n\t */\n\tfooterSelector?: string;\n\n\t/**\n\t * Selector for the block whose children become the modal's **body**.\n\t *\n\t * The body is the one slot that has always been implicit: whatever was left over once the\n\t * header and the footer had been taken out. That works while the three parts are written\n\t * in order, and stops working the moment the content has anything else in it — a\n\t * `<ng-container>` holding state, a comment, a stray text node — because leftovers are\n\t * defined by what they are *not*.\n\t *\n\t * Naming it makes the body an ordinary slot like the other two. Nothing is ever dropped:\n\t * whatever matches this selector goes into the body first, and anything left unclaimed by\n\t * any of the three follows it, so adding the selector to existing content cannot lose a\n\t * node.\n\t *\n\t * @example\n\t * this.modal.open(MyModalComponent, {\n\t * headerSelector: '[hubModalHeader]',\n\t * bodySelector: '[hubModalBody]',\n\t * footerSelector: '[hubModalFooter]'\n\t * });\n\t */\n\tbodySelector?: string;\n\n\t/** Used to specify a custom selector for elements that can trigger the dismissal of the modal window. By providing a CSS selector\n\t * string for `dismissSelector`, you can target specific elements within the modal content that, when interacted with (e.g., clicked),\n\t * will close or dismiss the modal window.\n\t */\n\tdismissSelector?: string;\n\n\t/**\n\t * Used to specify a custom selector for elements that can trigger the closing of the modal window. By providing a CSS selector\n\t * string for `closeSelector`, you can target specific elements within the modal content that, when interacted with (e.g., clicked),\n\t * will close the modal window. This allows for customization of the elements that can act as close buttons for the modal.\n\t */\n\tcloseSelector?: string;\n\n\t/** Used to store any additional data that needs to be passed to the modal window when it is opened. This property allows you\n\t * to provide custom data to the modal component, which can then be accessed and utilized within the modal content or logic.\n\t * It provides flexibility for passing dynamic information to the modal window based on the specific use case or requirements.\n\t */\n\tdata?: D;\n}\n\n/**\n * Options that can be changed on an opened modal with `HubModalRef.update()` and `HubActiveModal.update()` methods.\n *\n * @since 14.2.0\n */\nexport type HubModalUpdatableOptions = Pick<\n\tHubModalOptions,\n\t| 'ariaLabelledBy'\n\t| 'ariaDescribedBy'\n\t| 'centered'\n\t| 'placement'\n\t| 'offcanvas'\n\t| 'fullscreen'\n\t| 'backdropClass'\n\t| 'size'\n\t| 'variant'\n\t| 'windowClass'\n\t| 'modalDialogClass'\n>;\n\n/**\n * A configuration service for the [`HubModal`](#/components/modal/api#HubModal) service.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all modals used in the application.\n *\n * @since 3.1.0\n */\n@Injectable({ providedIn: 'root' })\nexport class HubModalConfig implements Required<HubModalOptions> {\n\t// private _hubConfig = inject(HubConfig);\n\tprivate _animation?: boolean;\n\n\tariaLabelledBy!: string;\n\tariaDescribedBy!: string;\n\tcloseAriaLabel = 'Close';\n\tcloseButton = true;\n\tbackdrop: boolean | 'static' = true;\n\tbeforeDismiss!: () => boolean | Promise<boolean>;\n\tcentered!: boolean;\n\tcloseOnNavigation = true;\n\tplacement: HubModalPlacement = HubModalPlacement.Center;\n\toffcanvas = false;\n\tcontainer!: string | HTMLElement;\n\tfullscreen: 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | boolean | string = false;\n\tinjector!: Injector;\n\tkeyboard = true;\n\tscrollable!: boolean;\n\tsize!: 'sm' | 'lg' | 'xl' | string;\n\tvariant!: 'primary' | 'success' | 'danger' | 'warning' | 'info' | (string & {});\n\twindowClass!: string;\n\tmodalDialogClass!: string;\n\tbackdropClass!: string;\n\theaderSelector!: string;\n\tfooterSelector!: string;\n\tbodySelector!: string;\n\tdismissSelector: string = '[data-dismiss=\"modal\"]';\n\tcloseSelector: string = '[data-close=\"modal\"]';\n\tdata: any;\n\n\tget animation(): boolean {\n\t\treturn this._animation ?? true; /* this._hubConfig.animation */\n\t}\n\tset animation(animation: boolean) {\n\t\tthis._animation = animation;\n\t}\n}\n","import {\n\tafterNextRender,\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tinject,\n\tInjector,\n\tinput,\n\tNgZone,\n\tOnInit\n} from '@angular/core';\nimport { hubRunTransition, reflow } from 'ng-hub-ui-utils';\nimport { Observable } from 'rxjs';\n\n/**\n * Represents the backdrop element associated with an active modal window.\n * It is responsible for displaying a dark overlay and handling entry/exit animations.\n */\n@Component({\n\tselector: 'hub-modal-backdrop',\n\tstandalone: true,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: '',\n\thost: {\n\t\t'[class]': '\"hub-modal__backdrop\" + (backdropClass() ? \" \" + backdropClass() : \"\")',\n\t\t'[class.show]': '!animation()',\n\t\t'[class.fade]': 'animation()'\n\t}\n})\nexport class HubModalBackdrop implements OnInit {\n\tprivate _nativeElement = inject(ElementRef).nativeElement as HTMLElement;\n\tprivate _zone = inject(NgZone);\n\tprivate _injector = inject(Injector);\n\n\t/**\n\t * Determines whether the backdrop should use CSS transitions during its initialization and destruction.\n\t */\n\treadonly animation = input<boolean>(true);\n\n\t/**\n\t * Allows applying a custom CSS class to the backdrop element.\n\t */\n\treadonly backdropClass = input<string>();\n\n\tngOnInit() {\n\t\t// `NgZone.onStable` never emits under `provideZonelessChangeDetection` (the zone is a\n\t\t// `NoopNgZone`), so the entry transition never ran there. `afterNextRender` fires in\n\t\t// both modes. See the same fix in `HubModalWindowComponent.ngOnInit`.\n\t\tafterNextRender(\n\t\t\t() => {\n\t\t\t\thubRunTransition(\n\t\t\t\t\tthis._zone,\n\t\t\t\t\tthis._nativeElement,\n\t\t\t\t\t(element: HTMLElement, animation: boolean) => {\n\t\t\t\t\t\tif (animation) {\n\t\t\t\t\t\t\treflow(element);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.classList.add('show');\n\t\t\t\t\t},\n\t\t\t\t\t{ animation: this.animation(), runningTransition: 'continue' }\n\t\t\t\t);\n\t\t\t},\n\t\t\t{ injector: this._injector }\n\t\t);\n\t}\n\n\t/**\n\t * Triggers the hide transition for the backdrop element and removes the `show` CSS class.\n\t *\n\t * @returns An observable that completes once the exit transition has ended.\n\t */\n\thide(): Observable<void> {\n\t\treturn hubRunTransition(this._zone, this._nativeElement, ({ classList }) => classList.remove('show'), {\n\t\t\tanimation: this.animation(),\n\t\t\trunningTransition: 'stop'\n\t\t});\n\t}\n}\n","export enum ModalDismissReasons {\n\tBACKDROP_CLICK,\n\tESC,\n\tNAVIGATION\n}\n","import { ComponentRef, InjectionToken } from '@angular/core';\nimport { ContentRef, isDefined, isPromise } from 'ng-hub-ui-utils';\nimport { Observable, of, Subject, zip } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { HubModalBackdrop } from './modal-backdrop';\nimport { HubModalOptions, HubModalUpdatableOptions } from './modal-config';\nimport { HubModalWindow } from './modal-window';\n\n/**\n * Injection token carrying the `HubModalOptions.data` payload down to the modal\n * content component. Inject it to read the payload in a typed way, mirroring the\n * Angular CDK `DIALOG_DATA` pattern:\n *\n * ```ts\n * private readonly data = inject(HUB_MODAL_DATA) as MyPayload;\n * ```\n *\n * It is provided alongside `HubActiveModal` in the content component's element\n * injector and resolves to `null` when no `data` option was supplied.\n *\n * @since 22.3.0\n */\nexport const HUB_MODAL_DATA = new InjectionToken<unknown>('HUB_MODAL_DATA');\n\n/**\n * A reference to the currently opened (active) modal.\n *\n * Instances of this class can be injected into your component passed as modal content.\n * So you can `.update()`, `.close()` or `.dismiss()` the modal window from your component.\n *\n * The optional generic parameter `D` types the {@link HubActiveModal.data} payload\n * passed through `HubModalOptions.data`.\n */\nexport class HubActiveModal<D = unknown, R = any> {\n\t/**\n\t * Creates the active modal reference.\n\t *\n\t * @param _data The payload supplied via `HubModalOptions.data`, if any.\n\t */\n\tconstructor(private readonly _data: D = null as D) {}\n\n\t/**\n\t * The typed payload passed to the modal through `HubModalOptions.data`.\n\t *\n\t * Equivalent to injecting the {@link HUB_MODAL_DATA} token, but strongly typed\n\t * when the generic parameter `D` is supplied. Resolves to `null` when no `data`\n\t * option was provided.\n\t *\n\t * @since 22.3.0\n\t */\n\tget data(): D {\n\t\treturn this._data;\n\t}\n\n\t/**\n\t * Updates options of an opened modal.\n\t *\n\t * @since 14.2.0\n\t */\n\tupdate(options: HubModalUpdatableOptions): void {}\n\t/**\n\t * Closes the modal with an optional `result` value.\n\t *\n\t * The `HubModalRef.result` promise will be resolved with the provided value.\n\t */\n\tclose(result?: R): void {}\n\n\t/**\n\t * Dismisses the modal with an optional `reason` value.\n\t *\n\t * The `HubModalRef.result` promise will be rejected with the provided value.\n\t */\n\tdismiss(reason?: any): void {}\n}\n\nconst WINDOW_ATTRIBUTES: string[] = [\n\t'animation',\n\t'ariaLabelledBy',\n\t'ariaDescribedBy',\n\t'closeAriaLabel',\n\t'closeButton',\n\t'backdrop',\n\t'centered',\n\t'placement',\n\t'offcanvas',\n\t'fullscreen',\n\t'keyboard',\n\t'scrollable',\n\t'size',\n\t'variant',\n\t'windowClass',\n\t'modalDialogClass'\n];\nconst BACKDROP_ATTRIBUTES: string[] = ['animation', 'backdropClass'];\n\n/**\n * A reference to the newly opened modal returned by the `HubModal.open()` method.\n */\nexport class HubModalRef<C = any, R = any> {\n\tprivate _closed = new Subject<R>();\n\tprivate _dismissed = new Subject<any>();\n\tprivate _hidden = new Subject<void>();\n\tprivate _resolve!: (result: R | PromiseLike<R>) => void;\n\tprivate _reject!: (reason?: any) => void;\n\n\tprivate _applyWindowOptions(windowComponentRef: ComponentRef<HubModalWindow>, options: HubModalOptions): void {\n\t\tWINDOW_ATTRIBUTES.forEach((optionName: string) => {\n\t\t\tconst opts: any = options as any;\n\t\t\tif (isDefined(opts[optionName])) {\n\t\t\t\twindowComponentRef.setInput(optionName, opts[optionName]);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _applyBackdropOptions(backdropComponentRef: ComponentRef<HubModalBackdrop>, options: HubModalOptions): void {\n\t\tBACKDROP_ATTRIBUTES.forEach((optionName: string) => {\n\t\t\tconst opts: any = options as any;\n\t\t\tif (isDefined(opts[optionName])) {\n\t\t\t\tbackdropComponentRef.setInput(optionName, opts[optionName]);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Updates options of an opened modal.\n\t *\n\t * @since 14.2.0\n\t */\n\tupdate(options: HubModalUpdatableOptions): void {\n\t\tthis._applyWindowOptions(this._windowCmptRef, options);\n\t\tif (this._backdropCmptRef && this._backdropCmptRef.instance) {\n\t\t\tthis._applyBackdropOptions(this._backdropCmptRef, options);\n\t\t}\n\t}\n\n\t/**\n\t * The instance of a component used for the modal content.\n\t *\n\t * When a `TemplateRef` is used as the content or when the modal is closed, will return `undefined`.\n\t */\n\tget componentInstance(): C | void {\n\t\tif (this._contentRef && this._contentRef.componentRef) {\n\t\t\treturn this._contentRef.componentRef.instance;\n\t\t}\n\t}\n\n\t/**\n\t * The promise that is resolved when the modal is closed and rejected when the modal is dismissed.\n\t */\n\tresult: Promise<R>;\n\n\t/**\n\t * The observable that emits when the modal is closed via the `.close()` method.\n\t *\n\t * It will emit the result passed to the `.close()` method.\n\t *\n\t * @since 8.0.0\n\t */\n\tget closed(): Observable<R> {\n\t\treturn this._closed.asObservable().pipe(takeUntil(this._hidden));\n\t}\n\n\t/**\n\t * The observable that emits when the modal is dismissed via the `.dismiss()` method.\n\t *\n\t * It will emit the reason passed to the `.dismissed()` method by the user, or one of the internal\n\t * reasons like backdrop click or ESC key press.\n\t *\n\t * @since 8.0.0\n\t */\n\tget dismissed(): Observable<any> {\n\t\treturn this._dismissed.asObservable().pipe(takeUntil(this._hidden));\n\t}\n\n\t/**\n\t * The observable that emits when both modal window and backdrop are closed and animations were finished.\n\t * At this point modal and backdrop elements will be removed from the DOM tree.\n\t *\n\t * This observable will be completed after emitting.\n\t *\n\t * @since 8.0.0\n\t */\n\tget hidden(): Observable<void> {\n\t\treturn this._hidden.asObservable();\n\t}\n\n\t/**\n\t * The observable that emits when modal is fully visible and animation was finished.\n\t * Modal DOM element is always available synchronously after calling 'modal.open()' service.\n\t *\n\t * This observable will be completed after emitting.\n\t * It will not emit, if modal is closed before open animation is finished.\n\t *\n\t * @since 8.0.0\n\t */\n\tget shown(): Observable<void> {\n\t\treturn this._windowCmptRef.instance.shown.asObservable();\n\t}\n\n\tconstructor(\n\t\tprivate _windowCmptRef: ComponentRef<HubModalWindow>,\n\t\tprivate _contentRef: ContentRef,\n\t\tprivate _backdropCmptRef?: ComponentRef<HubModalBackdrop>,\n\t\tprivate _beforeDismiss?: () => boolean | Promise<boolean>\n\t) {\n\t\t_windowCmptRef.instance.dismissEvent.subscribe((reason: any) => {\n\t\t\tthis.dismiss(reason);\n\t\t});\n\n\t\tthis.result = new Promise((resolve, reject) => {\n\t\t\tthis._resolve = resolve;\n\t\t\tthis._reject = reject;\n\t\t});\n\t\tthis.result.then(null, () => {});\n\t}\n\n\t/**\n\t * Closes the modal with an optional `result` value.\n\t *\n\t * The `HubMobalRef.result` promise will be resolved with the provided value.\n\t */\n\tclose(result?: R): void {\n\t\tif (this._windowCmptRef) {\n\t\t\t// `close()` without a value legitimately emits `undefined` through the\n\t\t\t// `R`-typed stream, mirroring the optional `result` parameter.\n\t\t\tthis._closed.next(result as R);\n\t\t\tthis._resolve(result as R);\n\t\t\tthis._removeModalElements();\n\t\t}\n\t}\n\n\tprivate _dismiss(reason?: any) {\n\t\tthis._dismissed.next(reason);\n\t\tthis._reject(reason);\n\t\tthis._removeModalElements();\n\t}\n\n\t/**\n\t * Dismisses the modal with an optional `reason` value.\n\t *\n\t * The `HubModalRef.result` promise will be rejected with the provided value.\n\t */\n\tdismiss(reason?: any): void {\n\t\tif (this._windowCmptRef) {\n\t\t\tif (!this._beforeDismiss) {\n\t\t\t\tthis._dismiss(reason);\n\t\t\t} else {\n\t\t\t\tconst dismiss = this._beforeDismiss();\n\t\t\t\tif (isPromise(dismiss as any)) {\n\t\t\t\t\t(dismiss as Promise<boolean>).then(\n\t\t\t\t\t\t(result) => {\n\t\t\t\t\t\t\tif (result !== false) {\n\t\t\t\t\t\t\t\tthis._dismiss(reason);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => {}\n\t\t\t\t\t);\n\t\t\t\t} else if (dismiss !== false) {\n\t\t\t\t\tthis._dismiss(reason);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _removeModalElements() {\n\t\tconst windowTransition$ = this._windowCmptRef.instance.hide();\n\t\tconst backdropTransition$ = this._backdropCmptRef ? this._backdropCmptRef.instance.hide() : of(undefined);\n\n\t\t// hiding window\n\t\twindowTransition$.subscribe(() => {\n\t\t\tconst { nativeElement } = this._windowCmptRef.location;\n\t\t\tnativeElement.parentNode?.removeChild(nativeElement);\n\t\t\tthis._windowCmptRef.destroy();\n\t\t\tthis._contentRef?.viewRef?.destroy();\n\n\t\t\tthis._windowCmptRef = <any>null;\n\t\t\tthis._contentRef = <any>null;\n\t\t});\n\n\t\t// hiding backdrop\n\t\tbackdropTransition$.subscribe(() => {\n\t\t\tif (this._backdropCmptRef) {\n\t\t\t\tconst { nativeElement } = this._backdropCmptRef.location;\n\t\t\t\tnativeElement.parentNode?.removeChild(nativeElement);\n\t\t\t\tthis._backdropCmptRef.destroy();\n\t\t\t\tthis._backdropCmptRef = <any>null;\n\t\t\t}\n\t\t});\n\n\t\t// all done\n\t\tzip(windowTransition$, backdropTransition$).subscribe(() => {\n\t\t\tthis._hidden.next();\n\t\t\tthis._hidden.complete();\n\t\t});\n\t}\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n\tafterNextRender,\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tinject,\n\tInjector,\n\tinput,\n\tNgZone,\n\tOnDestroy,\n\tOnInit,\n\toutput,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { getFocusableBoundaryElements, hubRunTransition, isString, reflow, TransitionOptions } from 'ng-hub-ui-utils';\nimport { fromEvent, Observable, Subject, zip } from 'rxjs';\nimport { filter, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { ModalDismissReasons } from './modal-dismiss-reasons';\nimport { HubModalPlacement } from './modal-placement';\n\n/**\n * The internal component representing the modal window.\n * It renders the modal dialog structure, handles ARIA attributes, encapsulates the projected content,\n * and manages interactions like keyboard dismissals and backdrop clicks.\n */\n@Component({\n\tselector: 'hub-modal-window',\n\timports: [],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\t'[class]':\n\t\t\t'\"hub-modal\" + hostPlacementClass + (variant() ? \" hub-modal--\" + variant() : \"\") + (windowClass() ? \" \" + windowClass() : \"\")',\n\t\t'[class.fade]': 'animation()',\n\t\trole: 'dialog',\n\t\ttabindex: '-1',\n\t\t'[attr.aria-modal]': 'true',\n\t\t'[attr.aria-labelledby]': 'ariaLabelledBy()',\n\t\t'[attr.aria-describedby]': 'ariaDescribedBy()'\n\t},\n\ttemplate: `\n\t\t<div\n\t\t\t#dialog\n\t\t\t[class]=\"\n\t\t\t\t'hub-modal__dialog' +\n\t\t\t\t(size() ? ' hub-modal__dialog--' + size() : '') +\n\t\t\t\tplacementClass +\n\t\t\t\tcenteredClass +\n\t\t\t\tfullscreenClass +\n\t\t\t\t(scrollable() ? ' hub-modal__dialog--scrollable' : '') +\n\t\t\t\t(modalDialogClass() ? ' ' + modalDialogClass() : '')\n\t\t\t\"\n\t\t\trole=\"document\"\n\t\t>\n\t\t\t<div #content class=\"hub-modal__content\">\n\t\t\t\t@if (singleContent) {\n\t\t\t\t\t<div #bodyContainer class=\"hub-modal__body\"></div>\n\t\t\t\t} @else {\n\t\t\t\t\t<div class=\"hub-modal__header\">\n\t\t\t\t\t\t<div #headingContainer class=\"hub-modal__heading\"></div>\n\t\t\t\t\t\t@if (closeButton()) {\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t#closeButton\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"hub-modal__close\"\n\t\t\t\t\t\t\t\t[attr.aria-label]=\"closeAriaLabel()\"\n\t\t\t\t\t\t\t\t(click)=\"dismiss(null)\"\n\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div #bodyContainer class=\"hub-modal__body\"></div>\n\t\t\t\t\t<div #footerContainer class=\"hub-modal__footer\"></div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t`,\n\t// Reason 1 of CODING_RULES: most of this stylesheet dresses elements that are not in this\n\t// component's view and can never carry its marker attribute — `body.hub-modal-open`, the\n\t// `:root` block the backdrop reads, and `.hub-modal__backdrop`, which is a sibling component\n\t// created on the container element rather than a descendant of the window. Every selector it\n\t// emits stays under the library's own `hub-modal` prefix.\n\tencapsulation: ViewEncapsulation.None,\n\tstyleUrl: './modal.scss'\n})\nexport class HubModalWindow implements OnInit, OnDestroy {\n\tprivate _document = inject(DOCUMENT);\n\tprivate _elRef = inject(ElementRef<HTMLElement>);\n\tprivate _zone = inject(NgZone);\n\tprivate _injector = inject(Injector);\n\n\tprivate _closed$ = new Subject<void>();\n\tprivate _elWithFocus: Element | null = null; // element that is focused prior to modal opening\n\n\tprivate readonly _dialogEl = viewChild.required<ElementRef<HTMLElement>>('dialog');\n\tprivate readonly _headingContainerEl = viewChild<ElementRef<HTMLElement>>('headingContainer');\n\tprivate readonly _bodyContainerEl = viewChild<ElementRef<HTMLElement>>('bodyContainer');\n\tprivate readonly _footerContainerEl = viewChild<ElementRef<HTMLElement>>('footerContainer');\n\tprivate readonly _closeButtonEl = viewChild<ElementRef<HTMLButtonElement>>('closeButton');\n\tprivate readonly _contentEl = viewChild<ElementRef<HTMLElement>>('content');\n\n\t/**\n\t * Determines whether the modal window should animate its entry and exit.\n\t */\n\treadonly animation = input<boolean>(true);\n\n\t/** Watches the content box so a change in its height can be animated rather than jumped. */\n\tprivate _resizeObserver: ResizeObserver | null = null;\n\tprivate _lastHeight: number | null = null;\n\tprivate _resizeAnimation: Animation | null = null;\n\n\t/**\n\t * Identifier to apply to the `aria-labelledby` attribute of the modal.\n\t */\n\treadonly ariaLabelledBy = input<string>();\n\n\t/**\n\t * Identifier to apply to the `aria-describedby` attribute of the modal.\n\t */\n\treadonly ariaDescribedBy = input<string>();\n\n\t/**\n\t * Accessible name of the dismiss button drawn in the built-in header.\n\t *\n\t * The glyph is painted by CSS, so the button has no text node and this attribute is\n\t * the only name assistive technology can read.\n\t */\n\treadonly closeAriaLabel = input<string>('Close');\n\n\t/**\n\t * Whether the built-in header draws its dismiss button.\n\t *\n\t * `false` leaves it out of the DOM rather than hiding it, which is the whole point: a\n\t * button hidden with CSS is still announced by a screen reader and still reached by the\n\t * tab order, so the dialog would keep offering a way out it does not have.\n\t */\n\treadonly closeButton = input<boolean>(true);\n\n\t/**\n\t * Configures the presence and behavior of the modal backdrop (`true`, `false`, or `'static'`).\n\t */\n\treadonly backdrop = input<boolean | string>(true);\n\n\t/**\n\t * If `true`, the modal dialog will be centered vertically.\n\t */\n\treadonly centered = input<boolean>();\n\n\t/**\n\t * Specifies the modal placement inside the viewport.\n\t */\n\treadonly placement = input<HubModalPlacement>(HubModalPlacement.Center);\n\n\t/**\n\t * Opens the dialog as a drawer against the edge named by {@link placement}.\n\t */\n\treadonly offcanvas = input<boolean>(false);\n\n\t/**\n\t * Enables fullscreen mode for the modal, either always (`true`) or below specific breakpoints.\n\t */\n\treadonly fullscreen = input<string | boolean>();\n\n\t/**\n\t * If `true`, pressing the ESC key will close the modal.\n\t */\n\treadonly keyboard = input(true);\n\n\t/**\n\t * If `true`, the modal content will be scrollable when it exceeds the viewport height.\n\t */\n\treadonly scrollable = input<boolean>();\n\n\t/**\n\t * Specifies the size of the modal (`'sm'`, `'lg'`, `'xl'`, etc.).\n\t */\n\treadonly size = input<string>();\n\n\t/**\n\t * Semantic accent of the modal (`'primary'`, `'success'`, `'danger'`,\n\t * `'warning'`, `'info'`, or any custom token name). Applies the\n\t * `hub-modal--<variant>` class, which tints the dialog surface, its borders\n\t * and its title with that accent.\n\t */\n\treadonly variant = input<string>();\n\n\t/**\n\t * A custom CSS class to append to the modal window wrapper.\n\t */\n\treadonly windowClass = input<string>();\n\n\t/**\n\t * A custom CSS class to append to the inner modal dialog element.\n\t */\n\treadonly modalDialogClass = input<string>();\n\n\tsingleContent!: boolean;\n\n\t/**\n\t * Emits when the user dismisses the modal (e.g. via ESC, backdrop click, or custom close buttons).\n\t */\n\treadonly dismissEvent = output({ alias: 'dismiss' });\n\n\t/**\n\t * Emits and completes once the modal window is fully visible and its transition has ended.\n\t */\n\tshown = new Subject<void>();\n\n\t/**\n\t * Emits and completes once the modal is fully hidden and its DOM elements are ready to be destroyed.\n\t */\n\thidden = new Subject<void>();\n\n\t/**\n\t * Computes the CSS class for fullscreen behavior based on the `fullscreen` input.\n\t */\n\tget fullscreenClass(): string {\n\t\tconst fullscreen = this.fullscreen();\n\t\treturn fullscreen === true\n\t\t\t? ' hub-modal__dialog--fullscreen'\n\t\t\t: isString(fullscreen)\n\t\t\t\t? ` hub-modal__dialog--fullscreen-${fullscreen}-down`\n\t\t\t\t: '';\n\t}\n\n\t/**\n\t * Computes the CSS class corresponding to the requested modal placement.\n\t */\n\tget placementClass(): string {\n\t\tconst placement = this.effectivePlacement;\n\t\treturn placement && placement !== HubModalPlacement.Center ? ` hub-modal__dialog--placement-${placement}` : '';\n\t}\n\n\t/**\n\t * The placement the dialog is actually anchored to.\n\t *\n\t * A drawer with no edge is not a drawer, so asking for `offcanvas` without a placement\n\t * resolves to the end edge rather than leaving the mode inert against a centred dialog.\n\t * That is what makes opening one a single decision.\n\t */\n\tget effectivePlacement(): HubModalPlacement {\n\t\tconst placement = this.placement();\n\n\t\tif (this.offcanvas() && (!placement || placement === HubModalPlacement.Center)) {\n\t\t\treturn HubModalPlacement.End;\n\t\t}\n\n\t\treturn placement;\n\t}\n\n\t/**\n\t * Computes the CSS class applied to the modal host to control viewport anchoring.\n\t */\n\tget hostPlacementClass(): string {\n\t\tconst placement = this.effectivePlacement;\n\t\tconst placementClass = placement && placement !== HubModalPlacement.Center ? ` hub-modal--placement-${placement}` : '';\n\n\t\treturn this.offcanvas() ? `${placementClass} hub-modal--offcanvas` : placementClass;\n\t}\n\n\t/**\n\t * Computes the CSS class used to center the modal on the secondary axis, depending on its placement.\n\t */\n\tget centeredClass(): string {\n\t\tif (!this.centered()) {\n\t\t\treturn '';\n\t\t}\n\n\t\tswitch (this.placement()) {\n\t\t\tcase HubModalPlacement.Start:\n\t\t\tcase HubModalPlacement.End:\n\t\t\t\treturn ' hub-modal__dialog--centered-vertical';\n\t\t\tcase HubModalPlacement.Top:\n\t\t\tcase HubModalPlacement.Bottom:\n\t\t\t\treturn '';\n\t\t\tcase HubModalPlacement.Center:\n\t\t\tdefault:\n\t\t\t\treturn ' hub-modal__dialog--centered';\n\t\t}\n\t}\n\n\t/**\n\t * Dismisses the modal by emitting the `dismissEvent` with the provided reason.\n\t *\n\t * @param reason The reason the modal was dismissed (e.g. 'ESC', 'BACKDROP_CLICK', or custom data).\n\t */\n\tdismiss(reason: any): void {\n\t\tthis.dismissEvent.emit(reason);\n\t}\n\n\t/**\n\t * Attaches the projected content nodes into their respective structural containers\n\t * (header, body, and footer) within the modal dialog.\n\t *\n\t * Header nodes go into the heading container, which sits inside the header next to the\n\t * close button. The heading's direction, gap and alignment therefore apply to them alone,\n\t * and the button stays the header's last child whatever the caller projects.\n\t *\n\t * @param contentNodes A nested array containing nodes segmented into header, body, and footer parts.\n\t */\n\tattachContent([headerNodes, bodyNodes, footerNodes]: Node[][]): void {\n\t\tconst bodyContainer = this._bodyContainerEl()?.nativeElement;\n\t\tif (!bodyContainer) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.singleContent) {\n\t\t\tthis._appendNodes(bodyContainer, bodyNodes);\n\t\t\treturn;\n\t\t}\n\n\t\tconst headingContainer = this._headingContainerEl()?.nativeElement;\n\t\tconst footerContainer = this._footerContainerEl()?.nativeElement;\n\n\t\tif (headingContainer) {\n\t\t\tthis._appendNodes(headingContainer, headerNodes);\n\t\t}\n\t\tthis._appendNodes(bodyContainer, bodyNodes);\n\t\tif (footerContainer) {\n\t\t\tthis._appendNodes(footerContainer, footerNodes);\n\t\t}\n\t}\n\n\tngOnInit() {\n\t\tthis._elWithFocus = this._document.activeElement;\n\t\t// Defer until the window's own DOM is laid out, then run the entry transition and\n\t\t// arm the Escape / backdrop-click handlers.\n\t\t//\n\t\t// This used to wait on `NgZone.onStable`. Under `provideZonelessChangeDetection`\n\t\t// the injected zone is a `NoopNgZone` whose `onStable` never emits, so `_show()`\n\t\t// never ran: the window never got its `show` class and — far worse — never called\n\t\t// `_enableEventHandling()`, leaving every modal in a zoneless app unclosable by\n\t\t// Escape or by clicking the backdrop. `afterNextRender` is the zone-agnostic hook\n\t\t// for \"the DOM exists now\", and fires in both modes.\n\t\tafterNextRender(\n\t\t\t() => {\n\t\t\t\tthis._show();\n\t\t\t\tthis._observeResize();\n\t\t\t},\n\t\t\t{ injector: this._injector }\n\t\t);\n\t}\n\n\tngOnDestroy() {\n\t\tthis._disableEventHandling();\n\t\tthis._resizeObserver?.disconnect();\n\t\tthis._resizeObserver = null;\n\t\tthis._resizeAnimation?.cancel();\n\t}\n\n\t/**\n\t * Animates the dialog between heights instead of letting it jump.\n\t *\n\t * A modal is sized by whatever it holds, so its height is `auto` before a change and `auto`\n\t * after it. CSS transitions never fire on that — the specified value did not change, only the\n\t * content did — and `interpolate-size` does not help for the same reason: it interpolates\n\t * *to* a keyword, it does not notice a box growing underneath one. So the two heights are\n\t * measured and animated explicitly, which also keeps the behaviour identical in every\n\t * browser rather than only where `interpolate-size` has shipped.\n\t */\n\tprivate _observeResize(): void {\n\t\tconst content = this._contentEl()?.nativeElement;\n\n\t\tif (!content || typeof ResizeObserver === 'undefined') {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._resizeObserver = new ResizeObserver(() => {\n\t\t\t// While our own animation drives the box, every one of its frames comes back through\n\t\t\t// here. Reacting would cancel and restart it on each frame, which reads as a stutter\n\t\t\t// rather than a movement.\n\t\t\tif (this._resizeAnimation) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst next = content.getBoundingClientRect().height;\n\t\t\tconst previous = this._lastHeight;\n\t\t\tthis._lastHeight = next;\n\n\t\t\t// The first callback is the modal arriving, which the entry transition already owns.\n\t\t\tif (previous === null || Math.abs(next - previous) < 1 || !this._shouldAnimateResize()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._animateHeight(content, previous, next);\n\t\t});\n\n\t\tthis._resizeObserver.observe(content);\n\t}\n\n\t/** Honours both the modal's own opt-out and the reader's. */\n\tprivate _shouldAnimateResize(): boolean {\n\t\treturn this.animation() && !this._document.defaultView?.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\t}\n\n\t/**\n\t * @param content - The box being resized.\n\t * @param from - Height it is leaving, in pixels.\n\t * @param to - Height it has already reached, in pixels.\n\t */\n\tprivate _animateHeight(content: HTMLElement, from: number, to: number): void {\n\t\tconst styles = getComputedStyle(content);\n\t\tconst duration = parseFloat(styles.getPropertyValue('--hub-modal-resize-duration')) || 200;\n\t\tconst easing = styles.getPropertyValue('--hub-modal-resize-easing').trim() || 'ease-in-out';\n\n\t\tcontent.style.overflow = 'hidden';\n\n\t\tconst animation = content.animate([{ height: `${from}px` }, { height: `${to}px` }], { duration, easing });\n\t\tthis._resizeAnimation = animation;\n\n\t\tconst settle = () => {\n\t\t\tcontent.style.overflow = '';\n\n\t\t\tif (this._resizeAnimation !== animation) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._resizeAnimation = null;\n\t\t\t// The content may have moved again while this ran, so record where it truly ended:\n\t\t\t// the next change has to measure from the real height, not the one we aimed at.\n\t\t\tthis._lastHeight = content.getBoundingClientRect().height;\n\t\t};\n\n\t\tanimation.finished.then(settle).catch(settle);\n\t}\n\n\t/**\n\t * Determines the focus element, blocks further interactions, configures the exit transition context,\n\t * removes 'show' CSS classes from the modal, and restores focus back to the previously focused element.\n\t *\n\t * @returns An observable that emits when the exit transition completely finishes.\n\t */\n\thide(): Observable<any> {\n\t\tconst { nativeElement } = this._elRef;\n\t\tconst context: TransitionOptions<any> = {\n\t\t\tanimation: this.animation(),\n\t\t\trunningTransition: 'stop'\n\t\t};\n\n\t\tconst windowTransition$ = hubRunTransition(\n\t\t\tthis._zone,\n\t\t\tnativeElement,\n\t\t\t() => nativeElement.classList.remove('show'),\n\t\t\tcontext\n\t\t);\n\t\tconst dialogTransition$ = hubRunTransition(this._zone, this._dialogEl().nativeElement, () => {}, context);\n\n\t\tconst transitions$ = zip(windowTransition$, dialogTransition$);\n\t\ttransitions$.subscribe(() => {\n\t\t\tthis.hidden.next();\n\t\t\tthis.hidden.complete();\n\t\t});\n\n\t\tthis._disableEventHandling();\n\t\tthis._restoreFocus();\n\n\t\treturn transitions$;\n\t}\n\n\tprivate _show() {\n\t\tconst context: TransitionOptions<any> = {\n\t\t\tanimation: this.animation(),\n\t\t\trunningTransition: 'continue'\n\t\t};\n\n\t\tconst windowTransition$ = hubRunTransition(\n\t\t\tthis._zone,\n\t\t\tthis._elRef.nativeElement,\n\t\t\t(element: HTMLElement, animation: boolean) => {\n\t\t\t\tif (animation) {\n\t\t\t\t\treflow(element);\n\t\t\t\t}\n\t\t\t\telement.classList.add('show');\n\t\t\t},\n\t\t\tcontext\n\t\t);\n\t\tconst dialogTransition$ = hubRunTransition(this._zone, this._dialogEl().nativeElement, () => {}, context);\n\n\t\tzip(windowTransition$, dialogTransition$).subscribe(() => {\n\t\t\tthis.shown.next();\n\t\t\tthis.shown.complete();\n\t\t});\n\n\t\tthis._enableEventHandling();\n\t\tthis._setFocus();\n\t}\n\n\tprivate _enableEventHandling() {\n\t\tconst { nativeElement } = this._elRef;\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tfromEvent<KeyboardEvent>(nativeElement, 'keydown')\n\t\t\t\t.pipe(\n\t\t\t\t\ttakeUntil(this._closed$),\n\t\t\t\t\tfilter((e) => e.key === 'Escape')\n\t\t\t\t)\n\t\t\t\t.subscribe((event) => {\n\t\t\t\t\tif (this.keyboard()) {\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\tif (!event.defaultPrevented) {\n\t\t\t\t\t\t\t\tthis._zone.run(() => this.dismiss(ModalDismissReasons.ESC));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (this.backdrop() === 'static') {\n\t\t\t\t\t\tthis._bumpBackdrop();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t// We're listening to 'mousedown' and 'mouseup' to prevent modal from closing when pressing the mouse\n\t\t\t// inside the modal dialog and releasing it outside\n\t\t\tlet preventClose = false;\n\t\t\tfromEvent<MouseEvent>(this._dialogEl().nativeElement, 'mousedown')\n\t\t\t\t.pipe(\n\t\t\t\t\ttakeUntil(this._closed$),\n\t\t\t\t\ttap(() => (preventClose = false)),\n\t\t\t\t\tswitchMap(() => fromEvent<MouseEvent>(nativeElement, 'mouseup').pipe(takeUntil(this._closed$), take(1))),\n\t\t\t\t\tfilter(({ target }) => nativeElement === target)\n\t\t\t\t)\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tpreventClose = true;\n\t\t\t\t});\n\n\t\t\t// We're listening to 'click' to dismiss modal on modal window click, except when:\n\t\t\t// 1. clicking on modal dialog itself\n\t\t\t// 2. closing was prevented by mousedown/up handlers\n\t\t\t// 3. clicking on scrollbar when the viewport is too small and modal doesn't fit (click is not triggered at all)\n\t\t\tfromEvent<MouseEvent>(nativeElement, 'click')\n\t\t\t\t.pipe(takeUntil(this._closed$))\n\t\t\t\t.subscribe(({ target }) => {\n\t\t\t\t\tif (nativeElement === target) {\n\t\t\t\t\t\tconst backdrop = this.backdrop();\n\t\t\t\t\t\tif (backdrop === 'static') {\n\t\t\t\t\t\t\tthis._bumpBackdrop();\n\t\t\t\t\t\t} else if (backdrop === true && !preventClose) {\n\t\t\t\t\t\t\tthis._zone.run(() => this.dismiss(ModalDismissReasons.BACKDROP_CLICK));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tpreventClose = false;\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate _disableEventHandling() {\n\t\tthis._closed$.next();\n\t}\n\n\tprivate _setFocus() {\n\t\tconst { nativeElement } = this._elRef;\n\t\tif (!nativeElement.contains(document.activeElement)) {\n\t\t\tconst autoFocusable = nativeElement.querySelector(`[hubAutofocus]`) as HTMLElement;\n\n\t\t\t// The dialog's own dismiss button is skipped when choosing where focus\n\t\t\t// lands. It is the first focusable element in the DOM, so it used to take\n\t\t\t// the focus on every open: a destructive confirm opened with the caret on\n\t\t\t// «cancel this dialog» rather than on what it asks, and the browser drew its\n\t\t\t// default focus ring over the header. Whoever wants it focused can still say\n\t\t\t// so with `hubAutofocus`, and a dialog whose only focusable element is the\n\t\t\t// close button falls through to the dialog itself, which carries\n\t\t\t// `tabindex=\"-1\"` for exactly this.\n\t\t\tconst closeButton = this._closeButtonEl()?.nativeElement ?? null;\n\t\t\tconst firstFocusable = getFocusableBoundaryElements(nativeElement).find((element) => element !== closeButton);\n\n\t\t\tconst elementToFocus = autoFocusable || firstFocusable || nativeElement;\n\t\t\telementToFocus.focus();\n\t\t}\n\t}\n\n\tprivate _restoreFocus() {\n\t\tconst body = this._document.body;\n\t\tconst elWithFocus = this._elWithFocus;\n\n\t\tlet elementToFocus: HTMLElement;\n\t\tif (elWithFocus instanceof HTMLElement && body.contains(elWithFocus)) {\n\t\t\telementToFocus = elWithFocus;\n\t\t} else {\n\t\t\telementToFocus = body as unknown as HTMLElement;\n\t\t}\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tsetTimeout(() => elementToFocus.focus());\n\t\t\tthis._elWithFocus = null;\n\t\t});\n\t}\n\n\tprivate _bumpBackdrop() {\n\t\tif (this.backdrop() === 'static') {\n\t\t\thubRunTransition(\n\t\t\t\tthis._zone,\n\t\t\t\tthis._elRef.nativeElement,\n\t\t\t\t({ classList }) => {\n\t\t\t\t\tclassList.add('hub-modal--static');\n\t\t\t\t\treturn () => classList.remove('hub-modal--static');\n\t\t\t\t},\n\t\t\t\t{ animation: this.animation(), runningTransition: 'continue' }\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Moves each node, in order, to the end of a slot container. `appendChild` takes a node out\n\t * of wherever it is, so the caller's content leaves its original host as it lands here.\n\t *\n\t * @param container The slot element receiving the nodes.\n\t * @param nodes The nodes collected for that slot.\n\t */\n\tprivate _appendNodes(container: HTMLElement, nodes: Node[]): void {\n\t\tnodes.forEach((node) => container.appendChild(node));\n\t}\n}\n","import { DOCUMENT, Location } from '@angular/common';\nimport {\n\tApplicationRef,\n\tComponentRef,\n\tcreateComponent,\n\tDestroyRef,\n\tEnvironmentInjector,\n\tEventEmitter,\n\tinject,\n\tInjectable,\n\tInjector,\n\tNgZone,\n\tTemplateRef,\n\tType\n} from '@angular/core';\nimport { ContentRef, hubFocusTrap, isDefined, isString, ScrollBar } from 'ng-hub-ui-utils';\nimport { Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { HubModalBackdrop } from './modal-backdrop';\nimport { HubModalOptions, HubModalUpdatableOptions } from './modal-config';\nimport { ModalDismissReasons } from './modal-dismiss-reasons';\nimport { HUB_MODAL_DATA, HubActiveModal, HubModalRef } from './modal-ref';\nimport { HubModalWindow } from './modal-window';\n\n/**\n * The URL without its fragment, which is what decides whether the screen changed.\n *\n * An anchor moves the reader inside the screen the dialog belongs to; it does not replace it. A\n * sidebar that writes the anchor of the section on screen as the reader scrolls is ordinary, and\n * without this it would close every dialog a moment after it opened.\n */\nfunction withoutFragment(url: string): string {\n\tconst fragment = url.indexOf('#');\n\treturn fragment === -1 ? url : url.slice(0, fragment);\n}\n\n/**\n * A service that manages the stack of currently active modal windows.\n * It is responsible for creating, attaching, and orchestrating the rendering\n * of the modal dialogue, its backdrop, and its content.\n */\n@Injectable({ providedIn: 'root' })\nexport class HubModalStack {\n\tprivate _applicationRef = inject(ApplicationRef);\n\tprivate _injector = inject(Injector);\n\tprivate _environmentInjector = inject(EnvironmentInjector);\n\tprivate _document = inject(DOCUMENT);\n\tprivate _scrollBar = inject(ScrollBar);\n\n\t// Optional: the library has to work in an application with no router, where `Location`\n\t// has no strategy to read from and is not provided at all.\n\tprivate _location = inject(Location, { optional: true });\n\tprivate _destroyRef = inject(DestroyRef);\n\n\tprivate _activeWindowCmptHasChanged = new Subject<void>();\n\tprivate _ariaHiddenValues: Map<Element, string | null> = new Map();\n\tprivate _scrollBarRestoreFn: null | (() => void) = null;\n\t/** How far a dialog and its backdrop are lifted over the level below: one each. */\n\tprivate static readonly ZINDEX_STEP = 2;\n\n\tprivate _modalRefs: HubModalRef[] = [];\n\tprivate _closeOnNavigation = new WeakSet<HubModalRef>();\n\tprivate _watchingUrl = false;\n\tprivate _windowCmpts: ComponentRef<HubModalWindow>[] = [];\n\tprivate _activeInstances: EventEmitter<HubModalRef[]> = new EventEmitter();\n\n\tconstructor() {\n\t\tconst ngZone = inject(NgZone);\n\n\t\t// Trap focus on active WindowCmpt\n\t\tthis._activeWindowCmptHasChanged.subscribe(() => {\n\t\t\tif (this._windowCmpts.length) {\n\t\t\t\tconst activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1];\n\t\t\t\thubFocusTrap(ngZone, activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged);\n\t\t\t\tthis._revertAriaHidden();\n\t\t\t\tthis._setAriaHidden(activeWindowCmpt.location.nativeElement);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _restoreScrollBar() {\n\t\tconst scrollBarRestoreFn = this._scrollBarRestoreFn;\n\t\tif (scrollBarRestoreFn) {\n\t\t\tthis._scrollBarRestoreFn = null;\n\t\t\tscrollBarRestoreFn();\n\t\t}\n\t}\n\n\tprivate _hideScrollBar() {\n\t\tif (!this._scrollBarRestoreFn) {\n\t\t\tthis._scrollBarRestoreFn = this._scrollBar.hide();\n\t\t}\n\t}\n\n\t/**\n\t * Opens a new modal window configured with the provided options.\n\t *\n\t * @param contentInjector The dependency injector to be used for the modal content component.\n\t * @param content The content to display inside the modal. Can be a component class, a template reference, or a string.\n\t * @param options Configuration options that dictate how the modal is rendered and behaves.\n\t * @returns An instance of `HubModalRef` which can be used to control the modal or subscribe to its events.\n\t * @throws Error if the specified container element is not found in the DOM.\n\t */\n\topen(contentInjector: Injector, content: any, options: HubModalOptions): HubModalRef {\n\t\tconst containerEl =\n\t\t\toptions.container instanceof HTMLElement\n\t\t\t\t? options.container\n\t\t\t\t: isDefined(options.container)\n\t\t\t\t\t? this._document.querySelector(options.container!)\n\t\t\t\t\t: this._document.body;\n\n\t\tif (!containerEl) {\n\t\t\tthrow new Error(`The specified modal container \"${options.container || 'body'}\" was not found in the DOM.`);\n\t\t}\n\n\t\tthis._hideScrollBar();\n\n\t\tconst activeModal = new HubActiveModal(options.data ?? null);\n\n\t\tcontentInjector = options.injector || contentInjector;\n\t\tconst environmentInjector = contentInjector.get(EnvironmentInjector, null) || this._environmentInjector;\n\t\tconst contentRef = this._getContentRef(contentInjector, environmentInjector, content, activeModal, options);\n\n\t\t// Read before the new reference joins them: it is how many dialogs this one opens over.\n\t\tconst level = this._modalRefs.length;\n\n\t\tconst backdropCmptRef: ComponentRef<HubModalBackdrop> | undefined =\n\t\t\toptions.backdrop !== false ? this._attachBackdrop(containerEl) : undefined;\n\t\tconst windowCmptRef: ComponentRef<HubModalWindow> = this._attachWindowComponent(containerEl, contentRef.nodes, options);\n\n\t\tthis._stack(level, windowCmptRef.location.nativeElement, backdropCmptRef?.location.nativeElement);\n\t\tconst hubModalRef: HubModalRef = new HubModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);\n\n\t\tthis._registerModalRef(hubModalRef);\n\t\tthis._registerWindowCmpt(windowCmptRef);\n\n\t\tif (options.closeOnNavigation !== false) {\n\t\t\tthis._closeOnNavigation.add(hubModalRef);\n\t\t\tthis._watchUrlChanges();\n\t\t}\n\n\t\t// We have to cleanup DOM after the last modal when BOTH 'hidden' was emitted and 'result' promise was resolved:\n\t\t// - with animations OFF, 'hidden' emits synchronously, then 'result' is resolved asynchronously\n\t\t// - with animations ON, 'result' is resolved asynchronously, then 'hidden' emits asynchronously\n\t\thubModalRef.hidden.pipe(take(1)).subscribe(() =>\n\t\t\tPromise.resolve(true).then(() => {\n\t\t\t\tif (!this._modalRefs.length) {\n\t\t\t\t\tthis._document.body.classList.remove('hub-modal-open');\n\t\t\t\t\tthis._restoreScrollBar();\n\t\t\t\t\tthis._revertAriaHidden();\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tactiveModal.close = (result: any) => {\n\t\t\thubModalRef.close(result);\n\t\t};\n\t\tactiveModal.dismiss = (reason: any) => {\n\t\t\thubModalRef.dismiss(reason);\n\t\t};\n\n\t\tactiveModal.update = (options: HubModalUpdatableOptions) => {\n\t\t\thubModalRef.update(options);\n\t\t};\n\n\t\thubModalRef.update(options);\n\t\tif (this._modalRefs.length === 1) {\n\t\t\tthis._document.body.classList.add('hub-modal-open');\n\t\t}\n\n\t\tif (backdropCmptRef && backdropCmptRef.instance) {\n\t\t\tbackdropCmptRef.changeDetectorRef.detectChanges();\n\t\t}\n\t\twindowCmptRef.changeDetectorRef.detectChanges();\n\t\treturn hubModalRef;\n\t}\n\n\t/**\n\t * Allows observing the array of active modal instances.\n\t *\n\t * @returns An event emitter that streams changes to the active modal references.\n\t */\n\tget activeInstances() {\n\t\treturn this._activeInstances;\n\t}\n\n\t/**\n\t * Dismisses all currently open modal windows.\n\t *\n\t * @param reason Optional reason to pass to the dismissal routines of the active modals.\n\t */\n\tdismissAll(reason?: any) {\n\t\tthis._modalRefs.forEach((hubModalRef) => hubModalRef.dismiss(reason));\n\t}\n\n\t/**\n\t * Checks whether there are any currently open modal windows.\n\t *\n\t * @returns `true` if at least one modal is active, `false` otherwise.\n\t */\n\thasOpenModals(): boolean {\n\t\treturn this._modalRefs.length > 0;\n\t}\n\n\t/**\n\t * Lifts a dialog and its backdrop above the ones already open.\n\t *\n\t * Every dialog used to be painted at the same height, and so was every backdrop, so the\n\t * second backdrop landed *under* the first dialog: the new one floated over a page that\n\t * was not dimmed, and what it covered still looked reachable. Two steps per level keeps\n\t * each backdrop between the dialog below it and its own.\n\t *\n\t * The first dialog is left untouched on purpose. Writing the value inline would override\n\t * a `--hub-modal-zindex` the application themed, and at level zero there is nothing to\n\t * lift it above.\n\t */\n\tprivate _stack(level: number, windowEl: HTMLElement, backdropEl?: HTMLElement) {\n\t\tif (level === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lift = level * HubModalStack.ZINDEX_STEP;\n\t\tconst base = 'var(--hub-modal-zindex-base, var(--hub-sys-zindex-modal, 1055))';\n\n\t\twindowEl.style.setProperty('--hub-modal-zindex', `calc(${base} + ${lift})`);\n\t\t// Set on the element rather than left to the `:root` rule that derives it: a custom\n\t\t// property is substituted where it is declared, so the derived value inherits already\n\t\t// computed and never sees the window's own.\n\t\tbackdropEl?.style.setProperty('--hub-modal-backdrop-zindex', `calc(${base} + ${lift - 1})`);\n\t}\n\n\tprivate _attachBackdrop(containerEl: Element): ComponentRef<HubModalBackdrop> {\n\t\tlet backdropCmptRef = createComponent(HubModalBackdrop, {\n\t\t\tenvironmentInjector: this._applicationRef.injector,\n\t\t\telementInjector: this._injector\n\t\t});\n\t\tthis._applicationRef.attachView(backdropCmptRef.hostView);\n\t\tcontainerEl.appendChild(backdropCmptRef.location.nativeElement);\n\t\treturn backdropCmptRef;\n\t}\n\n\tprivate _attachWindowComponent(\n\t\tcontainerEl: Element,\n\t\tcontentNodes: Node[][],\n\t\toptions: HubModalOptions\n\t): ComponentRef<HubModalWindow> {\n\t\tconst singleContent = !options.headerSelector && !options.footerSelector;\n\t\tlet windowCmptRef = createComponent(HubModalWindow, {\n\t\t\tenvironmentInjector: this._applicationRef.injector,\n\t\t\telementInjector: this._injector\n\t\t});\n\n\t\tObject.assign(windowCmptRef.instance, { singleContent });\n\n\t\tthis._applicationRef.attachView(windowCmptRef.hostView);\n\t\tcontainerEl.appendChild(windowCmptRef.location.nativeElement);\n\t\twindowCmptRef.changeDetectorRef.detectChanges();\n\t\twindowCmptRef.instance.attachContent(contentNodes);\n\t\treturn windowCmptRef;\n\t}\n\n\tprivate _getContentRef(\n\t\tcontentInjector: Injector,\n\t\tenvironmentInjector: EnvironmentInjector,\n\t\tcontent: Type<any> | TemplateRef<any> | string,\n\t\tactiveModal: HubActiveModal,\n\t\toptions: HubModalOptions\n\t): ContentRef {\n\t\tif (!content) {\n\t\t\treturn new ContentRef([]);\n\t\t} else if (content instanceof TemplateRef) {\n\t\t\treturn this._createFromTemplateRef(content, activeModal, options);\n\t\t} else if (isString(content)) {\n\t\t\treturn this._createFromString(content);\n\t\t} else {\n\t\t\treturn this._createFromComponent(contentInjector, environmentInjector, content, activeModal, options);\n\t\t}\n\t}\n\n\tprivate _createFromTemplateRef(\n\t\ttemplateRef: TemplateRef<any>,\n\t\tactiveModal: HubActiveModal,\n\t\toptions: HubModalOptions\n\t): ContentRef {\n\t\tconst context = {\n\t\t\t$implicit: activeModal,\n\t\t\tclose(result: any) {\n\t\t\t\tactiveModal.close(result);\n\t\t\t},\n\t\t\tdismiss(reason: any) {\n\t\t\t\tactiveModal.dismiss(reason);\n\t\t\t}\n\t\t};\n\t\tconst viewRef = templateRef.createEmbeddedView(context);\n\t\tthis._applicationRef.attachView(viewRef);\n\n\t\tconst containerNode = document.createElement('ng-container');\n\t\tcontainerNode.append(...viewRef.rootNodes);\n\n\t\tthis._addDismissEventListener(containerNode, context as any, options);\n\t\tthis._addCloseEventListener(containerNode, context as any, options);\n\n\t\treturn new ContentRef(splitIntoSlots(containerNode, options), viewRef);\n\t}\n\n\tprivate _createFromString(content: string): ContentRef {\n\t\tconst component = this._document.createTextNode(`${content}`);\n\t\t// Three slots, always: `attachContent` destructures `[header, body, footer]`, and\n\t\t// `splitIntoSlots` — the path every other kind of content takes — returns three.\n\t\t// Returning one put the text in the HEADER slot and left the body `undefined`, so\n\t\t// appending it threw before the window could arm its Escape handler: a string modal\n\t\t// opened blank and could not be closed with the keyboard.\n\t\treturn new ContentRef([[], [component], []]);\n\t}\n\n\tprivate _createFromComponent(\n\t\tcontentInjector: Injector,\n\t\tenvironmentInjector: EnvironmentInjector,\n\t\tcomponentType: Type<any>,\n\t\tcontext: HubActiveModal,\n\t\toptions: HubModalOptions\n\t): ContentRef {\n\t\tconst elementInjector = Injector.create({\n\t\t\tproviders: [\n\t\t\t\t{ provide: HubActiveModal, useValue: context },\n\t\t\t\t{ provide: HUB_MODAL_DATA, useValue: options.data ?? null }\n\t\t\t],\n\t\t\tparent: contentInjector\n\t\t});\n\t\tconst componentRef = createComponent(componentType, {\n\t\t\tenvironmentInjector,\n\t\t\telementInjector\n\t\t});\n\n\t\t/**\n\t\t * @deprecated Since 22.3.0. Kept for one release for backward compatibility.\n\t\t * Prefer reading the payload through the typed `inject(HUB_MODAL_DATA)` token or\n\t\t * `inject(HubActiveModal).data`. This untyped monkey-patch of a `data` field on the\n\t\t * component instance will be removed in a future major.\n\t\t */\n\t\tif (options.data) {\n\t\t\tObject.assign(componentRef.instance, {\n\t\t\t\tdata: options.data\n\t\t\t});\n\t\t}\n\n\t\tconst componentNativeEl: HTMLElement = componentRef.location.nativeElement;\n\t\tthis._applicationRef.attachView(componentRef.hostView);\n\n\t\tthis._addDismissEventListener(componentNativeEl, context, options);\n\t\tthis._addCloseEventListener(componentNativeEl, context as any, options);\n\n\t\t// The component host is only a query root: `splitIntoSlots` hands its children to the\n\t\t// window and the host itself never enters the document, so anything set on it is lost.\n\t\t// `scrollable` is delivered by the dialog instead, in `HubModalWindow`.\n\t\treturn new ContentRef(splitIntoSlots(componentNativeEl, options), componentRef.hostView, componentRef);\n\t}\n\n\tprivate _setAriaHidden(element: Element) {\n\t\tconst parent = element.parentElement;\n\t\tif (parent && element !== this._document.body) {\n\t\t\tArray.from(parent.children).forEach((sibling) => {\n\t\t\t\tif (sibling !== element && sibling.nodeName !== 'SCRIPT') {\n\t\t\t\t\tthis._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden'));\n\t\t\t\t\tsibling.setAttribute('aria-hidden', 'true');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._setAriaHidden(parent);\n\t\t}\n\t}\n\n\tprivate _revertAriaHidden() {\n\t\tthis._ariaHiddenValues.forEach((value, element) => {\n\t\t\tif (value) {\n\t\t\t\telement.setAttribute('aria-hidden', value);\n\t\t\t} else {\n\t\t\t\telement.removeAttribute('aria-hidden');\n\t\t\t}\n\t\t});\n\t\tthis._ariaHiddenValues.clear();\n\t}\n\n\t/**\n\t * Starts listening for URL changes, so an open dialog does not outlive the screen that\n\t * opened it.\n\t *\n\t * `Location.onUrlChange` rather than `Location.subscribe`: the latter only hears the browser's\n\t * own back and forward, and the navigation that strands a dialog is usually a link the reader\n\t * clicked, which the router resolves without any of that.\n\t *\n\t * One listener for the whole stack, registered once and dropped only when the application is\n\t * torn down. One per dialog is what this looked like first, and it does not work: `Location`\n\t * notifies with a `forEach` over the live array, and a dialog that unsubscribes while being\n\t * dismissed shifts the indices under that walk, so the listener sitting after it is skipped —\n\t * silently, and not necessarily one of ours.\n\t */\n\tprivate _watchUrlChanges() {\n\t\tif (this._watchingUrl || !this._location) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._watchingUrl = true;\n\t\tlet previous = withoutFragment(this._location.path(true));\n\n\t\tthis._destroyRef.onDestroy(\n\t\t\tthis._location.onUrlChange((url) => {\n\t\t\t\tconst next = withoutFragment(url);\n\t\t\t\tif (next === previous) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tprevious = next;\n\t\t\t\tthis._dismissOnNavigation();\n\t\t\t})\n\t\t);\n\t}\n\n\t/**\n\t * Dismisses every open dialog that did not opt out of closing on navigation.\n\t *\n\t * Walks a copy: a dismissal takes its own reference out of `_modalRefs` as it goes.\n\t */\n\tprivate _dismissOnNavigation() {\n\t\tfor (const hubModalRef of [...this._modalRefs]) {\n\t\t\tif (this._closeOnNavigation.has(hubModalRef)) {\n\t\t\t\thubModalRef.dismiss(ModalDismissReasons.NAVIGATION);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _registerModalRef(hubModalRef: HubModalRef) {\n\t\tconst unregisterModalRef = () => {\n\t\t\tconst index = this._modalRefs.indexOf(hubModalRef);\n\t\t\tif (index > -1) {\n\t\t\t\tthis._modalRefs.splice(index, 1);\n\t\t\t\tthis._activeInstances.emit(this._modalRefs);\n\t\t\t}\n\t\t};\n\t\tthis._modalRefs.push(hubModalRef);\n\t\tthis._activeInstances.emit(this._modalRefs);\n\t\thubModalRef.result.then(unregisterModalRef, unregisterModalRef);\n\t}\n\n\tprivate _registerWindowCmpt(hubWindowCmpt: ComponentRef<HubModalWindow>) {\n\t\tthis._windowCmpts.push(hubWindowCmpt);\n\t\tthis._activeWindowCmptHasChanged.next();\n\n\t\thubWindowCmpt.onDestroy(() => {\n\t\t\tconst index = this._windowCmpts.indexOf(hubWindowCmpt);\n\t\t\tif (index > -1) {\n\t\t\t\tthis._windowCmpts.splice(index, 1);\n\t\t\t\tthis._activeWindowCmptHasChanged.next();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Attaches click event listeners to elements within a container based on a specified dismiss selector to dismiss a modal.\n\t *\n\t * @param {HTMLElement} container - The `container` parameter is an HTMLElement that represents the DOM element which contains the\n\t * modal content.\n\t * @param {HubActiveModal} context - The `context` parameter in the `_addDismissEventListener` function refers to the active modal\n\t * instance that is being displayed. It is used to call the `dismiss` method on the modal instance when a dismissible element is\n\t * clicked.\n\t * @param {HubModalOptions} options - The `options` parameter is an object that contains configuration options for the modal. It\n\t * may include properties such as `dismissSelector`, which is used to specify a CSS selector for elements that, when clicked, will\n\t * dismiss the modal by calling the `dismiss` method on the `context` object.\n\t */\n\tprivate _addDismissEventListener(container: HTMLElement, context: HubActiveModal, options: HubModalOptions) {\n\t\tif (options.dismissSelector) {\n\t\t\tconst dismissaable: NodeListOf<Element> = container.querySelectorAll(options.dismissSelector);\n\t\t\tfor (const item of Array.from(dismissaable)) {\n\t\t\t\titem.addEventListener('click', () => context.dismiss());\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Attaches click event listeners to elements matching a specified selector to close a modal window.\n\t *\n\t * @param {HTMLElement} container - The `container` parameter is an HTMLElement that represents the DOM element which contains the\n\t * modal content.\n\t * @param {HubActiveModal} context - The `context` parameter in the `_addCloseEventListener` function is of type `HubActiveModal`.\n\t * It is used to reference the active modal instance within the function and call the `close()` method on it when a close event is\n\t * triggered.\n\t * @param {HubModalOptions} options - The `options` parameter is an object that contains configuration options for the modal. It\n\t * may include properties such as `closeSelector`, which is used to specify the selector for elements that can trigger the modal\n\t * to close when clicked.\n\t */\n\tprivate _addCloseEventListener(container: HTMLElement, context: HubActiveModal, options: HubModalOptions) {\n\t\tif (options.closeSelector) {\n\t\t\tconst dismissaable: NodeListOf<Element> = container.querySelectorAll(options.closeSelector);\n\t\t\tfor (const item of Array.from(dismissaable)) {\n\t\t\t\titem.addEventListener('click', () => context.close());\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Split a container into the modal's three slots, taking nothing out of the document twice.\n *\n * Order is load-bearing and used not to be. The old code read the body as\n * `Array.from(container.childNodes)` **between** the header and the footer extractions, so\n * the footer's marker element was still a child when the body was captured: the body ended\n * up carrying an emptied marker `<div>` that the footer had already stripped.\n *\n * Every declared slot is taken out first; what nobody claimed is the body's, and it follows\n * whatever an explicit `bodySelector` matched. That is what makes the new option safe to add\n * to content that already works — naming the body can reorder it, never lose it.\n */\nfunction splitIntoSlots(\n\tcontainer: HTMLElement,\n\toptions: { headerSelector?: string; bodySelector?: string; footerSelector?: string }\n): Node[][] {\n\tconst header = options.headerSelector ? extractAndRemoveNodesBySelector(container, options.headerSelector) : [];\n\tconst footer = options.footerSelector ? extractAndRemoveNodesBySelector(container, options.footerSelector) : [];\n\tconst declaredBody = options.bodySelector ? extractAndRemoveNodesBySelector(container, options.bodySelector) : [];\n\n\t// Whatever is left belongs to the body, so nothing a consumer wrote can go missing.\n\tconst remainder = Array.from(container.childNodes);\n\n\treturn [header, [...declaredBody, ...remainder], footer];\n}\n\n/**\n * Extracts the children of every element matching `selector` inside `container` and takes those\n * matched elements out of the DOM, so the caller can hand the children to another slot without\n * the marker element travelling with them.\n *\n * @param {HTMLElement} container - Element searched for the selector.\n * @param {string} selector - CSS selector identifying the slot markers.\n *\n * @returns The children of every matched element, in document order.\n */\nfunction extractAndRemoveNodesBySelector(container: HTMLElement, selector: string): Array<Node> {\n\tconst containerNodes = container.querySelectorAll(selector);\n\n\tconst nodes = Array.from(containerNodes).reduce((acc, c) => {\n\t\treturn [...acc, ...Array.from(c.childNodes)];\n\t}, [] as Array<Node>);\n\n\tArray.from(containerNodes).forEach((node) => node.remove());\n\treturn nodes;\n}\n","import { inject, Injectable, Injector, TemplateRef, Type } from '@angular/core';\n\nimport { HubModalConfig, HubModalOptions } from './modal-config';\nimport { HubModalRef } from './modal-ref';\nimport { HubModalStack } from './modal-stack';\n\n/**\n * A service for opening modal windows.\n *\n * Creating a modal is straightforward: create a component or a template and pass it as an argument to\n * the `.open()` method.\n */\n@Injectable({ providedIn: 'root' })\nexport class HubModal {\n\tprivate _injector = inject(Injector);\n\tprivate _modalStack = inject(HubModalStack);\n\tprivate _config = inject(HubModalConfig);\n\n\t/**\n\t * Opens a new modal window with the specified content and supplied options.\n\t *\n\t * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,\n\t * then instances of those components can be injected with an instance of the `HubActiveModal` class. You can then\n\t * use `HubActiveModal` methods to close / dismiss modals from \"inside\" of your component.\n\t *\n\t * Also see the [`HubModalOptions`](#/components/modal/api#HubModalOptions) for the list of supported options.\n\t *\n\t * Generics: `C` is the content component type (inferred from the class you pass,\n\t * so `componentInstance` is typed without casts), `R` is the result type flowing\n\t * through `close()` / `result` / `closed`, and `D` types the `options.data`\n\t * payload (paired with `HubActiveModal<D>` / `HUB_MODAL_DATA` on the inside).\n\t */\n\topen<C = any, R = any, D = unknown>(\n\t\tcontent: Type<C> | TemplateRef<any> | string,\n\t\toptions: HubModalOptions<D> = {}\n\t): HubModalRef<C, R> {\n\t\tconst combinedOptions = {\n\t\t\t...this._config,\n\t\t\tanimation: this._config.animation,\n\t\t\t...options\n\t\t};\n\t\treturn this._modalStack.open(this._injector, content, combinedOptions) as HubModalRef<C, R>;\n\t}\n\n\t/**\n\t * Returns an observable that holds the active modal instances.\n\t */\n\tget activeInstances() {\n\t\treturn this._modalStack.activeInstances;\n\t}\n\n\t/**\n\t * Dismisses all currently displayed modal windows with the supplied reason.\n\t *\n\t * @since 3.1.0\n\t */\n\tdismissAll(reason?: any) {\n\t\tthis._modalStack.dismissAll(reason);\n\t}\n\n\t/**\n\t * Indicates if there are currently any open modal windows in the application.\n\t *\n\t * @since 3.3.0\n\t */\n\thasOpenModals(): boolean {\n\t\treturn this._modalStack.hasOpenModals();\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport { HubModal } from './modal';\nexport { HubModal } from './modal';\nexport { HubModalConfig } from './modal-config';\nexport type { HubModalOptions, HubModalUpdatableOptions } from './modal-config';\nexport { ModalDismissReasons } from './modal-dismiss-reasons';\nexport { HubModalPlacement } from './modal-placement';\nexport { HUB_MODAL_DATA, HubActiveModal, HubModalRef } from './modal-ref';\n\n/**\n * Backward-compatibility module kept for NgModule-based applications.\n *\n * @deprecated Inject `HubModal` directly. It is `providedIn: 'root'`, so this module adds\n * nothing an application does not already have; importing it only creates a redundant second\n * instance in that injector, delegating to the same root `HubModalStack` and `HubModalConfig`.\n * Scheduled for removal in **23.0.0**.\n */\n@NgModule({ providers: [HubModal] })\nexport class HubModalModule {}\n","/*\n * Public API Surface of modal\n */\nexport {\n\tModalDismissReasons,\n\tHUB_MODAL_DATA,\n\tHubActiveModal,\n\tHubModal,\n\tHubModalConfig,\n\tHubModalModule,\n\tHubModalPlacement,\n\tHubModalRef\n} from './lib/modal.module';\nexport type { HubModalOptions, HubModalUpdatableOptions } from './lib/modal.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "ng-hub-ui-modal",
3
- "version": "22.14.2",
3
+ "version": "22.14.4",
4
4
  "peerDependencies": {
5
- "@angular/common": ">=18.0.0",
6
- "@angular/core": ">=18.0.0",
5
+ "@angular/common": ">=17.3.0",
6
+ "@angular/core": ">=17.3.0",
7
7
  "ng-hub-ui-ds": ">=22.0.0",
8
8
  "ng-hub-ui-utils": ">=22.0.0"
9
9
  },
@@ -38,7 +38,7 @@
38
38
  "type": "git",
39
39
  "url": "git+https://github.com/hub-env/ng-hub-ui-modal.git"
40
40
  },
41
- "author": "Carlos Morcillo <carlos.morcillo@me.com> (https://www.carlosmorcillo.com)",
41
+ "author": "Carlos Morcillo Fernández <carlos.morcillo@me.com> (https://www.carlosmorcillo.com)",
42
42
  "license": "MIT",
43
43
  "bugs": {
44
44
  "url": "https://github.com/hub-env/hub-ui/issues"