ng-hub-ui-panels 22.1.0 → 22.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -760,7 +760,7 @@ class PanelsComponent {
760
760
  useExisting: forwardRef(() => PanelsComponent),
761
761
  multi: true
762
762
  }
763
- ], viewQueries: [{ propertyName: "navScroller", first: true, predicate: ["navScroller"], descendants: true, isSignal: true }, { propertyName: "prevBtn", first: true, predicate: ["prevBtn"], descendants: true, isSignal: true }, { propertyName: "nextBtn", first: true, predicate: ["nextBtn"], descendants: true, isSignal: true }, { propertyName: "contentRoot", first: true, predicate: ["contentRoot"], descendants: true, isSignal: true }, { propertyName: "multiplePaneHosts", predicate: ["multiplePaneHost"], descendants: true, isSignal: true }, { propertyName: "multipleBlocks", predicate: ["multipleBlock"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (!isAccordionView() && !isCardView()) {\n\t@if (multiple()) {\n\t\t<div class=\"hub-panels__multiple-layout\">\n\t\t\t@for (group of multipleHeaderGroups(); track group.activePanel ?? group.headers[0]) {\n\t\t\t\t<div\n\t\t\t\t\t#multipleBlock\n\t\t\t\t\tclass=\"hub-panels hub-panels__multiple-block\"\n\t\t\t\t\t[class.hub-panels--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t[class.hub-panels--pills]=\"type() === 'pills'\"\n\t\t\t\t\t[class.hub-panels--vertical]=\"vertical()\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"hub-panels__header\">\n\t\t\t\t\t\t<ul\n\t\t\t\t\t\t\tclass=\"hub-panels__nav\"\n\t\t\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"config.ariaLabel\"\n\t\t\t\t\t\t\t[attr.aria-orientation]=\"vertical() ? 'vertical' : null\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--pills]=\"type() === 'pills'\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--vertical]=\"vertical()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--justified]=\"justified()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@for (panel of group.headers; track panel) {\n\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-item\"\n\t\t\t\t\t\t\t\t\t[class]=\"panel.customClass()\"\n\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-item--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-item--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-link\"\n\t\t\t\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\t\t\t\t[id]=\"panel.id() + '-link'\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"panel.disabled() || formDisabled()\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-controls]=\"panel.id()\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t\t[attr.tabindex]=\"panel.active() || (!activePanel() && panelIndex(panel) === 0) ? null : -1\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"selectPanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t(keydown)=\"onPanelKeydown($event, panelIndex(panel))\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t@if (panel.headingRef(); as headingRef) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingRef\" />\n\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t{{ panel.heading() }}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (panel.removable()) {\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__remove-btn\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); removePanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t\t\t>&times;</span\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t@if (!justified() && type() !== 'pills' && !vertical()) {\n\t\t\t\t\t\t\t<div class=\"hub-panels__spacer\"></div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t@if (group.activePanel) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"hub-panels__content\"\n\t\t\t\t\t\t\t[class.hub-panels__content--pills]=\"type() === 'pills'\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t#multiplePaneHost\n\t\t\t\t\t\t\t\tclass=\"hub-panels__multiple-pane-host\"\n\t\t\t\t\t\t\t\t[attr.data-panel-id]=\"group.activePanel.id()\"\n\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t} @else {\n\t\t<div class=\"hub-panels__header\">\n\t\t\t@if (scrollable() && !backwardIsDisabled()) {\n\t\t\t\t<button\n\t\t\t\t\t#prevBtn\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-panels__scroll-btn hub-panels__scroll-btn--backward\"\n\t\t\t\t\t[attr.aria-label]=\"config.scrollBackwardAriaLabel\"\n\t\t\t\t\t(click)=\"navBackward()\"\n\t\t\t\t></button>\n\t\t\t}\n\n\t\t\t<div #navScroller class=\"hub-panels__nav-scroller\" (scroll)=\"onScroll()\">\n\t\t\t\t<ul\n\t\t\t\t\tclass=\"hub-panels__nav\"\n\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\t[attr.aria-label]=\"config.ariaLabel\"\n\t\t\t\t\t[attr.aria-orientation]=\"vertical() ? 'vertical' : null\"\n\t\t\t\t\t[class.hub-panels__nav--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t[class.hub-panels__nav--pills]=\"type() === 'pills'\"\n\t\t\t\t\t[class.hub-panels__nav--vertical]=\"vertical()\"\n\t\t\t\t\t[class.hub-panels__nav--justified]=\"justified()\"\n\t\t\t\t>\n\t\t\t\t\t@for (panel of panels(); track panel; let index = $index) {\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\tclass=\"hub-panels__nav-item\"\n\t\t\t\t\t\t\t[class]=\"panel.customClass()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav-item--active]=\"panel.active()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav-item--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-link\"\n\t\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\t\t[id]=\"panel.id() + '-link'\"\n\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t[disabled]=\"panel.disabled() || formDisabled()\"\n\t\t\t\t\t\t\t\t[attr.aria-controls]=\"panel.id()\"\n\t\t\t\t\t\t\t\t[attr.aria-selected]=\"panel.active()\"\n\t\t\t\t\t\t\t\t[attr.tabindex]=\"panel.active() || (!activePanel() && index === 0) ? null : -1\"\n\t\t\t\t\t\t\t\t(click)=\"selectPanel(panel)\"\n\t\t\t\t\t\t\t\t(keydown)=\"onPanelKeydown($event, index)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (panel.headingRef(); as headingRef) {\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingRef\" />\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t{{ panel.heading() }}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@if (panel.removable()) {\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__remove-btn\"\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); removePanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t>&times;</span\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t\t@if (!justified() && type() !== 'pills') {\n\t\t\t\t\t<div class=\"hub-panels__spacer\"></div>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t@if (scrollable() && !forwardIsDisabled()) {\n\t\t\t\t<button\n\t\t\t\t\t#nextBtn\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-panels__scroll-btn hub-panels__scroll-btn--forward\"\n\t\t\t\t\t[attr.aria-label]=\"config.scrollForwardAriaLabel\"\n\t\t\t\t\t(click)=\"navForward()\"\n\t\t\t\t></button>\n\t\t\t}\n\t\t</div>\n\t}\n}\n\n<div\n\t#contentRoot\n\tclass=\"hub-panels__content\"\n\t[class.hub-panels__content--pills]=\"type() === 'pills'\"\n\t[class.hub-panels__content--accordion]=\"isAccordionView()\"\n\t[class.hub-panels__content--multiple-parking]=\"!isAccordionView() && multiple()\"\n>\n\t@if (activePanelHasRouter()) {\n\t\t<router-outlet />\n\t} @else {\n\t\t<ng-content />\n\t}\n</div>\n", styles: [":where(.hub-panels){--hub-panels-accent: var(--hub-sys-color-primary, #0d6efd);--hub-panels-accent-emphasis: var(--hub-sys-color-primary-emphasis, #0a58ca);--hub-panels-accent-subtle: var(--hub-sys-color-primary-subtle, #e7f1ff);--hub-panels-flex-direction: row;--hub-panels-border-width: var(--hub-container-border-width, var(--hub-ref-border-width, 1px));--hub-panels-border-color: var(--hub-container-border-color, var(--hub-sys-border-color-default, #dee2e6));--hub-panels-border-radius: var(--hub-container-border-radius, var(--hub-ref-radius-md, .375rem));--hub-panels-content-bg: var(--hub-container-bg, var(--hub-sys-surface-page, #fff));--hub-panels-header-bg: var(--hub-panels-content-bg);--hub-panels-content-box-shadow: none;--hub-panels-content-padding-x: var(--hub-container-padding-x, var(--hub-ref-space-3, 1rem));--hub-panels-content-padding-y: var(--hub-container-padding-y, var(--hub-ref-space-3, 1rem));--hub-panels-nav-btn-width: 1.5rem;--hub-panels-nav-btn-height: 1.5rem;--hub-panels-backward-btn-bg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23212529' d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3E%3C/svg%3E\");--hub-panels-forward-btn-bg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23212529' d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E\");--hub-panels-nav-link-padding-x: var(--hub-ref-space-3, 1rem);--hub-panels-nav-link-padding-y: var(--hub-ref-space-2, .5rem);--hub-panels-nav-link-color: var(--hub-sys-text-primary, #212529);--hub-panels-nav-link-hover-color: var(--hub-panels-accent-emphasis);--hub-panels-nav-link-active-color: var(--hub-panels-accent);--hub-panels-nav-link-active-bg: var(--hub-panels-content-bg);--hub-panels-nav-link-disabled-color: var(--hub-sys-text-muted, #6c757d);--hub-panels-tab-font-family: var(--hub-container-font-family, var(--hub-ref-font-family-base));--hub-panels-tab-font-size: var(--hub-container-font-size, var(--hub-ref-font-size-base, 1rem));--hub-panels-tab-font-weight: 500;--hub-panels-tab-line-height: var(--hub-ref-line-height-base, 1.5);--hub-panels-tab-padding-x: var(--hub-panels-nav-link-padding-x);--hub-panels-tab-padding-y: var(--hub-panels-nav-link-padding-y);--hub-panels-tab-gap: var(--hub-ref-space-2, .5rem);--hub-panels-tab-bg: transparent;--hub-panels-tab-color: var(--hub-panels-nav-link-color);--hub-panels-tab-border-width: var(--hub-panels-border-width);--hub-panels-tab-border-style: solid;--hub-panels-tab-border-color: transparent;--hub-panels-tab-border-radius: var(--hub-panels-border-radius);--hub-panels-tab-bg-hover: var(--hub-ref-surface-2, #f8f9fa);--hub-panels-tab-color-hover: var(--hub-panels-nav-link-hover-color);--hub-panels-tab-bg-active: var(--hub-panels-nav-link-active-bg);--hub-panels-tab-color-active: var(--hub-panels-nav-link-active-color);--hub-panels-tab-border-color-active: var(--hub-panels-accent);--hub-panels-tab-bg-disabled: transparent;--hub-panels-tab-color-disabled: var(--hub-panels-nav-link-disabled-color);--hub-panels-tab-focus-ring-width: var(--hub-sys-focus-ring-width, .25rem);--hub-panels-tab-focus-ring-color: var(--hub-sys-focus-ring-color, rgba(13, 110, 253, .25));--hub-panels-tab-transition: var(--hub-sys-transition-base, all .2s ease-in-out);--hub-panels-tab-active-shadow: 0 -.25rem .5rem rgba(0, 0, 0, .06);--hub-panels-tab-active-shadow-vertical: -.25rem 0 .5rem rgba(0, 0, 0, .06);--hub-panels-strip-margin-top: var(--hub-ref-space-2, .5rem);--hub-panels-nav-gap: 0;--hub-panels-pill-border-radius: 50rem;--hub-panels-pill-bg-active: var(--hub-panels-accent);--hub-panels-pill-color-active: var(--hub-ref-color-white, #fff);--hub-panels-pill-gap: var(--hub-ref-space-2, .5rem);--hub-panels-pill-content-border-width: 0;--hub-panels-remove-btn-opacity: .6;--hub-panels-remove-btn-opacity-hover: 1;--hub-panels-nav-content-gap: var(--hub-ref-space-2, .5rem);--hub-panels-pane-min-width: 16rem;--hub-panels-pane-min-height: 8rem;--hub-panels-pane-gap: 0;--hub-panels-card-gap: var(--hub-ref-space-3, 1rem);--hub-panels-accordion-color: var(--hub-accordion-color, var(--hub-sys-text-primary, #212529));--hub-panels-accordion-bg: var(--hub-accordion-bg, var(--hub-sys-surface-page, #fff));--hub-panels-accordion-border-width: var(--hub-accordion-border-width, var(--hub-ref-border-width, 1px));--hub-panels-accordion-border-color: var(--hub-accordion-border-color, var(--hub-sys-border-color-default, #dee2e6));--hub-panels-accordion-border-radius: var(--hub-accordion-border-radius, var(--hub-ref-radius-sm, .25rem));--hub-panels-accordion-inner-border-radius: var( --hub-accordion-inner-border-radius, calc(var(--hub-panels-accordion-border-radius) - var(--hub-panels-accordion-border-width)) );--hub-panels-accordion-btn-padding-x: var(--hub-accordion-btn-padding-x, 1.25rem);--hub-panels-accordion-btn-padding-y: var(--hub-accordion-btn-padding-y, var(--hub-ref-space-3, 1rem));--hub-panels-accordion-btn-color: var(--hub-accordion-btn-color, var(--hub-sys-text-primary, #212529));--hub-panels-accordion-btn-bg: var(--hub-accordion-btn-bg, var(--hub-sys-surface-page, #fff));--hub-panels-accordion-active-color: var(--hub-accordion-active-color, var(--hub-panels-accent-emphasis));--hub-panels-accordion-active-bg: var(--hub-accordion-active-bg, var(--hub-panels-accent-subtle));--hub-panels-accordion-icon-color: var(--hub-accordion-icon-color, var(--hub-panels-accordion-btn-color));--hub-panels-accordion-icon-active-color: var(--hub-accordion-icon-active-color, var(--hub-panels-accordion-active-color));--hub-panels-accordion-btn-icon-mask: var(--hub-accordion-btn-icon-mask, url(\"data:image/svg+xml;charset=UTF-8,%3Csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23000' fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E\"));--hub-panels-accordion-btn-icon-width: var(--hub-accordion-btn-icon-width, 1.25rem);--hub-panels-accordion-btn-icon-transform: var(--hub-accordion-btn-icon-transform, rotate(-180deg));--hub-panels-accordion-btn-icon-transition: var(--hub-accordion-btn-icon-transition, transform .2s ease-in-out);--hub-panels-accordion-btn-focus-box-shadow: var( --hub-accordion-btn-focus-box-shadow, 0 0 0 var(--hub-sys-focus-ring-width, .25rem) var(--hub-sys-focus-ring-color, rgba(13, 110, 253, .25)) );--hub-panels-accordion-transition: var( --hub-accordion-transition, color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, border-radius .15s ease );--hub-panels-accordion-collapse-transition-duration: var(--hub-accordion-collapse-transition-duration, .25s);--hub-panels-accordion-collapse-transition-easing: var( --hub-accordion-collapse-transition-easing, cubic-bezier(.4, 0, .2, 1) );--hub-panels-accordion-body-padding-x: var(--hub-accordion-body-padding-x, 1.25rem);--hub-panels-accordion-body-padding-y: var(--hub-accordion-body-padding-y, var(--hub-ref-space-3, 1rem))}:where(.hub-panels[data-variant]){--hub-panels-accent-emphasis: color-mix(in srgb, var(--hub-panels-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-panels-accent-subtle: color-mix(in srgb, var(--hub-panels-accent) 12%, var(--hub-sys-surface-page, #fff))}:where(.hub-panels[data-variant=primary]){--hub-panels-accent: var(--hub-sys-color-primary);--hub-panels-accent-emphasis: var(--hub-sys-color-primary-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-primary-subtle)}:where(.hub-panels[data-variant=success]){--hub-panels-accent: var(--hub-sys-color-success);--hub-panels-accent-emphasis: var(--hub-sys-color-success-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-success-subtle)}:where(.hub-panels[data-variant=danger]){--hub-panels-accent: var(--hub-sys-color-danger);--hub-panels-accent-emphasis: var(--hub-sys-color-danger-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-danger-subtle)}:where(.hub-panels[data-variant=warning]){--hub-panels-accent: var(--hub-sys-color-warning);--hub-panels-accent-emphasis: var(--hub-sys-color-warning-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-warning-subtle)}:where(.hub-panels[data-variant=info]){--hub-panels-accent: var(--hub-sys-color-info);--hub-panels-accent-emphasis: var(--hub-sys-color-info-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-info-subtle)}\n", ".hub-panels{display:block;width:100%;box-sizing:border-box}.hub-panels,.hub-panels *,.hub-panels *:before,.hub-panels *:after{box-sizing:border-box}.hub-panels__header{display:flex;flex-direction:var(--hub-panels-flex-direction);align-items:stretch;background:var(--hub-panels-header-bg)}.hub-panels__scroll-btn{flex:0 0 auto;align-self:center;width:var(--hub-panels-nav-btn-width);height:var(--hub-panels-nav-btn-height);padding:0;border:0;cursor:pointer;background-color:transparent;background-position:center;background-repeat:no-repeat;background-size:1rem 1rem}.hub-panels__scroll-btn--backward{background-image:var(--hub-panels-backward-btn-bg)}.hub-panels__scroll-btn--forward{background-image:var(--hub-panels-forward-btn-bg)}.hub-panels__nav-scroller{display:flex;flex:1 1 auto;overflow-x:auto;background:var(--hub-panels-header-bg);scroll-behavior:smooth;scrollbar-width:none}.hub-panels__nav-scroller::-webkit-scrollbar{display:none}.hub-panels__nav{display:flex;flex:0 0 auto;flex-wrap:nowrap;gap:var(--hub-panels-nav-gap);margin:0;padding:0;list-style:none}.hub-panels__nav--tabs{border-bottom:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__nav--tabs .hub-panels__nav-link{margin-bottom:calc(-1 * var(--hub-panels-border-width))}.hub-panels__nav--pills{gap:var(--hub-panels-pill-gap)}.hub-panels__nav--pills .hub-panels__nav-link{border-radius:var(--hub-panels-pill-border-radius)}.hub-panels__nav--pills .hub-panels__nav-link--active{color:var(--hub-panels-pill-color-active);background:var(--hub-panels-pill-bg-active);border-color:transparent}.hub-panels__nav--justified{flex:1 1 auto}.hub-panels__nav--justified .hub-panels__nav-item{flex:1 1 0}.hub-panels__nav--justified .hub-panels__nav-link{width:100%;justify-content:center}.hub-panels__nav--vertical{flex-direction:column}.hub-panels__nav--vertical.hub-panels__nav--tabs{border-bottom:0;border-inline-end:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__nav--vertical.hub-panels__nav--tabs .hub-panels__nav-link{margin-bottom:0;margin-inline-end:calc(-1 * var(--hub-panels-border-width))}.hub-panels__nav-item{display:flex;flex:0 0 auto}.hub-panels__nav-link{position:relative;display:inline-flex;align-items:center;gap:var(--hub-panels-tab-gap);padding:var(--hub-panels-tab-padding-y) var(--hub-panels-tab-padding-x);font-family:var(--hub-panels-tab-font-family);font-size:var(--hub-panels-tab-font-size);font-weight:var(--hub-panels-tab-font-weight);line-height:var(--hub-panels-tab-line-height);white-space:nowrap;color:var(--hub-panels-tab-color);background:var(--hub-panels-tab-bg);border-style:var(--hub-panels-tab-border-style);border-width:var(--hub-panels-tab-border-width);border-color:var(--hub-panels-tab-border-color);border-start-start-radius:var(--hub-panels-tab-border-radius);border-start-end-radius:var(--hub-panels-tab-border-radius);cursor:pointer;transition:var(--hub-panels-tab-transition)}.hub-panels__nav-link:hover:not(:disabled):not(.hub-panels__nav-link--active){color:var(--hub-panels-tab-color-hover);background:var(--hub-panels-tab-bg-hover)}.hub-panels__nav-link:focus-visible{z-index:1;outline:0;box-shadow:0 0 0 var(--hub-panels-tab-focus-ring-width) var(--hub-panels-tab-focus-ring-color)}.hub-panels__nav-link--active{color:var(--hub-panels-tab-color-active);background:var(--hub-panels-tab-bg-active);border-color:var(--hub-panels-tab-border-color-active)}.hub-panels__nav-link:disabled{color:var(--hub-panels-tab-color-disabled);background:var(--hub-panels-tab-bg-disabled);cursor:not-allowed}.hub-panels__remove-btn{display:inline-flex;align-items:center;line-height:1;opacity:var(--hub-panels-remove-btn-opacity)}.hub-panels__remove-btn:hover{opacity:var(--hub-panels-remove-btn-opacity-hover)}.hub-panels__spacer{flex:1 1 auto;background:var(--hub-panels-header-bg);border-bottom:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__content{padding:var(--hub-panels-content-padding-y) var(--hub-panels-content-padding-x);background:var(--hub-panels-content-bg);box-shadow:var(--hub-panels-content-box-shadow)}.hub-panels__content--accordion{padding:0;background:transparent;box-shadow:none}.hub-panels__content--multiple-parking{display:none}.hub-panels__multiple-layout{display:flex;align-items:stretch;gap:var(--hub-panels-pane-gap);overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth}.hub-panels__multiple-block{display:flex;flex-direction:column;flex:1 0 var(--hub-panels-pane-min-width);align-self:stretch;min-width:var(--hub-panels-pane-min-width);min-height:100%}.hub-panels__multiple-block.hub-panels--vertical{flex-direction:row;flex:1 1 auto;width:100%;min-width:100%;min-height:var(--hub-panels-pane-min-height)}.hub-panels__multiple-block>.hub-panels__content{display:flex;flex:1 1 auto;min-height:0}.hub-panels__multiple-block.hub-panels--vertical>.hub-panels__content{flex:1 1 auto;width:auto;min-width:max(var(--hub-panels-pane-min-width),var(--hub-panels-multiple-vertical-panel-min-width, 0px))}.hub-panels__multiple-pane-host{display:flex;flex:1 1 auto;width:100%;min-height:0}.hub-panels__multiple-pane-host>.hub-panels__panel{flex:1 1 auto;width:100%;height:100%}.hub-panels__multiple-pane-host>.hub-panels__panel.hub-panels__panel--active{display:flex;flex-direction:column}.hub-panels__multiple-pane-host>.hub-panels__panel.hub-panels__panel--active>div{flex:1 1 auto;min-height:0}.hub-panels--vertical.hub-panels--multiple>.hub-panels__multiple-layout{flex-direction:column;align-items:stretch;width:100%}.hub-panels--pills.hub-panels--multiple.hub-panels--vertical>.hub-panels__multiple-layout>.hub-panels__multiple-block+.hub-panels__multiple-block{padding-top:var(--hub-panels-nav-content-gap);border-top:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__panel{display:none}.hub-panels__panel--active{display:block}.hub-panels--tabs:not(.hub-panels--vertical):not(.hub-panels--multiple)>.hub-panels__header{margin-top:var(--hub-panels-strip-margin-top)}.hub-panels--tabs:not(.hub-panels--vertical):not(.hub-panels--multiple)>.hub-panels__content{border:var(--hub-panels-border-width) solid var(--hub-panels-border-color);border-top:0;border-end-start-radius:var(--hub-panels-border-radius);border-end-end-radius:var(--hub-panels-border-radius)}.hub-panels--tabs:not(.hub-panels--vertical):not(.hub-panels--multiple) .hub-panels__nav--tabs .hub-panels__nav-link--active{border-color:var(--hub-panels-border-color);border-bottom-color:var(--hub-panels-tab-bg-active);box-shadow:var(--hub-panels-tab-active-shadow)}.hub-panels--pills>.hub-panels__header{margin-bottom:var(--hub-panels-nav-content-gap)}.hub-panels--pills>.hub-panels__content{border:var(--hub-panels-pill-content-border-width) solid var(--hub-panels-border-color);border-radius:var(--hub-panels-border-radius)}.hub-panels--vertical{display:flex;align-items:stretch}.hub-panels--vertical .hub-panels__header{flex-direction:column}.hub-panels--vertical .hub-panels__nav-scroller{overflow:visible}.hub-panels--vertical .hub-panels__content{flex:1 1 auto;min-width:0}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple)>.hub-panels__header{margin-inline-start:var(--hub-panels-strip-margin-top);align-self:stretch;min-height:0}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__spacer{display:none}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav-scroller{flex:1 1 auto;align-self:stretch;min-height:100%}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--vertical{flex:1 1 auto;align-self:stretch;min-height:100%}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--vertical .hub-panels__nav-item{width:100%}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--vertical .hub-panels__nav-link{width:calc(100% + var(--hub-panels-border-width));justify-content:flex-start;margin-bottom:0;border-start-start-radius:var(--hub-panels-tab-border-radius);border-start-end-radius:0;border-end-start-radius:var(--hub-panels-tab-border-radius);border-end-end-radius:0;margin-inline-end:calc(-1 * var(--hub-panels-border-width))}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple)>.hub-panels__content{border:var(--hub-panels-border-width) solid var(--hub-panels-border-color);border-inline-start:0;border-start-end-radius:var(--hub-panels-border-radius);border-end-end-radius:var(--hub-panels-border-radius)}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--tabs .hub-panels__nav-link--active{z-index:1;border-color:var(--hub-panels-border-color);border-inline-end-color:var(--hub-panels-tab-bg-active);box-shadow:var(--hub-panels-tab-active-shadow-vertical)}.hub-panels--pills.hub-panels--vertical>.hub-panels__header{margin-bottom:0;margin-inline-end:var(--hub-panels-nav-content-gap)}.hub-panels--card{display:flex}.hub-panels--card>.hub-panels__content{display:flex;flex-direction:column;gap:var(--hub-panels-card-gap, var(--hub-ref-space-3, 1rem));width:100%;padding:0;background:transparent;box-shadow:none}\n", ".hub-panels__panel--accordion{display:block;color:var(--hub-panels-accordion-color);background-color:var(--hub-panels-accordion-bg);border:var(--hub-panels-accordion-border-width) solid var(--hub-panels-accordion-border-color)}.hub-panels__panel--accordion:not(:first-of-type){border-top:0}.hub-panels__panel--accordion:first-of-type{border-start-start-radius:var(--hub-panels-accordion-border-radius);border-start-end-radius:var(--hub-panels-accordion-border-radius)}.hub-panels__panel--accordion:first-of-type>.hub-panels__accordion-header .hub-panels__accordion-btn{border-start-start-radius:var(--hub-panels-accordion-inner-border-radius);border-start-end-radius:var(--hub-panels-accordion-inner-border-radius)}.hub-panels__panel--accordion:last-of-type{border-end-start-radius:var(--hub-panels-accordion-border-radius);border-end-end-radius:var(--hub-panels-accordion-border-radius)}.hub-panels__panel--accordion:last-of-type>.hub-panels__accordion-header .hub-panels__accordion-btn--collapsed{border-end-start-radius:var(--hub-panels-accordion-inner-border-radius);border-end-end-radius:var(--hub-panels-accordion-inner-border-radius)}.hub-panels__panel--accordion:last-of-type>.hub-panels__accordion-collapse{border-end-start-radius:var(--hub-panels-accordion-border-radius);border-end-end-radius:var(--hub-panels-accordion-border-radius)}.hub-panels__accordion-header{margin:0}.hub-panels__accordion-btn{position:relative;display:flex;align-items:center;width:100%;gap:var(--hub-panels-tab-gap);padding:var(--hub-panels-accordion-btn-padding-y) var(--hub-panels-accordion-btn-padding-x);font-family:var(--hub-panels-tab-font-family);font-size:var(--hub-panels-tab-font-size);line-height:var(--hub-panels-tab-line-height);text-align:left;color:var(--hub-panels-accordion-btn-color);background-color:var(--hub-panels-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--hub-panels-accordion-transition);cursor:pointer}.hub-panels__accordion-btn:after{flex-shrink:0;width:var(--hub-panels-accordion-btn-icon-width);height:var(--hub-panels-accordion-btn-icon-width);margin-left:auto;content:\"\";background-color:var(--hub-panels-accordion-icon-active-color);-webkit-mask-image:var(--hub-panels-accordion-btn-icon-mask);mask-image:var(--hub-panels-accordion-btn-icon-mask);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-position:center;mask-position:center;transform:var(--hub-panels-accordion-btn-icon-transform);transition:var(--hub-panels-accordion-btn-icon-transition)}.hub-panels__accordion-btn:not(.hub-panels__accordion-btn--collapsed){color:var(--hub-panels-accordion-active-color);background-color:var(--hub-panels-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--hub-panels-accordion-border-width)) 0 var(--hub-panels-accordion-border-color)}.hub-panels__accordion-btn--collapsed:after{background-color:var(--hub-panels-accordion-icon-color);transform:none}.hub-panels__accordion-btn:hover:not(:disabled){z-index:2}.hub-panels__accordion-btn:focus-visible{z-index:3;outline:0;box-shadow:var(--hub-panels-accordion-btn-focus-box-shadow)}.hub-panels__accordion-btn:disabled{color:var(--hub-panels-tab-color-disabled);cursor:not-allowed}.hub-panels__accordion-collapse{display:grid;grid-template-rows:1fr;transition:grid-template-rows var(--hub-panels-accordion-collapse-transition-duration) var(--hub-panels-accordion-collapse-transition-easing)}.hub-panels__accordion-collapse--collapsed{grid-template-rows:0fr}.hub-panels__accordion-collapse>.hub-panels__accordion-body{min-height:0;overflow:hidden;opacity:1;padding:var(--hub-panels-accordion-body-padding-y) var(--hub-panels-accordion-body-padding-x);transition:opacity var(--hub-panels-accordion-collapse-transition-duration) var(--hub-panels-accordion-collapse-transition-easing),padding var(--hub-panels-accordion-collapse-transition-duration) var(--hub-panels-accordion-collapse-transition-easing)}.hub-panels__accordion-collapse--collapsed>.hub-panels__accordion-body{opacity:0;padding-top:0;padding-bottom:0}.hub-panels--flush .hub-panels__panel--accordion{border-right:0;border-left:0;border-radius:0}.hub-panels--flush .hub-panels__panel--accordion:first-of-type{border-top:0}.hub-panels--flush .hub-panels__panel--accordion:last-of-type{border-bottom:0}.hub-panels--flush .hub-panels__panel--accordion>.hub-panels__accordion-collapse,.hub-panels--flush .hub-panels__panel--accordion>.hub-panels__accordion-header .hub-panels__accordion-btn{border-radius:0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
763
+ ], viewQueries: [{ propertyName: "navScroller", first: true, predicate: ["navScroller"], descendants: true, isSignal: true }, { propertyName: "prevBtn", first: true, predicate: ["prevBtn"], descendants: true, isSignal: true }, { propertyName: "nextBtn", first: true, predicate: ["nextBtn"], descendants: true, isSignal: true }, { propertyName: "contentRoot", first: true, predicate: ["contentRoot"], descendants: true, isSignal: true }, { propertyName: "multiplePaneHosts", predicate: ["multiplePaneHost"], descendants: true, isSignal: true }, { propertyName: "multipleBlocks", predicate: ["multipleBlock"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (!isAccordionView() && !isCardView()) {\n\t@if (multiple()) {\n\t\t<div class=\"hub-panels__multiple-layout\">\n\t\t\t@for (group of multipleHeaderGroups(); track group.activePanel ?? group.headers[0]) {\n\t\t\t\t<div\n\t\t\t\t\t#multipleBlock\n\t\t\t\t\tclass=\"hub-panels hub-panels__multiple-block\"\n\t\t\t\t\t[class.hub-panels--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t[class.hub-panels--pills]=\"type() === 'pills'\"\n\t\t\t\t\t[class.hub-panels--vertical]=\"vertical()\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"hub-panels__header\">\n\t\t\t\t\t\t<ul\n\t\t\t\t\t\t\tclass=\"hub-panels__nav\"\n\t\t\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"config.ariaLabel\"\n\t\t\t\t\t\t\t[attr.aria-orientation]=\"vertical() ? 'vertical' : null\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--pills]=\"type() === 'pills'\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--vertical]=\"vertical()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--justified]=\"justified()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@for (panel of group.headers; track panel) {\n\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-item\"\n\t\t\t\t\t\t\t\t\t[class]=\"panel.customClass()\"\n\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-item--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-item--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-link\"\n\t\t\t\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\t\t\t\t[id]=\"panel.id() + '-link'\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"panel.disabled() || formDisabled()\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-controls]=\"panel.id()\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t\t[attr.tabindex]=\"panel.active() || (!activePanel() && panelIndex(panel) === 0) ? null : -1\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"selectPanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t(keydown)=\"onPanelKeydown($event, panelIndex(panel))\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t@if (panel.headingRef(); as headingRef) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingRef\" />\n\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t{{ panel.heading() }}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (panel.removable()) {\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__remove-btn\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); removePanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t\t\t>&times;</span\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t@if (!justified() && type() !== 'pills' && !vertical()) {\n\t\t\t\t\t\t\t<div class=\"hub-panels__spacer\"></div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t@if (group.activePanel) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"hub-panels__content\"\n\t\t\t\t\t\t\t[class.hub-panels__content--pills]=\"type() === 'pills'\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t#multiplePaneHost\n\t\t\t\t\t\t\t\tclass=\"hub-panels__multiple-pane-host\"\n\t\t\t\t\t\t\t\t[attr.data-panel-id]=\"group.activePanel.id()\"\n\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t} @else {\n\t\t<div class=\"hub-panels__header\">\n\t\t\t@if (scrollable() && !backwardIsDisabled()) {\n\t\t\t\t<button\n\t\t\t\t\t#prevBtn\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-panels__scroll-btn hub-panels__scroll-btn--backward\"\n\t\t\t\t\t[attr.aria-label]=\"config.scrollBackwardAriaLabel\"\n\t\t\t\t\t(click)=\"navBackward()\"\n\t\t\t\t></button>\n\t\t\t}\n\n\t\t\t<div #navScroller class=\"hub-panels__nav-scroller\" (scroll)=\"onScroll()\">\n\t\t\t\t<ul\n\t\t\t\t\tclass=\"hub-panels__nav\"\n\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\t[attr.aria-label]=\"config.ariaLabel\"\n\t\t\t\t\t[attr.aria-orientation]=\"vertical() ? 'vertical' : null\"\n\t\t\t\t\t[class.hub-panels__nav--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t[class.hub-panels__nav--pills]=\"type() === 'pills'\"\n\t\t\t\t\t[class.hub-panels__nav--vertical]=\"vertical()\"\n\t\t\t\t\t[class.hub-panels__nav--justified]=\"justified()\"\n\t\t\t\t>\n\t\t\t\t\t@for (panel of panels(); track panel; let index = $index) {\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\tclass=\"hub-panels__nav-item\"\n\t\t\t\t\t\t\t[class]=\"panel.customClass()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav-item--active]=\"panel.active()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav-item--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-link\"\n\t\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\t\t[id]=\"panel.id() + '-link'\"\n\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t[disabled]=\"panel.disabled() || formDisabled()\"\n\t\t\t\t\t\t\t\t[attr.aria-controls]=\"panel.id()\"\n\t\t\t\t\t\t\t\t[attr.aria-selected]=\"panel.active()\"\n\t\t\t\t\t\t\t\t[attr.tabindex]=\"panel.active() || (!activePanel() && index === 0) ? null : -1\"\n\t\t\t\t\t\t\t\t(click)=\"selectPanel(panel)\"\n\t\t\t\t\t\t\t\t(keydown)=\"onPanelKeydown($event, index)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (panel.headingRef(); as headingRef) {\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingRef\" />\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t{{ panel.heading() }}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@if (panel.removable()) {\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__remove-btn\"\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); removePanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t>&times;</span\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t\t@if (!justified() && type() !== 'pills') {\n\t\t\t\t\t<div class=\"hub-panels__spacer\"></div>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t@if (scrollable() && !forwardIsDisabled()) {\n\t\t\t\t<button\n\t\t\t\t\t#nextBtn\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-panels__scroll-btn hub-panels__scroll-btn--forward\"\n\t\t\t\t\t[attr.aria-label]=\"config.scrollForwardAriaLabel\"\n\t\t\t\t\t(click)=\"navForward()\"\n\t\t\t\t></button>\n\t\t\t}\n\t\t</div>\n\t}\n}\n\n<div\n\t#contentRoot\n\tclass=\"hub-panels__content\"\n\t[class.hub-panels__content--pills]=\"type() === 'pills'\"\n\t[class.hub-panels__content--accordion]=\"isAccordionView()\"\n\t[class.hub-panels__content--multiple-parking]=\"!isAccordionView() && multiple()\"\n>\n\t@if (activePanelHasRouter()) {\n\t\t<router-outlet />\n\t} @else {\n\t\t<ng-content />\n\t}\n</div>\n", styles: [":where(.hub-panels){--hub-panels-accent: var(--hub-sys-color-primary, #0d6efd);--hub-panels-accent-emphasis: var(--hub-sys-color-primary-emphasis, #0a58ca);--hub-panels-accent-subtle: var(--hub-sys-color-primary-subtle, #e7f1ff);--hub-panels-accent-on: var(--hub-sys-color-primary-on, #fff);--hub-panels-flex-direction: row;--hub-panels-border-width: var(--hub-container-border-width, var(--hub-ref-border-width, 1px));--hub-panels-border-color: var(--hub-container-border-color, var(--hub-sys-border-color-default, #dee2e6));--hub-panels-border-radius: var(--hub-container-border-radius, var(--hub-ref-radius-md, .375rem));--hub-panels-content-bg: var(--hub-container-bg, var(--hub-sys-surface-page, #fff));--hub-panels-header-bg: var(--hub-panels-content-bg);--hub-panels-content-box-shadow: none;--hub-panels-content-padding-x: var(--hub-container-padding-x, var(--hub-ref-space-3, 1rem));--hub-panels-content-padding-y: var(--hub-container-padding-y, var(--hub-ref-space-3, 1rem));--hub-panels-nav-btn-width: 1.5rem;--hub-panels-nav-btn-height: 1.5rem;--hub-panels-backward-btn-bg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23212529' d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3E%3C/svg%3E\");--hub-panels-forward-btn-bg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23212529' d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E\");--hub-panels-nav-link-padding-x: var(--hub-ref-space-3, 1rem);--hub-panels-nav-link-padding-y: var(--hub-ref-space-2, .5rem);--hub-panels-nav-link-color: var(--hub-sys-text-primary, #212529);--hub-panels-nav-link-hover-color: var(--hub-panels-accent-emphasis);--hub-panels-nav-link-active-color: var(--hub-panels-accent);--hub-panels-nav-link-active-bg: var(--hub-panels-content-bg);--hub-panels-nav-link-disabled-color: var(--hub-sys-text-muted, #6c757d);--hub-panels-tab-font-family: var(--hub-container-font-family, var(--hub-ref-font-family-base));--hub-panels-tab-font-size: var(--hub-container-font-size, var(--hub-ref-font-size-base, 1rem));--hub-panels-tab-font-weight: var(--hub-ref-font-weight-medium, 500);--hub-panels-tab-line-height: var(--hub-ref-line-height-base, 1.5);--hub-panels-tab-padding-x: var(--hub-panels-nav-link-padding-x);--hub-panels-tab-padding-y: var(--hub-panels-nav-link-padding-y);--hub-panels-tab-gap: var(--hub-ref-space-2, .5rem);--hub-panels-tab-bg: transparent;--hub-panels-tab-color: var(--hub-panels-nav-link-color);--hub-panels-tab-border-width: var(--hub-panels-border-width);--hub-panels-tab-border-style: solid;--hub-panels-tab-border-color: transparent;--hub-panels-tab-border-radius: var(--hub-panels-border-radius);--hub-panels-tab-bg-hover: var(--hub-ref-surface-2, #f8f9fa);--hub-panels-tab-color-hover: var(--hub-panels-nav-link-hover-color);--hub-panels-tab-bg-active: var(--hub-panels-nav-link-active-bg);--hub-panels-tab-color-active: var(--hub-panels-nav-link-active-color);--hub-panels-tab-border-color-active: var(--hub-panels-accent);--hub-panels-tab-bg-disabled: transparent;--hub-panels-tab-color-disabled: var(--hub-panels-nav-link-disabled-color);--hub-panels-tab-focus-ring-width: var(--hub-sys-focus-ring-width, .25rem);--hub-panels-tab-focus-ring-color: var(--hub-sys-focus-ring-color, rgba(13, 110, 253, .25));--hub-panels-tab-transition: var(--hub-sys-transition-base, all .2s ease-in-out);--hub-panels-tab-active-shadow: 0 -.25rem .5rem rgba(0, 0, 0, .06);--hub-panels-tab-active-shadow-vertical: -.25rem 0 .5rem rgba(0, 0, 0, .06);--hub-panels-strip-margin-top: var(--hub-ref-space-2, .5rem);--hub-panels-nav-gap: 0;--hub-panels-pill-border-radius: var(--hub-ref-radius-pill, 50rem);--hub-panels-pill-bg-active: var(--hub-panels-accent);--hub-panels-pill-color-active: var(--hub-panels-accent-on);--hub-panels-pill-gap: var(--hub-ref-space-2, .5rem);--hub-panels-pill-content-border-width: 0;--hub-panels-remove-btn-opacity: .6;--hub-panels-remove-btn-opacity-hover: 1;--hub-panels-nav-content-gap: var(--hub-ref-space-2, .5rem);--hub-panels-pane-min-width: 16rem;--hub-panels-pane-min-height: 8rem;--hub-panels-pane-gap: 0;--hub-panels-card-gap: var(--hub-ref-space-3, 1rem);--hub-panels-accordion-color: var(--hub-accordion-color, var(--hub-sys-text-primary, #212529));--hub-panels-accordion-bg: var(--hub-accordion-bg, var(--hub-sys-surface-page, #fff));--hub-panels-accordion-border-width: var(--hub-accordion-border-width, var(--hub-ref-border-width, 1px));--hub-panels-accordion-border-color: var(--hub-accordion-border-color, var(--hub-sys-border-color-default, #dee2e6));--hub-panels-accordion-border-radius: var(--hub-accordion-border-radius, var(--hub-ref-radius-sm, .25rem));--hub-panels-accordion-inner-border-radius: var( --hub-accordion-inner-border-radius, calc(var(--hub-panels-accordion-border-radius) - var(--hub-panels-accordion-border-width)) );--hub-panels-accordion-btn-padding-x: var(--hub-accordion-btn-padding-x, 1.25rem);--hub-panels-accordion-btn-padding-y: var(--hub-accordion-btn-padding-y, var(--hub-ref-space-3, 1rem));--hub-panels-accordion-btn-color: var(--hub-accordion-btn-color, var(--hub-sys-text-primary, #212529));--hub-panels-accordion-btn-bg: var(--hub-accordion-btn-bg, var(--hub-sys-surface-page, #fff));--hub-panels-accordion-active-color: var(--hub-accordion-active-color, var(--hub-panels-accent-emphasis));--hub-panels-accordion-active-bg: var(--hub-accordion-active-bg, var(--hub-panels-accent-subtle));--hub-panels-accordion-icon-color: var(--hub-accordion-icon-color, var(--hub-panels-accordion-btn-color));--hub-panels-accordion-icon-active-color: var(--hub-accordion-icon-active-color, var(--hub-panels-accordion-active-color));--hub-panels-accordion-btn-icon-mask: var(--hub-accordion-btn-icon-mask, url(\"data:image/svg+xml;charset=UTF-8,%3Csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23000' fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E\"));--hub-panels-accordion-btn-icon-width: var(--hub-accordion-btn-icon-width, 1.25rem);--hub-panels-accordion-btn-icon-transform: var(--hub-accordion-btn-icon-transform, rotate(-180deg));--hub-panels-accordion-btn-icon-transition: var(--hub-accordion-btn-icon-transition, transform .2s ease-in-out);--hub-panels-accordion-btn-focus-box-shadow: var( --hub-accordion-btn-focus-box-shadow, 0 0 0 var(--hub-sys-focus-ring-width, .25rem) var(--hub-sys-focus-ring-color, rgba(13, 110, 253, .25)) );--hub-panels-accordion-transition: var( --hub-accordion-transition, color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, border-radius .15s ease );--hub-panels-accordion-collapse-transition-duration: var(--hub-accordion-collapse-transition-duration, .25s);--hub-panels-accordion-collapse-transition-easing: var( --hub-accordion-collapse-transition-easing, cubic-bezier(.4, 0, .2, 1) );--hub-panels-accordion-body-padding-x: var(--hub-accordion-body-padding-x, 1.25rem);--hub-panels-accordion-body-padding-y: var(--hub-accordion-body-padding-y, var(--hub-ref-space-3, 1rem))}:where(.hub-panels[data-variant]){--hub-panels-accent-emphasis: color-mix(in oklch, var(--hub-panels-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-panels-accent-subtle: color-mix(in oklch, var(--hub-panels-accent) 12%, var(--hub-sys-surface-page, #fff));--hub-panels-accent-on: oklch(from var(--hub-panels-accent) clamp(0, (.62 - l) * 1000, 1) 0 h)}:where(.hub-panels[data-variant=primary]){--hub-panels-accent: var(--hub-sys-color-primary);--hub-panels-accent-emphasis: var(--hub-sys-color-primary-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-primary-subtle);--hub-panels-accent-on: var(--hub-sys-color-primary-on)}:where(.hub-panels[data-variant=secondary]){--hub-panels-accent: var(--hub-sys-color-secondary);--hub-panels-accent-emphasis: var(--hub-sys-color-secondary-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-secondary-subtle);--hub-panels-accent-on: var(--hub-sys-color-secondary-on)}:where(.hub-panels[data-variant=success]){--hub-panels-accent: var(--hub-sys-color-success);--hub-panels-accent-emphasis: var(--hub-sys-color-success-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-success-subtle);--hub-panels-accent-on: var(--hub-sys-color-success-on)}:where(.hub-panels[data-variant=danger]){--hub-panels-accent: var(--hub-sys-color-danger);--hub-panels-accent-emphasis: var(--hub-sys-color-danger-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-danger-subtle);--hub-panels-accent-on: var(--hub-sys-color-danger-on)}:where(.hub-panels[data-variant=warning]){--hub-panels-accent: var(--hub-sys-color-warning);--hub-panels-accent-emphasis: var(--hub-sys-color-warning-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-warning-subtle);--hub-panels-accent-on: var(--hub-sys-color-warning-on)}:where(.hub-panels[data-variant=info]){--hub-panels-accent: var(--hub-sys-color-info);--hub-panels-accent-emphasis: var(--hub-sys-color-info-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-info-subtle);--hub-panels-accent-on: var(--hub-sys-color-info-on)}:where(.hub-panels[data-variant=neutral]){--hub-panels-accent: var(--hub-sys-color-neutral);--hub-panels-accent-emphasis: var(--hub-sys-color-neutral-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-neutral-subtle);--hub-panels-accent-on: var(--hub-sys-color-neutral-on)}:where(.hub-panels[data-variant=light]){--hub-panels-accent: var(--hub-sys-color-light);--hub-panels-accent-emphasis: var(--hub-sys-color-light-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-light-subtle);--hub-panels-accent-on: var(--hub-sys-color-light-on)}:where(.hub-panels[data-variant=dark]){--hub-panels-accent: var(--hub-sys-color-dark);--hub-panels-accent-emphasis: var(--hub-sys-color-dark-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-dark-subtle);--hub-panels-accent-on: var(--hub-sys-color-dark-on)}\n", ".hub-panels{display:block;width:100%;box-sizing:border-box}.hub-panels,.hub-panels *,.hub-panels *:before,.hub-panels *:after{box-sizing:border-box}.hub-panels__header{display:flex;flex-direction:var(--hub-panels-flex-direction);align-items:stretch;background:var(--hub-panels-header-bg)}.hub-panels__scroll-btn{flex:0 0 auto;align-self:center;width:var(--hub-panels-nav-btn-width);height:var(--hub-panels-nav-btn-height);padding:0;border:0;cursor:pointer;background-color:transparent;background-position:center;background-repeat:no-repeat;background-size:1rem 1rem}.hub-panels__scroll-btn--backward{background-image:var(--hub-panels-backward-btn-bg)}.hub-panels__scroll-btn--forward{background-image:var(--hub-panels-forward-btn-bg)}.hub-panels__nav-scroller{display:flex;flex:1 1 auto;overflow-x:auto;background:var(--hub-panels-header-bg);scroll-behavior:smooth;scrollbar-width:none}.hub-panels__nav-scroller::-webkit-scrollbar{display:none}.hub-panels__nav{display:flex;flex:0 0 auto;flex-wrap:nowrap;gap:var(--hub-panels-nav-gap);margin:0;padding:0;list-style:none}.hub-panels__nav--tabs{border-bottom:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__nav--tabs .hub-panels__nav-link{margin-bottom:calc(-1 * var(--hub-panels-border-width))}.hub-panels__nav--pills{gap:var(--hub-panels-pill-gap)}.hub-panels__nav--pills .hub-panels__nav-link{border-radius:var(--hub-panels-pill-border-radius)}.hub-panels__nav--pills .hub-panels__nav-link--active{color:var(--hub-panels-pill-color-active);background:var(--hub-panels-pill-bg-active);border-color:transparent}.hub-panels__nav--justified{flex:1 1 auto}.hub-panels__nav--justified .hub-panels__nav-item{flex:1 1 0}.hub-panels__nav--justified .hub-panels__nav-link{width:100%;justify-content:center}.hub-panels__nav--vertical{flex-direction:column}.hub-panels__nav--vertical.hub-panels__nav--tabs{border-bottom:0;border-inline-end:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__nav--vertical.hub-panels__nav--tabs .hub-panels__nav-link{margin-bottom:0;margin-inline-end:calc(-1 * var(--hub-panels-border-width))}.hub-panels__nav-item{display:flex;flex:0 0 auto}.hub-panels__nav-link{position:relative;display:inline-flex;align-items:center;gap:var(--hub-panels-tab-gap);padding:var(--hub-panels-tab-padding-y) var(--hub-panels-tab-padding-x);font-family:var(--hub-panels-tab-font-family);font-size:var(--hub-panels-tab-font-size);font-weight:var(--hub-panels-tab-font-weight);line-height:var(--hub-panels-tab-line-height);white-space:nowrap;color:var(--hub-panels-tab-color);background:var(--hub-panels-tab-bg);border-style:var(--hub-panels-tab-border-style);border-width:var(--hub-panels-tab-border-width);border-color:var(--hub-panels-tab-border-color);border-start-start-radius:var(--hub-panels-tab-border-radius);border-start-end-radius:var(--hub-panels-tab-border-radius);cursor:pointer;transition:var(--hub-panels-tab-transition)}.hub-panels__nav-link:hover:not(:disabled):not(.hub-panels__nav-link--active){color:var(--hub-panels-tab-color-hover);background:var(--hub-panels-tab-bg-hover)}.hub-panels__nav-link:focus-visible{z-index:1;outline:0;box-shadow:0 0 0 var(--hub-panels-tab-focus-ring-width) var(--hub-panels-tab-focus-ring-color)}.hub-panels__nav-link--active{color:var(--hub-panels-tab-color-active);background:var(--hub-panels-tab-bg-active);border-color:var(--hub-panels-tab-border-color-active)}.hub-panels__nav-link:disabled{color:var(--hub-panels-tab-color-disabled);background:var(--hub-panels-tab-bg-disabled);cursor:not-allowed}.hub-panels__remove-btn{display:inline-flex;align-items:center;line-height:1;opacity:var(--hub-panels-remove-btn-opacity)}.hub-panels__remove-btn:hover{opacity:var(--hub-panels-remove-btn-opacity-hover)}.hub-panels__spacer{flex:1 1 auto;background:var(--hub-panels-header-bg);border-bottom:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__content{padding:var(--hub-panels-content-padding-y) var(--hub-panels-content-padding-x);background:var(--hub-panels-content-bg);box-shadow:var(--hub-panels-content-box-shadow)}.hub-panels__content--accordion{padding:0;background:transparent;box-shadow:none}.hub-panels__content--multiple-parking{display:none}.hub-panels__multiple-layout{display:flex;align-items:stretch;gap:var(--hub-panels-pane-gap);overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth}.hub-panels__multiple-block{display:flex;flex-direction:column;flex:1 0 var(--hub-panels-pane-min-width);align-self:stretch;min-width:var(--hub-panels-pane-min-width);min-height:100%}.hub-panels__multiple-block.hub-panels--vertical{flex-direction:row;flex:1 1 auto;width:100%;min-width:100%;min-height:var(--hub-panels-pane-min-height)}.hub-panels__multiple-block>.hub-panels__content{display:flex;flex:1 1 auto;min-height:0}.hub-panels__multiple-block.hub-panels--vertical>.hub-panels__content{flex:1 1 auto;width:auto;min-width:max(var(--hub-panels-pane-min-width),var(--hub-panels-multiple-vertical-panel-min-width, 0px))}.hub-panels__multiple-pane-host{display:flex;flex:1 1 auto;width:100%;min-height:0}.hub-panels__multiple-pane-host>.hub-panels__panel{flex:1 1 auto;width:100%;height:100%}.hub-panels__multiple-pane-host>.hub-panels__panel.hub-panels__panel--active{display:flex;flex-direction:column}.hub-panels__multiple-pane-host>.hub-panels__panel.hub-panels__panel--active>div{flex:1 1 auto;min-height:0}.hub-panels--vertical.hub-panels--multiple>.hub-panels__multiple-layout{flex-direction:column;align-items:stretch;width:100%}.hub-panels--pills.hub-panels--multiple.hub-panels--vertical>.hub-panels__multiple-layout>.hub-panels__multiple-block+.hub-panels__multiple-block{padding-top:var(--hub-panels-nav-content-gap);border-top:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__panel{display:none}.hub-panels__panel--active{display:block}.hub-panels--tabs:not(.hub-panels--vertical):not(.hub-panels--multiple)>.hub-panels__header{margin-top:var(--hub-panels-strip-margin-top)}.hub-panels--tabs:not(.hub-panels--vertical):not(.hub-panels--multiple)>.hub-panels__content{border:var(--hub-panels-border-width) solid var(--hub-panels-border-color);border-top:0;border-end-start-radius:var(--hub-panels-border-radius);border-end-end-radius:var(--hub-panels-border-radius)}.hub-panels--tabs:not(.hub-panels--vertical):not(.hub-panels--multiple) .hub-panels__nav--tabs .hub-panels__nav-link--active{border-color:var(--hub-panels-border-color);border-bottom-color:var(--hub-panels-tab-bg-active);box-shadow:var(--hub-panels-tab-active-shadow)}.hub-panels--pills>.hub-panels__header{margin-bottom:var(--hub-panels-nav-content-gap)}.hub-panels--pills>.hub-panels__content{border:var(--hub-panels-pill-content-border-width) solid var(--hub-panels-border-color);border-radius:var(--hub-panels-border-radius)}.hub-panels--vertical{display:flex;align-items:stretch}.hub-panels--vertical .hub-panels__header{flex-direction:column}.hub-panels--vertical .hub-panels__nav-scroller{overflow:visible}.hub-panels--vertical .hub-panels__content{flex:1 1 auto;min-width:0}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple)>.hub-panels__header{margin-inline-start:var(--hub-panels-strip-margin-top);align-self:stretch;min-height:0}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__spacer{display:none}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav-scroller{flex:1 1 auto;align-self:stretch;min-height:100%}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--vertical{flex:1 1 auto;align-self:stretch;min-height:100%}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--vertical .hub-panels__nav-item{width:100%}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--vertical .hub-panels__nav-link{width:calc(100% + var(--hub-panels-border-width));justify-content:flex-start;margin-bottom:0;border-start-start-radius:var(--hub-panels-tab-border-radius);border-start-end-radius:0;border-end-start-radius:var(--hub-panels-tab-border-radius);border-end-end-radius:0;margin-inline-end:calc(-1 * var(--hub-panels-border-width))}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple)>.hub-panels__content{border:var(--hub-panels-border-width) solid var(--hub-panels-border-color);border-inline-start:0;border-start-end-radius:var(--hub-panels-border-radius);border-end-end-radius:var(--hub-panels-border-radius)}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--tabs .hub-panels__nav-link--active{z-index:1;border-color:var(--hub-panels-border-color);border-inline-end-color:var(--hub-panels-tab-bg-active);box-shadow:var(--hub-panels-tab-active-shadow-vertical)}.hub-panels--pills.hub-panels--vertical>.hub-panels__header{margin-bottom:0;margin-inline-end:var(--hub-panels-nav-content-gap)}.hub-panels--card{display:flex}.hub-panels--card>.hub-panels__content{display:flex;flex-direction:column;gap:var(--hub-panels-card-gap, var(--hub-ref-space-3, 1rem));width:100%;padding:0;background:transparent;box-shadow:none}\n", ".hub-panels__panel--accordion{display:block;color:var(--hub-panels-accordion-color);background-color:var(--hub-panels-accordion-bg);border:var(--hub-panels-accordion-border-width) solid var(--hub-panels-accordion-border-color)}.hub-panels__panel--accordion:not(:first-of-type){border-top:0}.hub-panels__panel--accordion:first-of-type{border-start-start-radius:var(--hub-panels-accordion-border-radius);border-start-end-radius:var(--hub-panels-accordion-border-radius)}.hub-panels__panel--accordion:first-of-type>.hub-panels__accordion-header .hub-panels__accordion-btn{border-start-start-radius:var(--hub-panels-accordion-inner-border-radius);border-start-end-radius:var(--hub-panels-accordion-inner-border-radius)}.hub-panels__panel--accordion:last-of-type{border-end-start-radius:var(--hub-panels-accordion-border-radius);border-end-end-radius:var(--hub-panels-accordion-border-radius)}.hub-panels__panel--accordion:last-of-type>.hub-panels__accordion-header .hub-panels__accordion-btn--collapsed{border-end-start-radius:var(--hub-panels-accordion-inner-border-radius);border-end-end-radius:var(--hub-panels-accordion-inner-border-radius)}.hub-panels__panel--accordion:last-of-type>.hub-panels__accordion-collapse{border-end-start-radius:var(--hub-panels-accordion-border-radius);border-end-end-radius:var(--hub-panels-accordion-border-radius)}.hub-panels__accordion-header{margin:0}.hub-panels__accordion-btn{position:relative;display:flex;align-items:center;width:100%;gap:var(--hub-panels-tab-gap);padding:var(--hub-panels-accordion-btn-padding-y) var(--hub-panels-accordion-btn-padding-x);font-family:var(--hub-panels-tab-font-family);font-size:var(--hub-panels-tab-font-size);line-height:var(--hub-panels-tab-line-height);text-align:left;color:var(--hub-panels-accordion-btn-color);background-color:var(--hub-panels-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--hub-panels-accordion-transition);cursor:pointer}.hub-panels__accordion-btn:after{flex-shrink:0;width:var(--hub-panels-accordion-btn-icon-width);height:var(--hub-panels-accordion-btn-icon-width);margin-left:auto;content:\"\";background-color:var(--hub-panels-accordion-icon-active-color);-webkit-mask-image:var(--hub-panels-accordion-btn-icon-mask);mask-image:var(--hub-panels-accordion-btn-icon-mask);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-position:center;mask-position:center;transform:var(--hub-panels-accordion-btn-icon-transform);transition:var(--hub-panels-accordion-btn-icon-transition)}.hub-panels__accordion-btn:not(.hub-panels__accordion-btn--collapsed){color:var(--hub-panels-accordion-active-color);background-color:var(--hub-panels-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--hub-panels-accordion-border-width)) 0 var(--hub-panels-accordion-border-color)}.hub-panels__accordion-btn--collapsed:after{background-color:var(--hub-panels-accordion-icon-color);transform:none}.hub-panels__accordion-btn:hover:not(:disabled){z-index:2}.hub-panels__accordion-btn:focus-visible{z-index:3;outline:0;box-shadow:var(--hub-panels-accordion-btn-focus-box-shadow)}.hub-panels__accordion-btn:disabled{color:var(--hub-panels-tab-color-disabled);cursor:not-allowed}.hub-panels__accordion-collapse{display:grid;grid-template-rows:1fr;transition:grid-template-rows var(--hub-panels-accordion-collapse-transition-duration) var(--hub-panels-accordion-collapse-transition-easing)}.hub-panels__accordion-collapse--collapsed{grid-template-rows:0fr}.hub-panels__accordion-collapse>.hub-panels__accordion-body{min-height:0;overflow:hidden;opacity:1;padding:var(--hub-panels-accordion-body-padding-y) var(--hub-panels-accordion-body-padding-x);transition:opacity var(--hub-panels-accordion-collapse-transition-duration) var(--hub-panels-accordion-collapse-transition-easing),padding var(--hub-panels-accordion-collapse-transition-duration) var(--hub-panels-accordion-collapse-transition-easing)}.hub-panels__accordion-collapse--collapsed>.hub-panels__accordion-body{opacity:0;padding-top:0;padding-bottom:0}.hub-panels--flush .hub-panels__panel--accordion{border-right:0;border-left:0;border-radius:0}.hub-panels--flush .hub-panels__panel--accordion:first-of-type{border-top:0}.hub-panels--flush .hub-panels__panel--accordion:last-of-type{border-bottom:0}.hub-panels--flush .hub-panels__panel--accordion>.hub-panels__accordion-collapse,.hub-panels--flush .hub-panels__panel--accordion>.hub-panels__accordion-header .hub-panels__accordion-btn{border-radius:0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
764
764
  }
765
765
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: PanelsComponent, decorators: [{
766
766
  type: Component,
@@ -782,7 +782,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
782
782
  '[attr.data-variant]': 'variant() ?? null',
783
783
  '[style.--hub-panels-accent]': 'groupAccent()',
784
784
  '(window:resize)': 'onWindowResize()'
785
- }, template: "@if (!isAccordionView() && !isCardView()) {\n\t@if (multiple()) {\n\t\t<div class=\"hub-panels__multiple-layout\">\n\t\t\t@for (group of multipleHeaderGroups(); track group.activePanel ?? group.headers[0]) {\n\t\t\t\t<div\n\t\t\t\t\t#multipleBlock\n\t\t\t\t\tclass=\"hub-panels hub-panels__multiple-block\"\n\t\t\t\t\t[class.hub-panels--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t[class.hub-panels--pills]=\"type() === 'pills'\"\n\t\t\t\t\t[class.hub-panels--vertical]=\"vertical()\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"hub-panels__header\">\n\t\t\t\t\t\t<ul\n\t\t\t\t\t\t\tclass=\"hub-panels__nav\"\n\t\t\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"config.ariaLabel\"\n\t\t\t\t\t\t\t[attr.aria-orientation]=\"vertical() ? 'vertical' : null\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--pills]=\"type() === 'pills'\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--vertical]=\"vertical()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--justified]=\"justified()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@for (panel of group.headers; track panel) {\n\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-item\"\n\t\t\t\t\t\t\t\t\t[class]=\"panel.customClass()\"\n\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-item--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-item--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-link\"\n\t\t\t\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\t\t\t\t[id]=\"panel.id() + '-link'\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"panel.disabled() || formDisabled()\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-controls]=\"panel.id()\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t\t[attr.tabindex]=\"panel.active() || (!activePanel() && panelIndex(panel) === 0) ? null : -1\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"selectPanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t(keydown)=\"onPanelKeydown($event, panelIndex(panel))\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t@if (panel.headingRef(); as headingRef) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingRef\" />\n\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t{{ panel.heading() }}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (panel.removable()) {\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__remove-btn\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); removePanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t\t\t>&times;</span\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t@if (!justified() && type() !== 'pills' && !vertical()) {\n\t\t\t\t\t\t\t<div class=\"hub-panels__spacer\"></div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t@if (group.activePanel) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"hub-panels__content\"\n\t\t\t\t\t\t\t[class.hub-panels__content--pills]=\"type() === 'pills'\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t#multiplePaneHost\n\t\t\t\t\t\t\t\tclass=\"hub-panels__multiple-pane-host\"\n\t\t\t\t\t\t\t\t[attr.data-panel-id]=\"group.activePanel.id()\"\n\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t} @else {\n\t\t<div class=\"hub-panels__header\">\n\t\t\t@if (scrollable() && !backwardIsDisabled()) {\n\t\t\t\t<button\n\t\t\t\t\t#prevBtn\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-panels__scroll-btn hub-panels__scroll-btn--backward\"\n\t\t\t\t\t[attr.aria-label]=\"config.scrollBackwardAriaLabel\"\n\t\t\t\t\t(click)=\"navBackward()\"\n\t\t\t\t></button>\n\t\t\t}\n\n\t\t\t<div #navScroller class=\"hub-panels__nav-scroller\" (scroll)=\"onScroll()\">\n\t\t\t\t<ul\n\t\t\t\t\tclass=\"hub-panels__nav\"\n\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\t[attr.aria-label]=\"config.ariaLabel\"\n\t\t\t\t\t[attr.aria-orientation]=\"vertical() ? 'vertical' : null\"\n\t\t\t\t\t[class.hub-panels__nav--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t[class.hub-panels__nav--pills]=\"type() === 'pills'\"\n\t\t\t\t\t[class.hub-panels__nav--vertical]=\"vertical()\"\n\t\t\t\t\t[class.hub-panels__nav--justified]=\"justified()\"\n\t\t\t\t>\n\t\t\t\t\t@for (panel of panels(); track panel; let index = $index) {\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\tclass=\"hub-panels__nav-item\"\n\t\t\t\t\t\t\t[class]=\"panel.customClass()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav-item--active]=\"panel.active()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav-item--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-link\"\n\t\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\t\t[id]=\"panel.id() + '-link'\"\n\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t[disabled]=\"panel.disabled() || formDisabled()\"\n\t\t\t\t\t\t\t\t[attr.aria-controls]=\"panel.id()\"\n\t\t\t\t\t\t\t\t[attr.aria-selected]=\"panel.active()\"\n\t\t\t\t\t\t\t\t[attr.tabindex]=\"panel.active() || (!activePanel() && index === 0) ? null : -1\"\n\t\t\t\t\t\t\t\t(click)=\"selectPanel(panel)\"\n\t\t\t\t\t\t\t\t(keydown)=\"onPanelKeydown($event, index)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (panel.headingRef(); as headingRef) {\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingRef\" />\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t{{ panel.heading() }}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@if (panel.removable()) {\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__remove-btn\"\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); removePanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t>&times;</span\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t\t@if (!justified() && type() !== 'pills') {\n\t\t\t\t\t<div class=\"hub-panels__spacer\"></div>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t@if (scrollable() && !forwardIsDisabled()) {\n\t\t\t\t<button\n\t\t\t\t\t#nextBtn\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-panels__scroll-btn hub-panels__scroll-btn--forward\"\n\t\t\t\t\t[attr.aria-label]=\"config.scrollForwardAriaLabel\"\n\t\t\t\t\t(click)=\"navForward()\"\n\t\t\t\t></button>\n\t\t\t}\n\t\t</div>\n\t}\n}\n\n<div\n\t#contentRoot\n\tclass=\"hub-panels__content\"\n\t[class.hub-panels__content--pills]=\"type() === 'pills'\"\n\t[class.hub-panels__content--accordion]=\"isAccordionView()\"\n\t[class.hub-panels__content--multiple-parking]=\"!isAccordionView() && multiple()\"\n>\n\t@if (activePanelHasRouter()) {\n\t\t<router-outlet />\n\t} @else {\n\t\t<ng-content />\n\t}\n</div>\n", styles: [":where(.hub-panels){--hub-panels-accent: var(--hub-sys-color-primary, #0d6efd);--hub-panels-accent-emphasis: var(--hub-sys-color-primary-emphasis, #0a58ca);--hub-panels-accent-subtle: var(--hub-sys-color-primary-subtle, #e7f1ff);--hub-panels-flex-direction: row;--hub-panels-border-width: var(--hub-container-border-width, var(--hub-ref-border-width, 1px));--hub-panels-border-color: var(--hub-container-border-color, var(--hub-sys-border-color-default, #dee2e6));--hub-panels-border-radius: var(--hub-container-border-radius, var(--hub-ref-radius-md, .375rem));--hub-panels-content-bg: var(--hub-container-bg, var(--hub-sys-surface-page, #fff));--hub-panels-header-bg: var(--hub-panels-content-bg);--hub-panels-content-box-shadow: none;--hub-panels-content-padding-x: var(--hub-container-padding-x, var(--hub-ref-space-3, 1rem));--hub-panels-content-padding-y: var(--hub-container-padding-y, var(--hub-ref-space-3, 1rem));--hub-panels-nav-btn-width: 1.5rem;--hub-panels-nav-btn-height: 1.5rem;--hub-panels-backward-btn-bg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23212529' d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3E%3C/svg%3E\");--hub-panels-forward-btn-bg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23212529' d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E\");--hub-panels-nav-link-padding-x: var(--hub-ref-space-3, 1rem);--hub-panels-nav-link-padding-y: var(--hub-ref-space-2, .5rem);--hub-panels-nav-link-color: var(--hub-sys-text-primary, #212529);--hub-panels-nav-link-hover-color: var(--hub-panels-accent-emphasis);--hub-panels-nav-link-active-color: var(--hub-panels-accent);--hub-panels-nav-link-active-bg: var(--hub-panels-content-bg);--hub-panels-nav-link-disabled-color: var(--hub-sys-text-muted, #6c757d);--hub-panels-tab-font-family: var(--hub-container-font-family, var(--hub-ref-font-family-base));--hub-panels-tab-font-size: var(--hub-container-font-size, var(--hub-ref-font-size-base, 1rem));--hub-panels-tab-font-weight: 500;--hub-panels-tab-line-height: var(--hub-ref-line-height-base, 1.5);--hub-panels-tab-padding-x: var(--hub-panels-nav-link-padding-x);--hub-panels-tab-padding-y: var(--hub-panels-nav-link-padding-y);--hub-panels-tab-gap: var(--hub-ref-space-2, .5rem);--hub-panels-tab-bg: transparent;--hub-panels-tab-color: var(--hub-panels-nav-link-color);--hub-panels-tab-border-width: var(--hub-panels-border-width);--hub-panels-tab-border-style: solid;--hub-panels-tab-border-color: transparent;--hub-panels-tab-border-radius: var(--hub-panels-border-radius);--hub-panels-tab-bg-hover: var(--hub-ref-surface-2, #f8f9fa);--hub-panels-tab-color-hover: var(--hub-panels-nav-link-hover-color);--hub-panels-tab-bg-active: var(--hub-panels-nav-link-active-bg);--hub-panels-tab-color-active: var(--hub-panels-nav-link-active-color);--hub-panels-tab-border-color-active: var(--hub-panels-accent);--hub-panels-tab-bg-disabled: transparent;--hub-panels-tab-color-disabled: var(--hub-panels-nav-link-disabled-color);--hub-panels-tab-focus-ring-width: var(--hub-sys-focus-ring-width, .25rem);--hub-panels-tab-focus-ring-color: var(--hub-sys-focus-ring-color, rgba(13, 110, 253, .25));--hub-panels-tab-transition: var(--hub-sys-transition-base, all .2s ease-in-out);--hub-panels-tab-active-shadow: 0 -.25rem .5rem rgba(0, 0, 0, .06);--hub-panels-tab-active-shadow-vertical: -.25rem 0 .5rem rgba(0, 0, 0, .06);--hub-panels-strip-margin-top: var(--hub-ref-space-2, .5rem);--hub-panels-nav-gap: 0;--hub-panels-pill-border-radius: 50rem;--hub-panels-pill-bg-active: var(--hub-panels-accent);--hub-panels-pill-color-active: var(--hub-ref-color-white, #fff);--hub-panels-pill-gap: var(--hub-ref-space-2, .5rem);--hub-panels-pill-content-border-width: 0;--hub-panels-remove-btn-opacity: .6;--hub-panels-remove-btn-opacity-hover: 1;--hub-panels-nav-content-gap: var(--hub-ref-space-2, .5rem);--hub-panels-pane-min-width: 16rem;--hub-panels-pane-min-height: 8rem;--hub-panels-pane-gap: 0;--hub-panels-card-gap: var(--hub-ref-space-3, 1rem);--hub-panels-accordion-color: var(--hub-accordion-color, var(--hub-sys-text-primary, #212529));--hub-panels-accordion-bg: var(--hub-accordion-bg, var(--hub-sys-surface-page, #fff));--hub-panels-accordion-border-width: var(--hub-accordion-border-width, var(--hub-ref-border-width, 1px));--hub-panels-accordion-border-color: var(--hub-accordion-border-color, var(--hub-sys-border-color-default, #dee2e6));--hub-panels-accordion-border-radius: var(--hub-accordion-border-radius, var(--hub-ref-radius-sm, .25rem));--hub-panels-accordion-inner-border-radius: var( --hub-accordion-inner-border-radius, calc(var(--hub-panels-accordion-border-radius) - var(--hub-panels-accordion-border-width)) );--hub-panels-accordion-btn-padding-x: var(--hub-accordion-btn-padding-x, 1.25rem);--hub-panels-accordion-btn-padding-y: var(--hub-accordion-btn-padding-y, var(--hub-ref-space-3, 1rem));--hub-panels-accordion-btn-color: var(--hub-accordion-btn-color, var(--hub-sys-text-primary, #212529));--hub-panels-accordion-btn-bg: var(--hub-accordion-btn-bg, var(--hub-sys-surface-page, #fff));--hub-panels-accordion-active-color: var(--hub-accordion-active-color, var(--hub-panels-accent-emphasis));--hub-panels-accordion-active-bg: var(--hub-accordion-active-bg, var(--hub-panels-accent-subtle));--hub-panels-accordion-icon-color: var(--hub-accordion-icon-color, var(--hub-panels-accordion-btn-color));--hub-panels-accordion-icon-active-color: var(--hub-accordion-icon-active-color, var(--hub-panels-accordion-active-color));--hub-panels-accordion-btn-icon-mask: var(--hub-accordion-btn-icon-mask, url(\"data:image/svg+xml;charset=UTF-8,%3Csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23000' fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E\"));--hub-panels-accordion-btn-icon-width: var(--hub-accordion-btn-icon-width, 1.25rem);--hub-panels-accordion-btn-icon-transform: var(--hub-accordion-btn-icon-transform, rotate(-180deg));--hub-panels-accordion-btn-icon-transition: var(--hub-accordion-btn-icon-transition, transform .2s ease-in-out);--hub-panels-accordion-btn-focus-box-shadow: var( --hub-accordion-btn-focus-box-shadow, 0 0 0 var(--hub-sys-focus-ring-width, .25rem) var(--hub-sys-focus-ring-color, rgba(13, 110, 253, .25)) );--hub-panels-accordion-transition: var( --hub-accordion-transition, color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, border-radius .15s ease );--hub-panels-accordion-collapse-transition-duration: var(--hub-accordion-collapse-transition-duration, .25s);--hub-panels-accordion-collapse-transition-easing: var( --hub-accordion-collapse-transition-easing, cubic-bezier(.4, 0, .2, 1) );--hub-panels-accordion-body-padding-x: var(--hub-accordion-body-padding-x, 1.25rem);--hub-panels-accordion-body-padding-y: var(--hub-accordion-body-padding-y, var(--hub-ref-space-3, 1rem))}:where(.hub-panels[data-variant]){--hub-panels-accent-emphasis: color-mix(in srgb, var(--hub-panels-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-panels-accent-subtle: color-mix(in srgb, var(--hub-panels-accent) 12%, var(--hub-sys-surface-page, #fff))}:where(.hub-panels[data-variant=primary]){--hub-panels-accent: var(--hub-sys-color-primary);--hub-panels-accent-emphasis: var(--hub-sys-color-primary-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-primary-subtle)}:where(.hub-panels[data-variant=success]){--hub-panels-accent: var(--hub-sys-color-success);--hub-panels-accent-emphasis: var(--hub-sys-color-success-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-success-subtle)}:where(.hub-panels[data-variant=danger]){--hub-panels-accent: var(--hub-sys-color-danger);--hub-panels-accent-emphasis: var(--hub-sys-color-danger-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-danger-subtle)}:where(.hub-panels[data-variant=warning]){--hub-panels-accent: var(--hub-sys-color-warning);--hub-panels-accent-emphasis: var(--hub-sys-color-warning-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-warning-subtle)}:where(.hub-panels[data-variant=info]){--hub-panels-accent: var(--hub-sys-color-info);--hub-panels-accent-emphasis: var(--hub-sys-color-info-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-info-subtle)}\n", ".hub-panels{display:block;width:100%;box-sizing:border-box}.hub-panels,.hub-panels *,.hub-panels *:before,.hub-panels *:after{box-sizing:border-box}.hub-panels__header{display:flex;flex-direction:var(--hub-panels-flex-direction);align-items:stretch;background:var(--hub-panels-header-bg)}.hub-panels__scroll-btn{flex:0 0 auto;align-self:center;width:var(--hub-panels-nav-btn-width);height:var(--hub-panels-nav-btn-height);padding:0;border:0;cursor:pointer;background-color:transparent;background-position:center;background-repeat:no-repeat;background-size:1rem 1rem}.hub-panels__scroll-btn--backward{background-image:var(--hub-panels-backward-btn-bg)}.hub-panels__scroll-btn--forward{background-image:var(--hub-panels-forward-btn-bg)}.hub-panels__nav-scroller{display:flex;flex:1 1 auto;overflow-x:auto;background:var(--hub-panels-header-bg);scroll-behavior:smooth;scrollbar-width:none}.hub-panels__nav-scroller::-webkit-scrollbar{display:none}.hub-panels__nav{display:flex;flex:0 0 auto;flex-wrap:nowrap;gap:var(--hub-panels-nav-gap);margin:0;padding:0;list-style:none}.hub-panels__nav--tabs{border-bottom:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__nav--tabs .hub-panels__nav-link{margin-bottom:calc(-1 * var(--hub-panels-border-width))}.hub-panels__nav--pills{gap:var(--hub-panels-pill-gap)}.hub-panels__nav--pills .hub-panels__nav-link{border-radius:var(--hub-panels-pill-border-radius)}.hub-panels__nav--pills .hub-panels__nav-link--active{color:var(--hub-panels-pill-color-active);background:var(--hub-panels-pill-bg-active);border-color:transparent}.hub-panels__nav--justified{flex:1 1 auto}.hub-panels__nav--justified .hub-panels__nav-item{flex:1 1 0}.hub-panels__nav--justified .hub-panels__nav-link{width:100%;justify-content:center}.hub-panels__nav--vertical{flex-direction:column}.hub-panels__nav--vertical.hub-panels__nav--tabs{border-bottom:0;border-inline-end:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__nav--vertical.hub-panels__nav--tabs .hub-panels__nav-link{margin-bottom:0;margin-inline-end:calc(-1 * var(--hub-panels-border-width))}.hub-panels__nav-item{display:flex;flex:0 0 auto}.hub-panels__nav-link{position:relative;display:inline-flex;align-items:center;gap:var(--hub-panels-tab-gap);padding:var(--hub-panels-tab-padding-y) var(--hub-panels-tab-padding-x);font-family:var(--hub-panels-tab-font-family);font-size:var(--hub-panels-tab-font-size);font-weight:var(--hub-panels-tab-font-weight);line-height:var(--hub-panels-tab-line-height);white-space:nowrap;color:var(--hub-panels-tab-color);background:var(--hub-panels-tab-bg);border-style:var(--hub-panels-tab-border-style);border-width:var(--hub-panels-tab-border-width);border-color:var(--hub-panels-tab-border-color);border-start-start-radius:var(--hub-panels-tab-border-radius);border-start-end-radius:var(--hub-panels-tab-border-radius);cursor:pointer;transition:var(--hub-panels-tab-transition)}.hub-panels__nav-link:hover:not(:disabled):not(.hub-panels__nav-link--active){color:var(--hub-panels-tab-color-hover);background:var(--hub-panels-tab-bg-hover)}.hub-panels__nav-link:focus-visible{z-index:1;outline:0;box-shadow:0 0 0 var(--hub-panels-tab-focus-ring-width) var(--hub-panels-tab-focus-ring-color)}.hub-panels__nav-link--active{color:var(--hub-panels-tab-color-active);background:var(--hub-panels-tab-bg-active);border-color:var(--hub-panels-tab-border-color-active)}.hub-panels__nav-link:disabled{color:var(--hub-panels-tab-color-disabled);background:var(--hub-panels-tab-bg-disabled);cursor:not-allowed}.hub-panels__remove-btn{display:inline-flex;align-items:center;line-height:1;opacity:var(--hub-panels-remove-btn-opacity)}.hub-panels__remove-btn:hover{opacity:var(--hub-panels-remove-btn-opacity-hover)}.hub-panels__spacer{flex:1 1 auto;background:var(--hub-panels-header-bg);border-bottom:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__content{padding:var(--hub-panels-content-padding-y) var(--hub-panels-content-padding-x);background:var(--hub-panels-content-bg);box-shadow:var(--hub-panels-content-box-shadow)}.hub-panels__content--accordion{padding:0;background:transparent;box-shadow:none}.hub-panels__content--multiple-parking{display:none}.hub-panels__multiple-layout{display:flex;align-items:stretch;gap:var(--hub-panels-pane-gap);overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth}.hub-panels__multiple-block{display:flex;flex-direction:column;flex:1 0 var(--hub-panels-pane-min-width);align-self:stretch;min-width:var(--hub-panels-pane-min-width);min-height:100%}.hub-panels__multiple-block.hub-panels--vertical{flex-direction:row;flex:1 1 auto;width:100%;min-width:100%;min-height:var(--hub-panels-pane-min-height)}.hub-panels__multiple-block>.hub-panels__content{display:flex;flex:1 1 auto;min-height:0}.hub-panels__multiple-block.hub-panels--vertical>.hub-panels__content{flex:1 1 auto;width:auto;min-width:max(var(--hub-panels-pane-min-width),var(--hub-panels-multiple-vertical-panel-min-width, 0px))}.hub-panels__multiple-pane-host{display:flex;flex:1 1 auto;width:100%;min-height:0}.hub-panels__multiple-pane-host>.hub-panels__panel{flex:1 1 auto;width:100%;height:100%}.hub-panels__multiple-pane-host>.hub-panels__panel.hub-panels__panel--active{display:flex;flex-direction:column}.hub-panels__multiple-pane-host>.hub-panels__panel.hub-panels__panel--active>div{flex:1 1 auto;min-height:0}.hub-panels--vertical.hub-panels--multiple>.hub-panels__multiple-layout{flex-direction:column;align-items:stretch;width:100%}.hub-panels--pills.hub-panels--multiple.hub-panels--vertical>.hub-panels__multiple-layout>.hub-panels__multiple-block+.hub-panels__multiple-block{padding-top:var(--hub-panels-nav-content-gap);border-top:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__panel{display:none}.hub-panels__panel--active{display:block}.hub-panels--tabs:not(.hub-panels--vertical):not(.hub-panels--multiple)>.hub-panels__header{margin-top:var(--hub-panels-strip-margin-top)}.hub-panels--tabs:not(.hub-panels--vertical):not(.hub-panels--multiple)>.hub-panels__content{border:var(--hub-panels-border-width) solid var(--hub-panels-border-color);border-top:0;border-end-start-radius:var(--hub-panels-border-radius);border-end-end-radius:var(--hub-panels-border-radius)}.hub-panels--tabs:not(.hub-panels--vertical):not(.hub-panels--multiple) .hub-panels__nav--tabs .hub-panels__nav-link--active{border-color:var(--hub-panels-border-color);border-bottom-color:var(--hub-panels-tab-bg-active);box-shadow:var(--hub-panels-tab-active-shadow)}.hub-panels--pills>.hub-panels__header{margin-bottom:var(--hub-panels-nav-content-gap)}.hub-panels--pills>.hub-panels__content{border:var(--hub-panels-pill-content-border-width) solid var(--hub-panels-border-color);border-radius:var(--hub-panels-border-radius)}.hub-panels--vertical{display:flex;align-items:stretch}.hub-panels--vertical .hub-panels__header{flex-direction:column}.hub-panels--vertical .hub-panels__nav-scroller{overflow:visible}.hub-panels--vertical .hub-panels__content{flex:1 1 auto;min-width:0}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple)>.hub-panels__header{margin-inline-start:var(--hub-panels-strip-margin-top);align-self:stretch;min-height:0}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__spacer{display:none}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav-scroller{flex:1 1 auto;align-self:stretch;min-height:100%}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--vertical{flex:1 1 auto;align-self:stretch;min-height:100%}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--vertical .hub-panels__nav-item{width:100%}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--vertical .hub-panels__nav-link{width:calc(100% + var(--hub-panels-border-width));justify-content:flex-start;margin-bottom:0;border-start-start-radius:var(--hub-panels-tab-border-radius);border-start-end-radius:0;border-end-start-radius:var(--hub-panels-tab-border-radius);border-end-end-radius:0;margin-inline-end:calc(-1 * var(--hub-panels-border-width))}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple)>.hub-panels__content{border:var(--hub-panels-border-width) solid var(--hub-panels-border-color);border-inline-start:0;border-start-end-radius:var(--hub-panels-border-radius);border-end-end-radius:var(--hub-panels-border-radius)}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--tabs .hub-panels__nav-link--active{z-index:1;border-color:var(--hub-panels-border-color);border-inline-end-color:var(--hub-panels-tab-bg-active);box-shadow:var(--hub-panels-tab-active-shadow-vertical)}.hub-panels--pills.hub-panels--vertical>.hub-panels__header{margin-bottom:0;margin-inline-end:var(--hub-panels-nav-content-gap)}.hub-panels--card{display:flex}.hub-panels--card>.hub-panels__content{display:flex;flex-direction:column;gap:var(--hub-panels-card-gap, var(--hub-ref-space-3, 1rem));width:100%;padding:0;background:transparent;box-shadow:none}\n", ".hub-panels__panel--accordion{display:block;color:var(--hub-panels-accordion-color);background-color:var(--hub-panels-accordion-bg);border:var(--hub-panels-accordion-border-width) solid var(--hub-panels-accordion-border-color)}.hub-panels__panel--accordion:not(:first-of-type){border-top:0}.hub-panels__panel--accordion:first-of-type{border-start-start-radius:var(--hub-panels-accordion-border-radius);border-start-end-radius:var(--hub-panels-accordion-border-radius)}.hub-panels__panel--accordion:first-of-type>.hub-panels__accordion-header .hub-panels__accordion-btn{border-start-start-radius:var(--hub-panels-accordion-inner-border-radius);border-start-end-radius:var(--hub-panels-accordion-inner-border-radius)}.hub-panels__panel--accordion:last-of-type{border-end-start-radius:var(--hub-panels-accordion-border-radius);border-end-end-radius:var(--hub-panels-accordion-border-radius)}.hub-panels__panel--accordion:last-of-type>.hub-panels__accordion-header .hub-panels__accordion-btn--collapsed{border-end-start-radius:var(--hub-panels-accordion-inner-border-radius);border-end-end-radius:var(--hub-panels-accordion-inner-border-radius)}.hub-panels__panel--accordion:last-of-type>.hub-panels__accordion-collapse{border-end-start-radius:var(--hub-panels-accordion-border-radius);border-end-end-radius:var(--hub-panels-accordion-border-radius)}.hub-panels__accordion-header{margin:0}.hub-panels__accordion-btn{position:relative;display:flex;align-items:center;width:100%;gap:var(--hub-panels-tab-gap);padding:var(--hub-panels-accordion-btn-padding-y) var(--hub-panels-accordion-btn-padding-x);font-family:var(--hub-panels-tab-font-family);font-size:var(--hub-panels-tab-font-size);line-height:var(--hub-panels-tab-line-height);text-align:left;color:var(--hub-panels-accordion-btn-color);background-color:var(--hub-panels-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--hub-panels-accordion-transition);cursor:pointer}.hub-panels__accordion-btn:after{flex-shrink:0;width:var(--hub-panels-accordion-btn-icon-width);height:var(--hub-panels-accordion-btn-icon-width);margin-left:auto;content:\"\";background-color:var(--hub-panels-accordion-icon-active-color);-webkit-mask-image:var(--hub-panels-accordion-btn-icon-mask);mask-image:var(--hub-panels-accordion-btn-icon-mask);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-position:center;mask-position:center;transform:var(--hub-panels-accordion-btn-icon-transform);transition:var(--hub-panels-accordion-btn-icon-transition)}.hub-panels__accordion-btn:not(.hub-panels__accordion-btn--collapsed){color:var(--hub-panels-accordion-active-color);background-color:var(--hub-panels-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--hub-panels-accordion-border-width)) 0 var(--hub-panels-accordion-border-color)}.hub-panels__accordion-btn--collapsed:after{background-color:var(--hub-panels-accordion-icon-color);transform:none}.hub-panels__accordion-btn:hover:not(:disabled){z-index:2}.hub-panels__accordion-btn:focus-visible{z-index:3;outline:0;box-shadow:var(--hub-panels-accordion-btn-focus-box-shadow)}.hub-panels__accordion-btn:disabled{color:var(--hub-panels-tab-color-disabled);cursor:not-allowed}.hub-panels__accordion-collapse{display:grid;grid-template-rows:1fr;transition:grid-template-rows var(--hub-panels-accordion-collapse-transition-duration) var(--hub-panels-accordion-collapse-transition-easing)}.hub-panels__accordion-collapse--collapsed{grid-template-rows:0fr}.hub-panels__accordion-collapse>.hub-panels__accordion-body{min-height:0;overflow:hidden;opacity:1;padding:var(--hub-panels-accordion-body-padding-y) var(--hub-panels-accordion-body-padding-x);transition:opacity var(--hub-panels-accordion-collapse-transition-duration) var(--hub-panels-accordion-collapse-transition-easing),padding var(--hub-panels-accordion-collapse-transition-duration) var(--hub-panels-accordion-collapse-transition-easing)}.hub-panels__accordion-collapse--collapsed>.hub-panels__accordion-body{opacity:0;padding-top:0;padding-bottom:0}.hub-panels--flush .hub-panels__panel--accordion{border-right:0;border-left:0;border-radius:0}.hub-panels--flush .hub-panels__panel--accordion:first-of-type{border-top:0}.hub-panels--flush .hub-panels__panel--accordion:last-of-type{border-bottom:0}.hub-panels--flush .hub-panels__panel--accordion>.hub-panels__accordion-collapse,.hub-panels--flush .hub-panels__panel--accordion>.hub-panels__accordion-header .hub-panels__accordion-btn{border-radius:0}\n"] }]
785
+ }, template: "@if (!isAccordionView() && !isCardView()) {\n\t@if (multiple()) {\n\t\t<div class=\"hub-panels__multiple-layout\">\n\t\t\t@for (group of multipleHeaderGroups(); track group.activePanel ?? group.headers[0]) {\n\t\t\t\t<div\n\t\t\t\t\t#multipleBlock\n\t\t\t\t\tclass=\"hub-panels hub-panels__multiple-block\"\n\t\t\t\t\t[class.hub-panels--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t[class.hub-panels--pills]=\"type() === 'pills'\"\n\t\t\t\t\t[class.hub-panels--vertical]=\"vertical()\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"hub-panels__header\">\n\t\t\t\t\t\t<ul\n\t\t\t\t\t\t\tclass=\"hub-panels__nav\"\n\t\t\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"config.ariaLabel\"\n\t\t\t\t\t\t\t[attr.aria-orientation]=\"vertical() ? 'vertical' : null\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--pills]=\"type() === 'pills'\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--vertical]=\"vertical()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--justified]=\"justified()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@for (panel of group.headers; track panel) {\n\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-item\"\n\t\t\t\t\t\t\t\t\t[class]=\"panel.customClass()\"\n\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-item--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-item--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-link\"\n\t\t\t\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\t\t\t\t[id]=\"panel.id() + '-link'\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"panel.disabled() || formDisabled()\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-controls]=\"panel.id()\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t\t[attr.tabindex]=\"panel.active() || (!activePanel() && panelIndex(panel) === 0) ? null : -1\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"selectPanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t(keydown)=\"onPanelKeydown($event, panelIndex(panel))\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t@if (panel.headingRef(); as headingRef) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingRef\" />\n\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t{{ panel.heading() }}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (panel.removable()) {\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__remove-btn\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); removePanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t\t\t>&times;</span\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t@if (!justified() && type() !== 'pills' && !vertical()) {\n\t\t\t\t\t\t\t<div class=\"hub-panels__spacer\"></div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t@if (group.activePanel) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"hub-panels__content\"\n\t\t\t\t\t\t\t[class.hub-panels__content--pills]=\"type() === 'pills'\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t#multiplePaneHost\n\t\t\t\t\t\t\t\tclass=\"hub-panels__multiple-pane-host\"\n\t\t\t\t\t\t\t\t[attr.data-panel-id]=\"group.activePanel.id()\"\n\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t} @else {\n\t\t<div class=\"hub-panels__header\">\n\t\t\t@if (scrollable() && !backwardIsDisabled()) {\n\t\t\t\t<button\n\t\t\t\t\t#prevBtn\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-panels__scroll-btn hub-panels__scroll-btn--backward\"\n\t\t\t\t\t[attr.aria-label]=\"config.scrollBackwardAriaLabel\"\n\t\t\t\t\t(click)=\"navBackward()\"\n\t\t\t\t></button>\n\t\t\t}\n\n\t\t\t<div #navScroller class=\"hub-panels__nav-scroller\" (scroll)=\"onScroll()\">\n\t\t\t\t<ul\n\t\t\t\t\tclass=\"hub-panels__nav\"\n\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\t[attr.aria-label]=\"config.ariaLabel\"\n\t\t\t\t\t[attr.aria-orientation]=\"vertical() ? 'vertical' : null\"\n\t\t\t\t\t[class.hub-panels__nav--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t[class.hub-panels__nav--pills]=\"type() === 'pills'\"\n\t\t\t\t\t[class.hub-panels__nav--vertical]=\"vertical()\"\n\t\t\t\t\t[class.hub-panels__nav--justified]=\"justified()\"\n\t\t\t\t>\n\t\t\t\t\t@for (panel of panels(); track panel; let index = $index) {\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\tclass=\"hub-panels__nav-item\"\n\t\t\t\t\t\t\t[class]=\"panel.customClass()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav-item--active]=\"panel.active()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav-item--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-link\"\n\t\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\t\t[id]=\"panel.id() + '-link'\"\n\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t[disabled]=\"panel.disabled() || formDisabled()\"\n\t\t\t\t\t\t\t\t[attr.aria-controls]=\"panel.id()\"\n\t\t\t\t\t\t\t\t[attr.aria-selected]=\"panel.active()\"\n\t\t\t\t\t\t\t\t[attr.tabindex]=\"panel.active() || (!activePanel() && index === 0) ? null : -1\"\n\t\t\t\t\t\t\t\t(click)=\"selectPanel(panel)\"\n\t\t\t\t\t\t\t\t(keydown)=\"onPanelKeydown($event, index)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (panel.headingRef(); as headingRef) {\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingRef\" />\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t{{ panel.heading() }}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@if (panel.removable()) {\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__remove-btn\"\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); removePanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t>&times;</span\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t\t@if (!justified() && type() !== 'pills') {\n\t\t\t\t\t<div class=\"hub-panels__spacer\"></div>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t@if (scrollable() && !forwardIsDisabled()) {\n\t\t\t\t<button\n\t\t\t\t\t#nextBtn\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-panels__scroll-btn hub-panels__scroll-btn--forward\"\n\t\t\t\t\t[attr.aria-label]=\"config.scrollForwardAriaLabel\"\n\t\t\t\t\t(click)=\"navForward()\"\n\t\t\t\t></button>\n\t\t\t}\n\t\t</div>\n\t}\n}\n\n<div\n\t#contentRoot\n\tclass=\"hub-panels__content\"\n\t[class.hub-panels__content--pills]=\"type() === 'pills'\"\n\t[class.hub-panels__content--accordion]=\"isAccordionView()\"\n\t[class.hub-panels__content--multiple-parking]=\"!isAccordionView() && multiple()\"\n>\n\t@if (activePanelHasRouter()) {\n\t\t<router-outlet />\n\t} @else {\n\t\t<ng-content />\n\t}\n</div>\n", styles: [":where(.hub-panels){--hub-panels-accent: var(--hub-sys-color-primary, #0d6efd);--hub-panels-accent-emphasis: var(--hub-sys-color-primary-emphasis, #0a58ca);--hub-panels-accent-subtle: var(--hub-sys-color-primary-subtle, #e7f1ff);--hub-panels-accent-on: var(--hub-sys-color-primary-on, #fff);--hub-panels-flex-direction: row;--hub-panels-border-width: var(--hub-container-border-width, var(--hub-ref-border-width, 1px));--hub-panels-border-color: var(--hub-container-border-color, var(--hub-sys-border-color-default, #dee2e6));--hub-panels-border-radius: var(--hub-container-border-radius, var(--hub-ref-radius-md, .375rem));--hub-panels-content-bg: var(--hub-container-bg, var(--hub-sys-surface-page, #fff));--hub-panels-header-bg: var(--hub-panels-content-bg);--hub-panels-content-box-shadow: none;--hub-panels-content-padding-x: var(--hub-container-padding-x, var(--hub-ref-space-3, 1rem));--hub-panels-content-padding-y: var(--hub-container-padding-y, var(--hub-ref-space-3, 1rem));--hub-panels-nav-btn-width: 1.5rem;--hub-panels-nav-btn-height: 1.5rem;--hub-panels-backward-btn-bg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23212529' d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3E%3C/svg%3E\");--hub-panels-forward-btn-bg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23212529' d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E\");--hub-panels-nav-link-padding-x: var(--hub-ref-space-3, 1rem);--hub-panels-nav-link-padding-y: var(--hub-ref-space-2, .5rem);--hub-panels-nav-link-color: var(--hub-sys-text-primary, #212529);--hub-panels-nav-link-hover-color: var(--hub-panels-accent-emphasis);--hub-panels-nav-link-active-color: var(--hub-panels-accent);--hub-panels-nav-link-active-bg: var(--hub-panels-content-bg);--hub-panels-nav-link-disabled-color: var(--hub-sys-text-muted, #6c757d);--hub-panels-tab-font-family: var(--hub-container-font-family, var(--hub-ref-font-family-base));--hub-panels-tab-font-size: var(--hub-container-font-size, var(--hub-ref-font-size-base, 1rem));--hub-panels-tab-font-weight: var(--hub-ref-font-weight-medium, 500);--hub-panels-tab-line-height: var(--hub-ref-line-height-base, 1.5);--hub-panels-tab-padding-x: var(--hub-panels-nav-link-padding-x);--hub-panels-tab-padding-y: var(--hub-panels-nav-link-padding-y);--hub-panels-tab-gap: var(--hub-ref-space-2, .5rem);--hub-panels-tab-bg: transparent;--hub-panels-tab-color: var(--hub-panels-nav-link-color);--hub-panels-tab-border-width: var(--hub-panels-border-width);--hub-panels-tab-border-style: solid;--hub-panels-tab-border-color: transparent;--hub-panels-tab-border-radius: var(--hub-panels-border-radius);--hub-panels-tab-bg-hover: var(--hub-ref-surface-2, #f8f9fa);--hub-panels-tab-color-hover: var(--hub-panels-nav-link-hover-color);--hub-panels-tab-bg-active: var(--hub-panels-nav-link-active-bg);--hub-panels-tab-color-active: var(--hub-panels-nav-link-active-color);--hub-panels-tab-border-color-active: var(--hub-panels-accent);--hub-panels-tab-bg-disabled: transparent;--hub-panels-tab-color-disabled: var(--hub-panels-nav-link-disabled-color);--hub-panels-tab-focus-ring-width: var(--hub-sys-focus-ring-width, .25rem);--hub-panels-tab-focus-ring-color: var(--hub-sys-focus-ring-color, rgba(13, 110, 253, .25));--hub-panels-tab-transition: var(--hub-sys-transition-base, all .2s ease-in-out);--hub-panels-tab-active-shadow: 0 -.25rem .5rem rgba(0, 0, 0, .06);--hub-panels-tab-active-shadow-vertical: -.25rem 0 .5rem rgba(0, 0, 0, .06);--hub-panels-strip-margin-top: var(--hub-ref-space-2, .5rem);--hub-panels-nav-gap: 0;--hub-panels-pill-border-radius: var(--hub-ref-radius-pill, 50rem);--hub-panels-pill-bg-active: var(--hub-panels-accent);--hub-panels-pill-color-active: var(--hub-panels-accent-on);--hub-panels-pill-gap: var(--hub-ref-space-2, .5rem);--hub-panels-pill-content-border-width: 0;--hub-panels-remove-btn-opacity: .6;--hub-panels-remove-btn-opacity-hover: 1;--hub-panels-nav-content-gap: var(--hub-ref-space-2, .5rem);--hub-panels-pane-min-width: 16rem;--hub-panels-pane-min-height: 8rem;--hub-panels-pane-gap: 0;--hub-panels-card-gap: var(--hub-ref-space-3, 1rem);--hub-panels-accordion-color: var(--hub-accordion-color, var(--hub-sys-text-primary, #212529));--hub-panels-accordion-bg: var(--hub-accordion-bg, var(--hub-sys-surface-page, #fff));--hub-panels-accordion-border-width: var(--hub-accordion-border-width, var(--hub-ref-border-width, 1px));--hub-panels-accordion-border-color: var(--hub-accordion-border-color, var(--hub-sys-border-color-default, #dee2e6));--hub-panels-accordion-border-radius: var(--hub-accordion-border-radius, var(--hub-ref-radius-sm, .25rem));--hub-panels-accordion-inner-border-radius: var( --hub-accordion-inner-border-radius, calc(var(--hub-panels-accordion-border-radius) - var(--hub-panels-accordion-border-width)) );--hub-panels-accordion-btn-padding-x: var(--hub-accordion-btn-padding-x, 1.25rem);--hub-panels-accordion-btn-padding-y: var(--hub-accordion-btn-padding-y, var(--hub-ref-space-3, 1rem));--hub-panels-accordion-btn-color: var(--hub-accordion-btn-color, var(--hub-sys-text-primary, #212529));--hub-panels-accordion-btn-bg: var(--hub-accordion-btn-bg, var(--hub-sys-surface-page, #fff));--hub-panels-accordion-active-color: var(--hub-accordion-active-color, var(--hub-panels-accent-emphasis));--hub-panels-accordion-active-bg: var(--hub-accordion-active-bg, var(--hub-panels-accent-subtle));--hub-panels-accordion-icon-color: var(--hub-accordion-icon-color, var(--hub-panels-accordion-btn-color));--hub-panels-accordion-icon-active-color: var(--hub-accordion-icon-active-color, var(--hub-panels-accordion-active-color));--hub-panels-accordion-btn-icon-mask: var(--hub-accordion-btn-icon-mask, url(\"data:image/svg+xml;charset=UTF-8,%3Csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23000' fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E\"));--hub-panels-accordion-btn-icon-width: var(--hub-accordion-btn-icon-width, 1.25rem);--hub-panels-accordion-btn-icon-transform: var(--hub-accordion-btn-icon-transform, rotate(-180deg));--hub-panels-accordion-btn-icon-transition: var(--hub-accordion-btn-icon-transition, transform .2s ease-in-out);--hub-panels-accordion-btn-focus-box-shadow: var( --hub-accordion-btn-focus-box-shadow, 0 0 0 var(--hub-sys-focus-ring-width, .25rem) var(--hub-sys-focus-ring-color, rgba(13, 110, 253, .25)) );--hub-panels-accordion-transition: var( --hub-accordion-transition, color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, border-radius .15s ease );--hub-panels-accordion-collapse-transition-duration: var(--hub-accordion-collapse-transition-duration, .25s);--hub-panels-accordion-collapse-transition-easing: var( --hub-accordion-collapse-transition-easing, cubic-bezier(.4, 0, .2, 1) );--hub-panels-accordion-body-padding-x: var(--hub-accordion-body-padding-x, 1.25rem);--hub-panels-accordion-body-padding-y: var(--hub-accordion-body-padding-y, var(--hub-ref-space-3, 1rem))}:where(.hub-panels[data-variant]){--hub-panels-accent-emphasis: color-mix(in oklch, var(--hub-panels-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-panels-accent-subtle: color-mix(in oklch, var(--hub-panels-accent) 12%, var(--hub-sys-surface-page, #fff));--hub-panels-accent-on: oklch(from var(--hub-panels-accent) clamp(0, (.62 - l) * 1000, 1) 0 h)}:where(.hub-panels[data-variant=primary]){--hub-panels-accent: var(--hub-sys-color-primary);--hub-panels-accent-emphasis: var(--hub-sys-color-primary-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-primary-subtle);--hub-panels-accent-on: var(--hub-sys-color-primary-on)}:where(.hub-panels[data-variant=secondary]){--hub-panels-accent: var(--hub-sys-color-secondary);--hub-panels-accent-emphasis: var(--hub-sys-color-secondary-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-secondary-subtle);--hub-panels-accent-on: var(--hub-sys-color-secondary-on)}:where(.hub-panels[data-variant=success]){--hub-panels-accent: var(--hub-sys-color-success);--hub-panels-accent-emphasis: var(--hub-sys-color-success-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-success-subtle);--hub-panels-accent-on: var(--hub-sys-color-success-on)}:where(.hub-panels[data-variant=danger]){--hub-panels-accent: var(--hub-sys-color-danger);--hub-panels-accent-emphasis: var(--hub-sys-color-danger-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-danger-subtle);--hub-panels-accent-on: var(--hub-sys-color-danger-on)}:where(.hub-panels[data-variant=warning]){--hub-panels-accent: var(--hub-sys-color-warning);--hub-panels-accent-emphasis: var(--hub-sys-color-warning-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-warning-subtle);--hub-panels-accent-on: var(--hub-sys-color-warning-on)}:where(.hub-panels[data-variant=info]){--hub-panels-accent: var(--hub-sys-color-info);--hub-panels-accent-emphasis: var(--hub-sys-color-info-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-info-subtle);--hub-panels-accent-on: var(--hub-sys-color-info-on)}:where(.hub-panels[data-variant=neutral]){--hub-panels-accent: var(--hub-sys-color-neutral);--hub-panels-accent-emphasis: var(--hub-sys-color-neutral-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-neutral-subtle);--hub-panels-accent-on: var(--hub-sys-color-neutral-on)}:where(.hub-panels[data-variant=light]){--hub-panels-accent: var(--hub-sys-color-light);--hub-panels-accent-emphasis: var(--hub-sys-color-light-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-light-subtle);--hub-panels-accent-on: var(--hub-sys-color-light-on)}:where(.hub-panels[data-variant=dark]){--hub-panels-accent: var(--hub-sys-color-dark);--hub-panels-accent-emphasis: var(--hub-sys-color-dark-emphasis);--hub-panels-accent-subtle: var(--hub-sys-color-dark-subtle);--hub-panels-accent-on: var(--hub-sys-color-dark-on)}\n", ".hub-panels{display:block;width:100%;box-sizing:border-box}.hub-panels,.hub-panels *,.hub-panels *:before,.hub-panels *:after{box-sizing:border-box}.hub-panels__header{display:flex;flex-direction:var(--hub-panels-flex-direction);align-items:stretch;background:var(--hub-panels-header-bg)}.hub-panels__scroll-btn{flex:0 0 auto;align-self:center;width:var(--hub-panels-nav-btn-width);height:var(--hub-panels-nav-btn-height);padding:0;border:0;cursor:pointer;background-color:transparent;background-position:center;background-repeat:no-repeat;background-size:1rem 1rem}.hub-panels__scroll-btn--backward{background-image:var(--hub-panels-backward-btn-bg)}.hub-panels__scroll-btn--forward{background-image:var(--hub-panels-forward-btn-bg)}.hub-panels__nav-scroller{display:flex;flex:1 1 auto;overflow-x:auto;background:var(--hub-panels-header-bg);scroll-behavior:smooth;scrollbar-width:none}.hub-panels__nav-scroller::-webkit-scrollbar{display:none}.hub-panels__nav{display:flex;flex:0 0 auto;flex-wrap:nowrap;gap:var(--hub-panels-nav-gap);margin:0;padding:0;list-style:none}.hub-panels__nav--tabs{border-bottom:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__nav--tabs .hub-panels__nav-link{margin-bottom:calc(-1 * var(--hub-panels-border-width))}.hub-panels__nav--pills{gap:var(--hub-panels-pill-gap)}.hub-panels__nav--pills .hub-panels__nav-link{border-radius:var(--hub-panels-pill-border-radius)}.hub-panels__nav--pills .hub-panels__nav-link--active{color:var(--hub-panels-pill-color-active);background:var(--hub-panels-pill-bg-active);border-color:transparent}.hub-panels__nav--justified{flex:1 1 auto}.hub-panels__nav--justified .hub-panels__nav-item{flex:1 1 0}.hub-panels__nav--justified .hub-panels__nav-link{width:100%;justify-content:center}.hub-panels__nav--vertical{flex-direction:column}.hub-panels__nav--vertical.hub-panels__nav--tabs{border-bottom:0;border-inline-end:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__nav--vertical.hub-panels__nav--tabs .hub-panels__nav-link{margin-bottom:0;margin-inline-end:calc(-1 * var(--hub-panels-border-width))}.hub-panels__nav-item{display:flex;flex:0 0 auto}.hub-panels__nav-link{position:relative;display:inline-flex;align-items:center;gap:var(--hub-panels-tab-gap);padding:var(--hub-panels-tab-padding-y) var(--hub-panels-tab-padding-x);font-family:var(--hub-panels-tab-font-family);font-size:var(--hub-panels-tab-font-size);font-weight:var(--hub-panels-tab-font-weight);line-height:var(--hub-panels-tab-line-height);white-space:nowrap;color:var(--hub-panels-tab-color);background:var(--hub-panels-tab-bg);border-style:var(--hub-panels-tab-border-style);border-width:var(--hub-panels-tab-border-width);border-color:var(--hub-panels-tab-border-color);border-start-start-radius:var(--hub-panels-tab-border-radius);border-start-end-radius:var(--hub-panels-tab-border-radius);cursor:pointer;transition:var(--hub-panels-tab-transition)}.hub-panels__nav-link:hover:not(:disabled):not(.hub-panels__nav-link--active){color:var(--hub-panels-tab-color-hover);background:var(--hub-panels-tab-bg-hover)}.hub-panels__nav-link:focus-visible{z-index:1;outline:0;box-shadow:0 0 0 var(--hub-panels-tab-focus-ring-width) var(--hub-panels-tab-focus-ring-color)}.hub-panels__nav-link--active{color:var(--hub-panels-tab-color-active);background:var(--hub-panels-tab-bg-active);border-color:var(--hub-panels-tab-border-color-active)}.hub-panels__nav-link:disabled{color:var(--hub-panels-tab-color-disabled);background:var(--hub-panels-tab-bg-disabled);cursor:not-allowed}.hub-panels__remove-btn{display:inline-flex;align-items:center;line-height:1;opacity:var(--hub-panels-remove-btn-opacity)}.hub-panels__remove-btn:hover{opacity:var(--hub-panels-remove-btn-opacity-hover)}.hub-panels__spacer{flex:1 1 auto;background:var(--hub-panels-header-bg);border-bottom:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__content{padding:var(--hub-panels-content-padding-y) var(--hub-panels-content-padding-x);background:var(--hub-panels-content-bg);box-shadow:var(--hub-panels-content-box-shadow)}.hub-panels__content--accordion{padding:0;background:transparent;box-shadow:none}.hub-panels__content--multiple-parking{display:none}.hub-panels__multiple-layout{display:flex;align-items:stretch;gap:var(--hub-panels-pane-gap);overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth}.hub-panels__multiple-block{display:flex;flex-direction:column;flex:1 0 var(--hub-panels-pane-min-width);align-self:stretch;min-width:var(--hub-panels-pane-min-width);min-height:100%}.hub-panels__multiple-block.hub-panels--vertical{flex-direction:row;flex:1 1 auto;width:100%;min-width:100%;min-height:var(--hub-panels-pane-min-height)}.hub-panels__multiple-block>.hub-panels__content{display:flex;flex:1 1 auto;min-height:0}.hub-panels__multiple-block.hub-panels--vertical>.hub-panels__content{flex:1 1 auto;width:auto;min-width:max(var(--hub-panels-pane-min-width),var(--hub-panels-multiple-vertical-panel-min-width, 0px))}.hub-panels__multiple-pane-host{display:flex;flex:1 1 auto;width:100%;min-height:0}.hub-panels__multiple-pane-host>.hub-panels__panel{flex:1 1 auto;width:100%;height:100%}.hub-panels__multiple-pane-host>.hub-panels__panel.hub-panels__panel--active{display:flex;flex-direction:column}.hub-panels__multiple-pane-host>.hub-panels__panel.hub-panels__panel--active>div{flex:1 1 auto;min-height:0}.hub-panels--vertical.hub-panels--multiple>.hub-panels__multiple-layout{flex-direction:column;align-items:stretch;width:100%}.hub-panels--pills.hub-panels--multiple.hub-panels--vertical>.hub-panels__multiple-layout>.hub-panels__multiple-block+.hub-panels__multiple-block{padding-top:var(--hub-panels-nav-content-gap);border-top:var(--hub-panels-border-width) solid var(--hub-panels-border-color)}.hub-panels__panel{display:none}.hub-panels__panel--active{display:block}.hub-panels--tabs:not(.hub-panels--vertical):not(.hub-panels--multiple)>.hub-panels__header{margin-top:var(--hub-panels-strip-margin-top)}.hub-panels--tabs:not(.hub-panels--vertical):not(.hub-panels--multiple)>.hub-panels__content{border:var(--hub-panels-border-width) solid var(--hub-panels-border-color);border-top:0;border-end-start-radius:var(--hub-panels-border-radius);border-end-end-radius:var(--hub-panels-border-radius)}.hub-panels--tabs:not(.hub-panels--vertical):not(.hub-panels--multiple) .hub-panels__nav--tabs .hub-panels__nav-link--active{border-color:var(--hub-panels-border-color);border-bottom-color:var(--hub-panels-tab-bg-active);box-shadow:var(--hub-panels-tab-active-shadow)}.hub-panels--pills>.hub-panels__header{margin-bottom:var(--hub-panels-nav-content-gap)}.hub-panels--pills>.hub-panels__content{border:var(--hub-panels-pill-content-border-width) solid var(--hub-panels-border-color);border-radius:var(--hub-panels-border-radius)}.hub-panels--vertical{display:flex;align-items:stretch}.hub-panels--vertical .hub-panels__header{flex-direction:column}.hub-panels--vertical .hub-panels__nav-scroller{overflow:visible}.hub-panels--vertical .hub-panels__content{flex:1 1 auto;min-width:0}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple)>.hub-panels__header{margin-inline-start:var(--hub-panels-strip-margin-top);align-self:stretch;min-height:0}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__spacer{display:none}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav-scroller{flex:1 1 auto;align-self:stretch;min-height:100%}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--vertical{flex:1 1 auto;align-self:stretch;min-height:100%}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--vertical .hub-panels__nav-item{width:100%}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--vertical .hub-panels__nav-link{width:calc(100% + var(--hub-panels-border-width));justify-content:flex-start;margin-bottom:0;border-start-start-radius:var(--hub-panels-tab-border-radius);border-start-end-radius:0;border-end-start-radius:var(--hub-panels-tab-border-radius);border-end-end-radius:0;margin-inline-end:calc(-1 * var(--hub-panels-border-width))}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple)>.hub-panels__content{border:var(--hub-panels-border-width) solid var(--hub-panels-border-color);border-inline-start:0;border-start-end-radius:var(--hub-panels-border-radius);border-end-end-radius:var(--hub-panels-border-radius)}.hub-panels--tabs.hub-panels--vertical:not(.hub-panels--multiple) .hub-panels__nav--tabs .hub-panels__nav-link--active{z-index:1;border-color:var(--hub-panels-border-color);border-inline-end-color:var(--hub-panels-tab-bg-active);box-shadow:var(--hub-panels-tab-active-shadow-vertical)}.hub-panels--pills.hub-panels--vertical>.hub-panels__header{margin-bottom:0;margin-inline-end:var(--hub-panels-nav-content-gap)}.hub-panels--card{display:flex}.hub-panels--card>.hub-panels__content{display:flex;flex-direction:column;gap:var(--hub-panels-card-gap, var(--hub-ref-space-3, 1rem));width:100%;padding:0;background:transparent;box-shadow:none}\n", ".hub-panels__panel--accordion{display:block;color:var(--hub-panels-accordion-color);background-color:var(--hub-panels-accordion-bg);border:var(--hub-panels-accordion-border-width) solid var(--hub-panels-accordion-border-color)}.hub-panels__panel--accordion:not(:first-of-type){border-top:0}.hub-panels__panel--accordion:first-of-type{border-start-start-radius:var(--hub-panels-accordion-border-radius);border-start-end-radius:var(--hub-panels-accordion-border-radius)}.hub-panels__panel--accordion:first-of-type>.hub-panels__accordion-header .hub-panels__accordion-btn{border-start-start-radius:var(--hub-panels-accordion-inner-border-radius);border-start-end-radius:var(--hub-panels-accordion-inner-border-radius)}.hub-panels__panel--accordion:last-of-type{border-end-start-radius:var(--hub-panels-accordion-border-radius);border-end-end-radius:var(--hub-panels-accordion-border-radius)}.hub-panels__panel--accordion:last-of-type>.hub-panels__accordion-header .hub-panels__accordion-btn--collapsed{border-end-start-radius:var(--hub-panels-accordion-inner-border-radius);border-end-end-radius:var(--hub-panels-accordion-inner-border-radius)}.hub-panels__panel--accordion:last-of-type>.hub-panels__accordion-collapse{border-end-start-radius:var(--hub-panels-accordion-border-radius);border-end-end-radius:var(--hub-panels-accordion-border-radius)}.hub-panels__accordion-header{margin:0}.hub-panels__accordion-btn{position:relative;display:flex;align-items:center;width:100%;gap:var(--hub-panels-tab-gap);padding:var(--hub-panels-accordion-btn-padding-y) var(--hub-panels-accordion-btn-padding-x);font-family:var(--hub-panels-tab-font-family);font-size:var(--hub-panels-tab-font-size);line-height:var(--hub-panels-tab-line-height);text-align:left;color:var(--hub-panels-accordion-btn-color);background-color:var(--hub-panels-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--hub-panels-accordion-transition);cursor:pointer}.hub-panels__accordion-btn:after{flex-shrink:0;width:var(--hub-panels-accordion-btn-icon-width);height:var(--hub-panels-accordion-btn-icon-width);margin-left:auto;content:\"\";background-color:var(--hub-panels-accordion-icon-active-color);-webkit-mask-image:var(--hub-panels-accordion-btn-icon-mask);mask-image:var(--hub-panels-accordion-btn-icon-mask);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-position:center;mask-position:center;transform:var(--hub-panels-accordion-btn-icon-transform);transition:var(--hub-panels-accordion-btn-icon-transition)}.hub-panels__accordion-btn:not(.hub-panels__accordion-btn--collapsed){color:var(--hub-panels-accordion-active-color);background-color:var(--hub-panels-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--hub-panels-accordion-border-width)) 0 var(--hub-panels-accordion-border-color)}.hub-panels__accordion-btn--collapsed:after{background-color:var(--hub-panels-accordion-icon-color);transform:none}.hub-panels__accordion-btn:hover:not(:disabled){z-index:2}.hub-panels__accordion-btn:focus-visible{z-index:3;outline:0;box-shadow:var(--hub-panels-accordion-btn-focus-box-shadow)}.hub-panels__accordion-btn:disabled{color:var(--hub-panels-tab-color-disabled);cursor:not-allowed}.hub-panels__accordion-collapse{display:grid;grid-template-rows:1fr;transition:grid-template-rows var(--hub-panels-accordion-collapse-transition-duration) var(--hub-panels-accordion-collapse-transition-easing)}.hub-panels__accordion-collapse--collapsed{grid-template-rows:0fr}.hub-panels__accordion-collapse>.hub-panels__accordion-body{min-height:0;overflow:hidden;opacity:1;padding:var(--hub-panels-accordion-body-padding-y) var(--hub-panels-accordion-body-padding-x);transition:opacity var(--hub-panels-accordion-collapse-transition-duration) var(--hub-panels-accordion-collapse-transition-easing),padding var(--hub-panels-accordion-collapse-transition-duration) var(--hub-panels-accordion-collapse-transition-easing)}.hub-panels__accordion-collapse--collapsed>.hub-panels__accordion-body{opacity:0;padding-top:0;padding-bottom:0}.hub-panels--flush .hub-panels__panel--accordion{border-right:0;border-left:0;border-radius:0}.hub-panels--flush .hub-panels__panel--accordion:first-of-type{border-top:0}.hub-panels--flush .hub-panels__panel--accordion:last-of-type{border-bottom:0}.hub-panels--flush .hub-panels__panel--accordion>.hub-panels__accordion-collapse,.hub-panels--flush .hub-panels__panel--accordion>.hub-panels__accordion-header .hub-panels__accordion-btn{border-radius:0}\n"] }]
786
786
  }], ctorParameters: () => [], propDecorators: { navScroller: [{ type: i0.ViewChild, args: ['navScroller', { isSignal: true }] }], prevBtn: [{ type: i0.ViewChild, args: ['prevBtn', { isSignal: true }] }], nextBtn: [{ type: i0.ViewChild, args: ['nextBtn', { isSignal: true }] }], contentRoot: [{ type: i0.ViewChild, args: ['contentRoot', { isSignal: true }] }], multiplePaneHosts: [{ type: i0.ViewChildren, args: ['multiplePaneHost', { isSignal: true }] }], multipleBlocks: [{ type: i0.ViewChildren, args: ['multipleBlock', { isSignal: true }] }], panelChange: [{ type: i0.Output, args: ["panelChange"] }], vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], justified: [{ type: i0.Input, args: [{ isSignal: true, alias: "justified", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], isKeysAllowed: [{ type: i0.Input, args: [{ isSignal: true, alias: "isKeysAllowed", required: false }] }], scrollable: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollable", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], flush: [{ type: i0.Input, args: [{ isSignal: true, alias: "flush", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], bindValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindValue", required: false }] }], compareWith: [{ type: i0.Input, args: [{ isSignal: true, alias: "compareWith", required: false }] }] } });
787
787
 
788
788
  /** Monotonic counter backing the auto-generated accessibility ids. */
@@ -1030,7 +1030,7 @@ class PanelComponent {
1030
1030
  this.tabset?.removePanel(this);
1031
1031
  }
1032
1032
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: PanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1033
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: PanelComponent, isStandalone: true, selector: "hub-panel, [hub-panel]", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, removable: { classPropertyName: "removable", publicName: "removable", isSignal: true, isRequired: false, transformFunction: null }, pathMatch: { classPropertyName: "pathMatch", publicName: "pathMatch", isSignal: true, isRequired: false, transformFunction: null }, routerLink: { classPropertyName: "routerLink", publicName: "routerLink", isSignal: true, isRequired: false, transformFunction: null }, queryParams: { classPropertyName: "queryParams", publicName: "queryParams", isSignal: true, isRequired: false, transformFunction: null }, customClass: { classPropertyName: "customClass", publicName: "customClass", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange", selectPanel: "selectPanel", deselectPanel: "deselectPanel", removed: "removed" }, host: { properties: { "attr.id": "accordionView() || cardView() ? null : id()", "attr.role": "alertView() ? 'alert' : (accordionView() || cardView() ? null : 'tabpanel')", "attr.aria-labelledby": "accordionView() || cardView() ? null : id() + '-link'", "attr.data-variant": "alertView() ? (variant() ?? null) : null", "style.--hub-panels-alert-accent": "alertAccent()", "class.hub-panels__panel--active": "active()", "class.hub-panels__panel--accordion": "accordionView()", "class.hub-panels__panel--card": "cardView() && !alertView()", "class.hub-panels__panel--alert": "alertView()" }, classAttribute: "hub-panels__panel" }, exportAs: ["hubPanel"], ngImport: i0, template: "@if (accordionView()) {\n\t<h2 class=\"hub-panels__accordion-header\">\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"hub-panels__accordion-btn\"\n\t\t\t[class.hub-panels__accordion-btn--collapsed]=\"!active()\"\n\t\t\t[id]=\"id() + '-link'\"\n\t\t\t[disabled]=\"disabled() || tabset?.formDisabled()\"\n\t\t\t[attr.aria-expanded]=\"active()\"\n\t\t\t[attr.aria-controls]=\"id()\"\n\t\t\t(click)=\"onAccordionHeaderClick()\"\n\t\t\t(keydown)=\"onAccordionHeaderKeydown($event)\"\n\t\t>\n\t\t\t@if (headingRef(); as headingTemplate) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingTemplate\" />\n\t\t\t} @else {\n\t\t\t\t{{ heading() }}\n\t\t\t}\n\t\t\t@if (removable()) {\n\t\t\t\t<span class=\"hub-panels__remove-btn\" aria-hidden=\"true\" (click)=\"$event.stopPropagation(); removeSelf()\">&times;</span>\n\t\t\t}\n\t\t</button>\n\t</h2>\n}\n\n<!-- Projection slots for every view. In the strip views the wrappers are plain\n\t pass-throughs; in the accordion view they become the animated collapse\n\t region. The header/footer `select` slots and the default `<ng-content>` are\n\t all UNCONDITIONAL \u2014 never wrapped in `@if` \u2014 to avoid the lost-projection\n\t bug that conditional slots cause. Header/footer render in every view; the\n\t `card` view styles them as the card's header and footer bands. -->\n<div\n\t[class.hub-panels__accordion-collapse]=\"accordionView()\"\n\t[class.hub-panels__accordion-collapse--collapsed]=\"accordionView() && !active()\"\n\t[attr.role]=\"accordionView() ? 'region' : null\"\n\t[attr.id]=\"accordionView() ? id() : null\"\n\t[attr.aria-labelledby]=\"accordionView() ? id() + '-link' : null\"\n\t[attr.aria-hidden]=\"accordionView() ? !active() : null\"\n\t[attr.inert]=\"accordionView() && !active() ? '' : null\"\n>\n\t<div [class.hub-panels__accordion-body]=\"accordionView()\">\n\t\t<ng-content select=\"[hubPanelHeader]\" />\n\t\t<div class=\"hub-panels__panel-body\">\n\t\t\t<ng-content />\n\t\t</div>\n\t\t<ng-content select=\"[hubPanelFooter]\" />\n\t</div>\n</div>\n", styles: [":where(.hub-panels__panel--card){--hub-panels-card-bg: var(--hub-sys-surface-page, #fff);--hub-panels-card-color: var(--hub-sys-text-primary, #212529);--hub-panels-card-border-width: var(--hub-ref-border-width, 1px);--hub-panels-card-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-panels-card-border-radius: var(--hub-ref-radius-md, .375rem);--hub-panels-card-box-shadow: var(--hub-sys-shadow-sm, 0 .125rem .25rem rgba(0, 0, 0, .075));--hub-panels-card-padding-x: var(--hub-ref-space-4, 1.25rem);--hub-panels-card-padding-y: var(--hub-ref-space-3, 1rem)}:where(.hub-panels__panel-header,.hub-panels__panel-footer){--hub-panels-panel-header-bg: var(--hub-sys-surface-elevated, #f8f9fa);--hub-panels-panel-header-color: var(--hub-sys-text-primary, #212529);--hub-panels-panel-header-padding-x: var(--hub-ref-space-4, 1.25rem);--hub-panels-panel-header-padding-y: var(--hub-ref-space-3, 1rem);--hub-panels-panel-header-font-weight: 600;--hub-panels-panel-header-border-width: var(--hub-ref-border-width, 1px);--hub-panels-panel-header-border-color: var(--hub-sys-border-color-default, #dee2e6)}.hub-panels__panel-header{display:block;padding:var(--hub-panels-panel-header-padding-y) var(--hub-panels-panel-header-padding-x);color:var(--hub-panels-panel-header-color);background:var(--hub-panels-panel-header-bg);font-weight:var(--hub-panels-panel-header-font-weight);border-bottom:var(--hub-panels-panel-header-border-width) solid var(--hub-panels-panel-header-border-color)}.hub-panels__panel-footer{display:block;padding:var(--hub-panels-panel-header-padding-y) var(--hub-panels-panel-header-padding-x);color:var(--hub-panels-panel-header-color);background:var(--hub-panels-panel-header-bg);border-top:var(--hub-panels-panel-header-border-width) solid var(--hub-panels-panel-header-border-color)}.hub-panels__panel.hub-panels__panel--card{display:flex;flex-direction:column;color:var(--hub-panels-card-color);background:var(--hub-panels-card-bg);border:var(--hub-panels-card-border-width) solid var(--hub-panels-card-border-color);border-radius:var(--hub-panels-card-border-radius);box-shadow:var(--hub-panels-card-box-shadow);overflow:hidden}.hub-panels__panel.hub-panels__panel--card .hub-panels__panel-body{padding:var(--hub-panels-card-padding-y) var(--hub-panels-card-padding-x)}:where(.hub-panels__panel--alert){--hub-panels-alert-bg: var(--hub-sys-surface-elevated, #f8f9fa);--hub-panels-alert-color: var(--hub-sys-text-primary, #212529);--hub-panels-alert-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-panels-alert-accent: var(--hub-sys-border-color-default, #dee2e6);--hub-panels-alert-padding-x: var(--hub-ref-space-4, 1.25rem);--hub-panels-alert-padding-y: var(--hub-ref-space-3, 1rem);--hub-panels-alert-border-radius: var(--hub-ref-radius-md, .375rem);--hub-panels-alert-accent-width: .25rem}:where(.hub-panels__panel--alert[data-variant]){--hub-panels-alert-bg: color-mix(in srgb, var(--hub-panels-alert-accent) 14%, var(--hub-sys-surface-page, #fff));--hub-panels-alert-color: color-mix(in srgb, var(--hub-panels-alert-accent) 72%, var(--hub-sys-text-primary, #212529));--hub-panels-alert-border-color: color-mix(in srgb, var(--hub-panels-alert-accent) 30%, transparent)}:where(.hub-panels__panel--alert[data-variant=primary]){--hub-panels-alert-bg: var(--hub-sys-color-primary-subtle);--hub-panels-alert-color: var(--hub-sys-color-primary-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-primary-border-subtle)}:where(.hub-panels__panel--alert[data-variant=success]){--hub-panels-alert-bg: var(--hub-sys-color-success-subtle);--hub-panels-alert-color: var(--hub-sys-color-success-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-success-border-subtle)}:where(.hub-panels__panel--alert[data-variant=danger]){--hub-panels-alert-bg: var(--hub-sys-color-danger-subtle);--hub-panels-alert-color: var(--hub-sys-color-danger-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-danger-border-subtle)}:where(.hub-panels__panel--alert[data-variant=warning]){--hub-panels-alert-bg: var(--hub-sys-color-warning-subtle);--hub-panels-alert-color: var(--hub-sys-color-warning-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-warning-border-subtle)}:where(.hub-panels__panel--alert[data-variant=info]){--hub-panels-alert-bg: var(--hub-sys-color-info-subtle);--hub-panels-alert-color: var(--hub-sys-color-info-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-info-border-subtle)}.hub-panels__panel.hub-panels__panel--alert{display:flex;flex-direction:column;color:var(--hub-panels-alert-color, var(--hub-sys-text-primary, #212529));background:var(--hub-panels-alert-bg, var(--hub-sys-surface-elevated, #f8f9fa));border:var(--hub-ref-border-width, 1px) solid var(--hub-panels-alert-border-color, var(--hub-sys-border-color-default, #dee2e6));border-inline-start:var(--hub-panels-alert-accent-width) solid var(--hub-panels-alert-accent, var(--hub-sys-border-color-default, #dee2e6));border-radius:var(--hub-panels-alert-border-radius);overflow:hidden}.hub-panels__panel.hub-panels__panel--alert .hub-panels__panel-body{padding:var(--hub-panels-alert-padding-y) var(--hub-panels-alert-padding-x)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1033
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: PanelComponent, isStandalone: true, selector: "hub-panel, [hub-panel]", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, removable: { classPropertyName: "removable", publicName: "removable", isSignal: true, isRequired: false, transformFunction: null }, pathMatch: { classPropertyName: "pathMatch", publicName: "pathMatch", isSignal: true, isRequired: false, transformFunction: null }, routerLink: { classPropertyName: "routerLink", publicName: "routerLink", isSignal: true, isRequired: false, transformFunction: null }, queryParams: { classPropertyName: "queryParams", publicName: "queryParams", isSignal: true, isRequired: false, transformFunction: null }, customClass: { classPropertyName: "customClass", publicName: "customClass", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange", selectPanel: "selectPanel", deselectPanel: "deselectPanel", removed: "removed" }, host: { properties: { "attr.id": "accordionView() || cardView() ? null : id()", "attr.role": "alertView() ? 'alert' : (accordionView() || cardView() ? null : 'tabpanel')", "attr.aria-labelledby": "accordionView() || cardView() ? null : id() + '-link'", "attr.data-variant": "alertView() ? (variant() ?? null) : null", "style.--hub-panels-alert-accent": "alertAccent()", "class.hub-panels__panel--active": "active()", "class.hub-panels__panel--accordion": "accordionView()", "class.hub-panels__panel--card": "cardView() && !alertView()", "class.hub-panels__panel--alert": "alertView()" }, classAttribute: "hub-panels__panel" }, exportAs: ["hubPanel"], ngImport: i0, template: "@if (accordionView()) {\n\t<h2 class=\"hub-panels__accordion-header\">\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"hub-panels__accordion-btn\"\n\t\t\t[class.hub-panels__accordion-btn--collapsed]=\"!active()\"\n\t\t\t[id]=\"id() + '-link'\"\n\t\t\t[disabled]=\"disabled() || tabset?.formDisabled()\"\n\t\t\t[attr.aria-expanded]=\"active()\"\n\t\t\t[attr.aria-controls]=\"id()\"\n\t\t\t(click)=\"onAccordionHeaderClick()\"\n\t\t\t(keydown)=\"onAccordionHeaderKeydown($event)\"\n\t\t>\n\t\t\t@if (headingRef(); as headingTemplate) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingTemplate\" />\n\t\t\t} @else {\n\t\t\t\t{{ heading() }}\n\t\t\t}\n\t\t\t@if (removable()) {\n\t\t\t\t<span class=\"hub-panels__remove-btn\" aria-hidden=\"true\" (click)=\"$event.stopPropagation(); removeSelf()\">&times;</span>\n\t\t\t}\n\t\t</button>\n\t</h2>\n}\n\n<!-- Projection slots for every view. In the strip views the wrappers are plain\n\t pass-throughs; in the accordion view they become the animated collapse\n\t region. The header/footer `select` slots and the default `<ng-content>` are\n\t all UNCONDITIONAL \u2014 never wrapped in `@if` \u2014 to avoid the lost-projection\n\t bug that conditional slots cause. Header/footer render in every view; the\n\t `card` view styles them as the card's header and footer bands. -->\n<div\n\t[class.hub-panels__accordion-collapse]=\"accordionView()\"\n\t[class.hub-panels__accordion-collapse--collapsed]=\"accordionView() && !active()\"\n\t[attr.role]=\"accordionView() ? 'region' : null\"\n\t[attr.id]=\"accordionView() ? id() : null\"\n\t[attr.aria-labelledby]=\"accordionView() ? id() + '-link' : null\"\n\t[attr.aria-hidden]=\"accordionView() ? !active() : null\"\n\t[attr.inert]=\"accordionView() && !active() ? '' : null\"\n>\n\t<div [class.hub-panels__accordion-body]=\"accordionView()\">\n\t\t<ng-content select=\"[hubPanelHeader]\" />\n\t\t<div class=\"hub-panels__panel-body\">\n\t\t\t<ng-content />\n\t\t</div>\n\t\t<ng-content select=\"[hubPanelFooter]\" />\n\t</div>\n</div>\n", styles: [":where(.hub-panels__panel--card){--hub-panels-card-bg: var(--hub-sys-surface-page, #fff);--hub-panels-card-color: var(--hub-sys-text-primary, #212529);--hub-panels-card-border-width: var(--hub-ref-border-width, 1px);--hub-panels-card-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-panels-card-border-radius: var(--hub-ref-radius-md, .375rem);--hub-panels-card-box-shadow: var(--hub-sys-shadow-sm, 0 .125rem .25rem rgba(0, 0, 0, .075));--hub-panels-card-padding-x: var(--hub-ref-space-4, 1.5rem);--hub-panels-card-padding-y: var(--hub-ref-space-3, 1rem)}:where(.hub-panels__panel-header,.hub-panels__panel-footer){--hub-panels-panel-header-bg: var(--hub-sys-surface-elevated, #f8f9fa);--hub-panels-panel-header-color: var(--hub-sys-text-primary, #212529);--hub-panels-panel-header-padding-x: var(--hub-ref-space-4, 1.5rem);--hub-panels-panel-header-padding-y: var(--hub-ref-space-3, 1rem);--hub-panels-panel-header-font-weight: var(--hub-ref-font-weight-semibold, 600);--hub-panels-panel-header-border-width: var(--hub-ref-border-width, 1px);--hub-panels-panel-header-border-color: var(--hub-sys-border-color-default, #dee2e6)}.hub-panels__panel-header{display:block;padding:var(--hub-panels-panel-header-padding-y) var(--hub-panels-panel-header-padding-x);color:var(--hub-panels-panel-header-color);background:var(--hub-panels-panel-header-bg);font-weight:var(--hub-panels-panel-header-font-weight);border-bottom:var(--hub-panels-panel-header-border-width) solid var(--hub-panels-panel-header-border-color)}.hub-panels__panel-footer{display:block;padding:var(--hub-panels-panel-header-padding-y) var(--hub-panels-panel-header-padding-x);color:var(--hub-panels-panel-header-color);background:var(--hub-panels-panel-header-bg);border-top:var(--hub-panels-panel-header-border-width) solid var(--hub-panels-panel-header-border-color)}.hub-panels__panel.hub-panels__panel--card{display:flex;flex-direction:column;color:var(--hub-panels-card-color);background:var(--hub-panels-card-bg);border:var(--hub-panels-card-border-width) solid var(--hub-panels-card-border-color);border-radius:var(--hub-panels-card-border-radius);box-shadow:var(--hub-panels-card-box-shadow);overflow:hidden}.hub-panels__panel.hub-panels__panel--card .hub-panels__panel-body{padding:var(--hub-panels-card-padding-y) var(--hub-panels-card-padding-x)}:where(.hub-panels__panel--alert){--hub-panels-alert-bg: var(--hub-sys-surface-elevated, #f8f9fa);--hub-panels-alert-color: var(--hub-sys-text-primary, #212529);--hub-panels-alert-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-panels-alert-accent: var(--hub-sys-border-color-default, #dee2e6);--hub-panels-alert-padding-x: var(--hub-ref-space-4, 1.5rem);--hub-panels-alert-padding-y: var(--hub-ref-space-3, 1rem);--hub-panels-alert-border-radius: var(--hub-ref-radius-md, .375rem);--hub-panels-alert-accent-width: .25rem;--hub-panels-alert-content-direction: row;--hub-panels-alert-content-align: flex-start;--hub-panels-alert-content-justify: flex-start;--hub-panels-alert-content-gap: var(--hub-sys-gap-2, .5rem)}:where(.hub-panels__panel--alert[data-variant]){--hub-panels-alert-bg: color-mix(in oklch, var(--hub-panels-alert-accent) 14%, var(--hub-sys-surface-page, #fff));--hub-panels-alert-color: color-mix(in oklch, var(--hub-panels-alert-accent) 72%, var(--hub-sys-text-primary, #212529));--hub-panels-alert-border-color: color-mix(in oklch, var(--hub-panels-alert-accent) 30%, transparent)}:where(.hub-panels__panel--alert[data-variant=primary]){--hub-panels-alert-bg: var(--hub-sys-color-primary-subtle);--hub-panels-alert-color: var(--hub-sys-color-primary-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-primary-border-subtle)}:where(.hub-panels__panel--alert[data-variant=secondary]){--hub-panels-alert-bg: var(--hub-sys-color-secondary-subtle);--hub-panels-alert-color: var(--hub-sys-color-secondary-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-secondary-border-subtle)}:where(.hub-panels__panel--alert[data-variant=success]){--hub-panels-alert-bg: var(--hub-sys-color-success-subtle);--hub-panels-alert-color: var(--hub-sys-color-success-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-success-border-subtle)}:where(.hub-panels__panel--alert[data-variant=danger]){--hub-panels-alert-bg: var(--hub-sys-color-danger-subtle);--hub-panels-alert-color: var(--hub-sys-color-danger-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-danger-border-subtle)}:where(.hub-panels__panel--alert[data-variant=warning]){--hub-panels-alert-bg: var(--hub-sys-color-warning-subtle);--hub-panels-alert-color: var(--hub-sys-color-warning-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-warning-border-subtle)}:where(.hub-panels__panel--alert[data-variant=info]){--hub-panels-alert-bg: var(--hub-sys-color-info-subtle);--hub-panels-alert-color: var(--hub-sys-color-info-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-info-border-subtle)}:where(.hub-panels__panel--alert[data-variant=neutral]){--hub-panels-alert-bg: var(--hub-sys-color-neutral-subtle);--hub-panels-alert-color: var(--hub-sys-color-neutral-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-neutral-border-subtle)}:where(.hub-panels__panel--alert[data-variant=light]){--hub-panels-alert-bg: var(--hub-sys-color-light-subtle);--hub-panels-alert-color: var(--hub-sys-color-light-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-light-border-subtle)}:where(.hub-panels__panel--alert[data-variant=dark]){--hub-panels-alert-bg: var(--hub-sys-color-dark-subtle);--hub-panels-alert-color: var(--hub-sys-color-dark-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-dark-border-subtle)}.hub-panels__panel.hub-panels__panel--alert{display:flex;flex-direction:column;color:var(--hub-panels-alert-color, var(--hub-sys-text-primary, #212529));background:var(--hub-panels-alert-bg, var(--hub-sys-surface-elevated, #f8f9fa));border:var(--hub-ref-border-width, 1px) solid var(--hub-panels-alert-border-color, var(--hub-sys-border-color-default, #dee2e6));border-inline-start:var(--hub-panels-alert-accent-width) solid var(--hub-panels-alert-accent, var(--hub-sys-border-color-default, #dee2e6));border-radius:var(--hub-panels-alert-border-radius);overflow:hidden}.hub-panels__panel.hub-panels__panel--alert .hub-panels__panel-body{display:flex;flex-direction:var(--hub-panels-alert-content-direction);align-items:var(--hub-panels-alert-content-align);justify-content:var(--hub-panels-alert-content-justify);gap:var(--hub-panels-alert-content-gap);padding:var(--hub-panels-alert-padding-y) var(--hub-panels-alert-padding-x)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1034
1034
  }
1035
1035
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: PanelComponent, decorators: [{
1036
1036
  type: Component,
@@ -1045,7 +1045,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
1045
1045
  '[class.hub-panels__panel--accordion]': 'accordionView()',
1046
1046
  '[class.hub-panels__panel--card]': 'cardView() && !alertView()',
1047
1047
  '[class.hub-panels__panel--alert]': 'alertView()'
1048
- }, template: "@if (accordionView()) {\n\t<h2 class=\"hub-panels__accordion-header\">\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"hub-panels__accordion-btn\"\n\t\t\t[class.hub-panels__accordion-btn--collapsed]=\"!active()\"\n\t\t\t[id]=\"id() + '-link'\"\n\t\t\t[disabled]=\"disabled() || tabset?.formDisabled()\"\n\t\t\t[attr.aria-expanded]=\"active()\"\n\t\t\t[attr.aria-controls]=\"id()\"\n\t\t\t(click)=\"onAccordionHeaderClick()\"\n\t\t\t(keydown)=\"onAccordionHeaderKeydown($event)\"\n\t\t>\n\t\t\t@if (headingRef(); as headingTemplate) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingTemplate\" />\n\t\t\t} @else {\n\t\t\t\t{{ heading() }}\n\t\t\t}\n\t\t\t@if (removable()) {\n\t\t\t\t<span class=\"hub-panels__remove-btn\" aria-hidden=\"true\" (click)=\"$event.stopPropagation(); removeSelf()\">&times;</span>\n\t\t\t}\n\t\t</button>\n\t</h2>\n}\n\n<!-- Projection slots for every view. In the strip views the wrappers are plain\n\t pass-throughs; in the accordion view they become the animated collapse\n\t region. The header/footer `select` slots and the default `<ng-content>` are\n\t all UNCONDITIONAL \u2014 never wrapped in `@if` \u2014 to avoid the lost-projection\n\t bug that conditional slots cause. Header/footer render in every view; the\n\t `card` view styles them as the card's header and footer bands. -->\n<div\n\t[class.hub-panels__accordion-collapse]=\"accordionView()\"\n\t[class.hub-panels__accordion-collapse--collapsed]=\"accordionView() && !active()\"\n\t[attr.role]=\"accordionView() ? 'region' : null\"\n\t[attr.id]=\"accordionView() ? id() : null\"\n\t[attr.aria-labelledby]=\"accordionView() ? id() + '-link' : null\"\n\t[attr.aria-hidden]=\"accordionView() ? !active() : null\"\n\t[attr.inert]=\"accordionView() && !active() ? '' : null\"\n>\n\t<div [class.hub-panels__accordion-body]=\"accordionView()\">\n\t\t<ng-content select=\"[hubPanelHeader]\" />\n\t\t<div class=\"hub-panels__panel-body\">\n\t\t\t<ng-content />\n\t\t</div>\n\t\t<ng-content select=\"[hubPanelFooter]\" />\n\t</div>\n</div>\n", styles: [":where(.hub-panels__panel--card){--hub-panels-card-bg: var(--hub-sys-surface-page, #fff);--hub-panels-card-color: var(--hub-sys-text-primary, #212529);--hub-panels-card-border-width: var(--hub-ref-border-width, 1px);--hub-panels-card-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-panels-card-border-radius: var(--hub-ref-radius-md, .375rem);--hub-panels-card-box-shadow: var(--hub-sys-shadow-sm, 0 .125rem .25rem rgba(0, 0, 0, .075));--hub-panels-card-padding-x: var(--hub-ref-space-4, 1.25rem);--hub-panels-card-padding-y: var(--hub-ref-space-3, 1rem)}:where(.hub-panels__panel-header,.hub-panels__panel-footer){--hub-panels-panel-header-bg: var(--hub-sys-surface-elevated, #f8f9fa);--hub-panels-panel-header-color: var(--hub-sys-text-primary, #212529);--hub-panels-panel-header-padding-x: var(--hub-ref-space-4, 1.25rem);--hub-panels-panel-header-padding-y: var(--hub-ref-space-3, 1rem);--hub-panels-panel-header-font-weight: 600;--hub-panels-panel-header-border-width: var(--hub-ref-border-width, 1px);--hub-panels-panel-header-border-color: var(--hub-sys-border-color-default, #dee2e6)}.hub-panels__panel-header{display:block;padding:var(--hub-panels-panel-header-padding-y) var(--hub-panels-panel-header-padding-x);color:var(--hub-panels-panel-header-color);background:var(--hub-panels-panel-header-bg);font-weight:var(--hub-panels-panel-header-font-weight);border-bottom:var(--hub-panels-panel-header-border-width) solid var(--hub-panels-panel-header-border-color)}.hub-panels__panel-footer{display:block;padding:var(--hub-panels-panel-header-padding-y) var(--hub-panels-panel-header-padding-x);color:var(--hub-panels-panel-header-color);background:var(--hub-panels-panel-header-bg);border-top:var(--hub-panels-panel-header-border-width) solid var(--hub-panels-panel-header-border-color)}.hub-panels__panel.hub-panels__panel--card{display:flex;flex-direction:column;color:var(--hub-panels-card-color);background:var(--hub-panels-card-bg);border:var(--hub-panels-card-border-width) solid var(--hub-panels-card-border-color);border-radius:var(--hub-panels-card-border-radius);box-shadow:var(--hub-panels-card-box-shadow);overflow:hidden}.hub-panels__panel.hub-panels__panel--card .hub-panels__panel-body{padding:var(--hub-panels-card-padding-y) var(--hub-panels-card-padding-x)}:where(.hub-panels__panel--alert){--hub-panels-alert-bg: var(--hub-sys-surface-elevated, #f8f9fa);--hub-panels-alert-color: var(--hub-sys-text-primary, #212529);--hub-panels-alert-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-panels-alert-accent: var(--hub-sys-border-color-default, #dee2e6);--hub-panels-alert-padding-x: var(--hub-ref-space-4, 1.25rem);--hub-panels-alert-padding-y: var(--hub-ref-space-3, 1rem);--hub-panels-alert-border-radius: var(--hub-ref-radius-md, .375rem);--hub-panels-alert-accent-width: .25rem}:where(.hub-panels__panel--alert[data-variant]){--hub-panels-alert-bg: color-mix(in srgb, var(--hub-panels-alert-accent) 14%, var(--hub-sys-surface-page, #fff));--hub-panels-alert-color: color-mix(in srgb, var(--hub-panels-alert-accent) 72%, var(--hub-sys-text-primary, #212529));--hub-panels-alert-border-color: color-mix(in srgb, var(--hub-panels-alert-accent) 30%, transparent)}:where(.hub-panels__panel--alert[data-variant=primary]){--hub-panels-alert-bg: var(--hub-sys-color-primary-subtle);--hub-panels-alert-color: var(--hub-sys-color-primary-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-primary-border-subtle)}:where(.hub-panels__panel--alert[data-variant=success]){--hub-panels-alert-bg: var(--hub-sys-color-success-subtle);--hub-panels-alert-color: var(--hub-sys-color-success-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-success-border-subtle)}:where(.hub-panels__panel--alert[data-variant=danger]){--hub-panels-alert-bg: var(--hub-sys-color-danger-subtle);--hub-panels-alert-color: var(--hub-sys-color-danger-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-danger-border-subtle)}:where(.hub-panels__panel--alert[data-variant=warning]){--hub-panels-alert-bg: var(--hub-sys-color-warning-subtle);--hub-panels-alert-color: var(--hub-sys-color-warning-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-warning-border-subtle)}:where(.hub-panels__panel--alert[data-variant=info]){--hub-panels-alert-bg: var(--hub-sys-color-info-subtle);--hub-panels-alert-color: var(--hub-sys-color-info-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-info-border-subtle)}.hub-panels__panel.hub-panels__panel--alert{display:flex;flex-direction:column;color:var(--hub-panels-alert-color, var(--hub-sys-text-primary, #212529));background:var(--hub-panels-alert-bg, var(--hub-sys-surface-elevated, #f8f9fa));border:var(--hub-ref-border-width, 1px) solid var(--hub-panels-alert-border-color, var(--hub-sys-border-color-default, #dee2e6));border-inline-start:var(--hub-panels-alert-accent-width) solid var(--hub-panels-alert-accent, var(--hub-sys-border-color-default, #dee2e6));border-radius:var(--hub-panels-alert-border-radius);overflow:hidden}.hub-panels__panel.hub-panels__panel--alert .hub-panels__panel-body{padding:var(--hub-panels-alert-padding-y) var(--hub-panels-alert-padding-x)}\n"] }]
1048
+ }, template: "@if (accordionView()) {\n\t<h2 class=\"hub-panels__accordion-header\">\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"hub-panels__accordion-btn\"\n\t\t\t[class.hub-panels__accordion-btn--collapsed]=\"!active()\"\n\t\t\t[id]=\"id() + '-link'\"\n\t\t\t[disabled]=\"disabled() || tabset?.formDisabled()\"\n\t\t\t[attr.aria-expanded]=\"active()\"\n\t\t\t[attr.aria-controls]=\"id()\"\n\t\t\t(click)=\"onAccordionHeaderClick()\"\n\t\t\t(keydown)=\"onAccordionHeaderKeydown($event)\"\n\t\t>\n\t\t\t@if (headingRef(); as headingTemplate) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingTemplate\" />\n\t\t\t} @else {\n\t\t\t\t{{ heading() }}\n\t\t\t}\n\t\t\t@if (removable()) {\n\t\t\t\t<span class=\"hub-panels__remove-btn\" aria-hidden=\"true\" (click)=\"$event.stopPropagation(); removeSelf()\">&times;</span>\n\t\t\t}\n\t\t</button>\n\t</h2>\n}\n\n<!-- Projection slots for every view. In the strip views the wrappers are plain\n\t pass-throughs; in the accordion view they become the animated collapse\n\t region. The header/footer `select` slots and the default `<ng-content>` are\n\t all UNCONDITIONAL \u2014 never wrapped in `@if` \u2014 to avoid the lost-projection\n\t bug that conditional slots cause. Header/footer render in every view; the\n\t `card` view styles them as the card's header and footer bands. -->\n<div\n\t[class.hub-panels__accordion-collapse]=\"accordionView()\"\n\t[class.hub-panels__accordion-collapse--collapsed]=\"accordionView() && !active()\"\n\t[attr.role]=\"accordionView() ? 'region' : null\"\n\t[attr.id]=\"accordionView() ? id() : null\"\n\t[attr.aria-labelledby]=\"accordionView() ? id() + '-link' : null\"\n\t[attr.aria-hidden]=\"accordionView() ? !active() : null\"\n\t[attr.inert]=\"accordionView() && !active() ? '' : null\"\n>\n\t<div [class.hub-panels__accordion-body]=\"accordionView()\">\n\t\t<ng-content select=\"[hubPanelHeader]\" />\n\t\t<div class=\"hub-panels__panel-body\">\n\t\t\t<ng-content />\n\t\t</div>\n\t\t<ng-content select=\"[hubPanelFooter]\" />\n\t</div>\n</div>\n", styles: [":where(.hub-panels__panel--card){--hub-panels-card-bg: var(--hub-sys-surface-page, #fff);--hub-panels-card-color: var(--hub-sys-text-primary, #212529);--hub-panels-card-border-width: var(--hub-ref-border-width, 1px);--hub-panels-card-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-panels-card-border-radius: var(--hub-ref-radius-md, .375rem);--hub-panels-card-box-shadow: var(--hub-sys-shadow-sm, 0 .125rem .25rem rgba(0, 0, 0, .075));--hub-panels-card-padding-x: var(--hub-ref-space-4, 1.5rem);--hub-panels-card-padding-y: var(--hub-ref-space-3, 1rem)}:where(.hub-panels__panel-header,.hub-panels__panel-footer){--hub-panels-panel-header-bg: var(--hub-sys-surface-elevated, #f8f9fa);--hub-panels-panel-header-color: var(--hub-sys-text-primary, #212529);--hub-panels-panel-header-padding-x: var(--hub-ref-space-4, 1.5rem);--hub-panels-panel-header-padding-y: var(--hub-ref-space-3, 1rem);--hub-panels-panel-header-font-weight: var(--hub-ref-font-weight-semibold, 600);--hub-panels-panel-header-border-width: var(--hub-ref-border-width, 1px);--hub-panels-panel-header-border-color: var(--hub-sys-border-color-default, #dee2e6)}.hub-panels__panel-header{display:block;padding:var(--hub-panels-panel-header-padding-y) var(--hub-panels-panel-header-padding-x);color:var(--hub-panels-panel-header-color);background:var(--hub-panels-panel-header-bg);font-weight:var(--hub-panels-panel-header-font-weight);border-bottom:var(--hub-panels-panel-header-border-width) solid var(--hub-panels-panel-header-border-color)}.hub-panels__panel-footer{display:block;padding:var(--hub-panels-panel-header-padding-y) var(--hub-panels-panel-header-padding-x);color:var(--hub-panels-panel-header-color);background:var(--hub-panels-panel-header-bg);border-top:var(--hub-panels-panel-header-border-width) solid var(--hub-panels-panel-header-border-color)}.hub-panels__panel.hub-panels__panel--card{display:flex;flex-direction:column;color:var(--hub-panels-card-color);background:var(--hub-panels-card-bg);border:var(--hub-panels-card-border-width) solid var(--hub-panels-card-border-color);border-radius:var(--hub-panels-card-border-radius);box-shadow:var(--hub-panels-card-box-shadow);overflow:hidden}.hub-panels__panel.hub-panels__panel--card .hub-panels__panel-body{padding:var(--hub-panels-card-padding-y) var(--hub-panels-card-padding-x)}:where(.hub-panels__panel--alert){--hub-panels-alert-bg: var(--hub-sys-surface-elevated, #f8f9fa);--hub-panels-alert-color: var(--hub-sys-text-primary, #212529);--hub-panels-alert-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-panels-alert-accent: var(--hub-sys-border-color-default, #dee2e6);--hub-panels-alert-padding-x: var(--hub-ref-space-4, 1.5rem);--hub-panels-alert-padding-y: var(--hub-ref-space-3, 1rem);--hub-panels-alert-border-radius: var(--hub-ref-radius-md, .375rem);--hub-panels-alert-accent-width: .25rem;--hub-panels-alert-content-direction: row;--hub-panels-alert-content-align: flex-start;--hub-panels-alert-content-justify: flex-start;--hub-panels-alert-content-gap: var(--hub-sys-gap-2, .5rem)}:where(.hub-panels__panel--alert[data-variant]){--hub-panels-alert-bg: color-mix(in oklch, var(--hub-panels-alert-accent) 14%, var(--hub-sys-surface-page, #fff));--hub-panels-alert-color: color-mix(in oklch, var(--hub-panels-alert-accent) 72%, var(--hub-sys-text-primary, #212529));--hub-panels-alert-border-color: color-mix(in oklch, var(--hub-panels-alert-accent) 30%, transparent)}:where(.hub-panels__panel--alert[data-variant=primary]){--hub-panels-alert-bg: var(--hub-sys-color-primary-subtle);--hub-panels-alert-color: var(--hub-sys-color-primary-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-primary-border-subtle)}:where(.hub-panels__panel--alert[data-variant=secondary]){--hub-panels-alert-bg: var(--hub-sys-color-secondary-subtle);--hub-panels-alert-color: var(--hub-sys-color-secondary-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-secondary-border-subtle)}:where(.hub-panels__panel--alert[data-variant=success]){--hub-panels-alert-bg: var(--hub-sys-color-success-subtle);--hub-panels-alert-color: var(--hub-sys-color-success-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-success-border-subtle)}:where(.hub-panels__panel--alert[data-variant=danger]){--hub-panels-alert-bg: var(--hub-sys-color-danger-subtle);--hub-panels-alert-color: var(--hub-sys-color-danger-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-danger-border-subtle)}:where(.hub-panels__panel--alert[data-variant=warning]){--hub-panels-alert-bg: var(--hub-sys-color-warning-subtle);--hub-panels-alert-color: var(--hub-sys-color-warning-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-warning-border-subtle)}:where(.hub-panels__panel--alert[data-variant=info]){--hub-panels-alert-bg: var(--hub-sys-color-info-subtle);--hub-panels-alert-color: var(--hub-sys-color-info-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-info-border-subtle)}:where(.hub-panels__panel--alert[data-variant=neutral]){--hub-panels-alert-bg: var(--hub-sys-color-neutral-subtle);--hub-panels-alert-color: var(--hub-sys-color-neutral-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-neutral-border-subtle)}:where(.hub-panels__panel--alert[data-variant=light]){--hub-panels-alert-bg: var(--hub-sys-color-light-subtle);--hub-panels-alert-color: var(--hub-sys-color-light-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-light-border-subtle)}:where(.hub-panels__panel--alert[data-variant=dark]){--hub-panels-alert-bg: var(--hub-sys-color-dark-subtle);--hub-panels-alert-color: var(--hub-sys-color-dark-emphasis);--hub-panels-alert-border-color: var(--hub-sys-color-dark-border-subtle)}.hub-panels__panel.hub-panels__panel--alert{display:flex;flex-direction:column;color:var(--hub-panels-alert-color, var(--hub-sys-text-primary, #212529));background:var(--hub-panels-alert-bg, var(--hub-sys-surface-elevated, #f8f9fa));border:var(--hub-ref-border-width, 1px) solid var(--hub-panels-alert-border-color, var(--hub-sys-border-color-default, #dee2e6));border-inline-start:var(--hub-panels-alert-accent-width) solid var(--hub-panels-alert-accent, var(--hub-sys-border-color-default, #dee2e6));border-radius:var(--hub-panels-alert-border-radius);overflow:hidden}.hub-panels__panel.hub-panels__panel--alert .hub-panels__panel-body{display:flex;flex-direction:var(--hub-panels-alert-content-direction);align-items:var(--hub-panels-alert-content-align);justify-content:var(--hub-panels-alert-content-justify);gap:var(--hub-panels-alert-content-gap);padding:var(--hub-panels-alert-padding-y) var(--hub-panels-alert-padding-x)}\n"] }]
1049
1049
  }], ctorParameters: () => [], propDecorators: { heading: [{ type: i0.Input, args: [{ isSignal: true, alias: "heading", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], removable: [{ type: i0.Input, args: [{ isSignal: true, alias: "removable", required: false }] }], pathMatch: [{ type: i0.Input, args: [{ isSignal: true, alias: "pathMatch", required: false }] }], routerLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLink", required: false }] }], queryParams: [{ type: i0.Input, args: [{ isSignal: true, alias: "queryParams", required: false }] }], customClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "customClass", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }, { type: i0.Output, args: ["activeChange"] }], selectPanel: [{ type: i0.Output, args: ["selectPanel"] }], deselectPanel: [{ type: i0.Output, args: ["deselectPanel"] }], removed: [{ type: i0.Output, args: ["removed"] }] } });
1050
1050
 
1051
1051
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ng-hub-ui-panels.mjs","sources":["../../../projects/panels/src/lib/services/panels-config.service.ts","../../../projects/panels/src/lib/utils/content-box-width.ts","../../../projects/panels/src/lib/utils/read-by-path.ts","../../../projects/panels/src/lib/components/panels/panels.component.ts","../../../projects/panels/src/lib/components/panels/panels.component.html","../../../projects/panels/src/lib/components/panel/panel.component.ts","../../../projects/panels/src/lib/components/panel/panel.component.html","../../../projects/panels/src/lib/directives/panel-heading.directive.ts","../../../projects/panels/src/lib/directives/panel-header.directive.ts","../../../projects/panels/src/lib/directives/panel-footer.directive.ts","../../../projects/panels/src/public-api.ts","../../../projects/panels/src/ng-hub-ui-panels.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport type { PanelsType } from '../models/panels.types';\n\n/**\n * Injectable defaults for every `<hub-panels>` in the application.\n *\n * Override at any injector level to change the defaults globally or for a\n * feature subtree:\n *\n * ```ts\n * providers: [{ provide: PanelsConfig, useValue: { ...new PanelsConfig(), type: 'pills' } }]\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class PanelsConfig {\n\t/** Default navigation style — `'tabs'`, `'pills'` or `'accordion'`. */\n\ttype: PanelsType = 'tabs';\n\n\t/** Whether keyboard navigation (arrows / Home / End / Delete) is enabled. */\n\tisKeysAllowed = true;\n\n\t/** Accessible label announced for the panel list. */\n\tariaLabel = 'Tabs';\n\n\t/** Accessible label for the backward scroll button (scrollable mode). */\n\tscrollBackwardAriaLabel = 'Scroll tabs backward';\n\n\t/** Accessible label for the forward scroll button (scrollable mode). */\n\tscrollForwardAriaLabel = 'Scroll tabs forward';\n}\n","/**\n * Usable inner width of an element: `offsetWidth` minus horizontal paddings\n * and borders. Used by the scrollable strip to size its scroll steps.\n */\nexport function contentBoxWidth(element: HTMLElement): number {\n\tconst style = getComputedStyle(element);\n\treturn (\n\t\telement.offsetWidth -\n\t\tparseFloat(style.paddingLeft) -\n\t\tparseFloat(style.paddingRight) -\n\t\tparseFloat(style.borderLeftWidth) -\n\t\tparseFloat(style.borderRightWidth)\n\t);\n}\n","/**\n * Reads a nested value from an object using dot-notation path syntax\n * (e.g. `id`, `meta.key`). Returns `undefined` when the path cannot be\n * resolved. Used by the panels' `bindValue` form-value mapping.\n */\nexport function readByPath(source: unknown, path: string): unknown {\n\tif (source == null || !path) {\n\t\treturn undefined;\n\t}\n\treturn path.split('.').reduce((currentValue: unknown, segment) => {\n\t\tif (currentValue == null) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn (currentValue as Record<string, unknown>)[segment];\n\t}, source);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tDestroyRef,\n\tElementRef,\n\tforwardRef,\n\tinject,\n\tinput,\n\toutput,\n\tRenderer2,\n\tRendererStyleFlags2,\n\tsignal,\n\tviewChild,\n\tviewChildren,\n\tViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NavigationEnd, Router, RouterOutlet } from '@angular/router';\nimport { filter } from 'rxjs';\n\nimport type { HubPanelVariant, PanelChangeEvent, PanelsType } from '../../models/panels.types';\nimport { PanelsConfig } from '../../services/panels-config.service';\nimport { contentBoxWidth } from '../../utils/content-box-width';\nimport { readByPath } from '../../utils/read-by-path';\nimport type { PanelComponent } from '../panel/panel.component';\n\ninterface MultipleHeaderGroup {\n\tactivePanel?: PanelComponent;\n\theaders: PanelComponent[];\n}\n\n/**\n * Content-panels container — the hub `panels` primitive.\n *\n * Projects `<hub-panel>` panes and renders them in one of three views:\n *\n * - **`tabs` / `pills`** — an accessible `tablist` of clickable headers\n * (roving tabindex, arrow/Home/End/Delete keys) above the active pane.\n * Panels with a `routerLink` switch the content area to a `<router-outlet>`\n * and the active panel follows the URL. With `scrollable`, overflowing\n * headers get backward/forward scroll buttons.\n * - **`accordion`** — each panel renders as a stacked disclosure panel with an\n * animated collapse: clicking an open header closes it, `multiple` allows\n * several panels open at once and `flush` removes the outer chrome. All\n * panels start collapsed unless a panel is marked `[active]` or a form value\n * is bound. Routed panels are not supported in this view.\n *\n * The container implements `ControlValueAccessor`, so the active panel(s) can\n * be bound as a form value (`ngModel` / `formControl`): each panel contributes\n * its `value` (or its `id` by default), optionally narrowed with `bindValue`\n * and compared with `compareWith`. With `multiple` the form value is an array.\n *\n * Theming is driven entirely by the `--hub-panels-*` CSS custom properties\n * (see `panels.variables.scss`); the accordion view also honours the\n * `--hub-accordion-*` ng-hub-ui contract as a compatibility fallback.\n *\n * @example\n * ```html\n * <hub-panels type=\"accordion\" multiple [formControl]=\"openPanels\">\n * <hub-panel heading=\"Fields\" value=\"fields\">…</hub-panel>\n * <hub-panel heading=\"Validations\" value=\"validations\">…</hub-panel>\n * </hub-panels>\n * ```\n */\n@Component({\n\tselector: 'hub-panels',\n\timports: [NgTemplateOutlet, RouterOutlet],\n\ttemplateUrl: './panels.component.html',\n\t// Split by concern (token contract / strip views / accordion view) so each\n\t// sheet stays inside the `anyComponentStyle` budget.\n\tstyleUrls: ['./panels.variables.scss', './panels.component.scss', './panels.accordion.scss'],\n\t// Library-style global stylesheet: rules are namespaced under `.hub-panels*`\n\t// and must reach the projected `hub-panel` panes (host-bound classes).\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => PanelsComponent),\n\t\t\tmulti: true\n\t\t}\n\t],\n\thost: {\n\t\tclass: 'hub-panels',\n\t\t'[class.hub-panels--tabs]': \"type() === 'tabs'\",\n\t\t'[class.hub-panels--pills]': \"type() === 'pills'\",\n\t\t'[class.hub-panels--card]': 'isCardView()',\n\t\t'[class.hub-panels--vertical]': 'vertical() && !isAccordionView() && !isCardView()',\n\t\t'[class.hub-panels--accordion]': 'isAccordionView()',\n\t\t'[class.hub-panels--flush]': 'isAccordionView() && flush()',\n\t\t'[class.hub-panels--multiple]': 'multiple()',\n\t\t'[attr.data-variant]': 'variant() ?? null',\n\t\t'[style.--hub-panels-accent]': 'groupAccent()',\n\t\t'(window:resize)': 'onWindowResize()'\n\t}\n})\nexport class PanelsComponent implements ControlValueAccessor {\n\treadonly #router = inject(Router);\n\treadonly #renderer = inject(Renderer2);\n\treadonly #elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\treadonly #destroyRef = inject(DestroyRef);\n\n\t/** Container-wide defaults (aria labels, default type, keyboard toggle). */\n\tprotected readonly config = inject(PanelsConfig);\n\n\t/** Scrollable container hosting the panel headers (`tabs` / `pills` views). */\n\treadonly navScroller = viewChild<ElementRef<HTMLElement>>('navScroller');\n\n\t/** Backward scroll button (only rendered while it can scroll back). */\n\treadonly prevBtn = viewChild<ElementRef<HTMLElement>>('prevBtn');\n\n\t/** Forward scroll button (only rendered while it can scroll forward). */\n\treadonly nextBtn = viewChild<ElementRef<HTMLElement>>('nextBtn');\n\n\t/** Parking lot that owns the projected panel hosts before they are placed. */\n\treadonly contentRoot = viewChild<ElementRef<HTMLElement>>('contentRoot');\n\n\t/** Visible block hosts used by `multiple` tabs / pills. */\n\treadonly multiplePaneHosts = viewChildren<ElementRef<HTMLElement>>('multiplePaneHost');\n\n\t/** Visible grouped blocks used by `multiple` tabs / pills. */\n\treadonly multipleBlocks = viewChildren<ElementRef<HTMLElement>>('multipleBlock');\n\n\t/** Emitted when the user activates (opens) a different panel. */\n\treadonly panelChange = output<PanelChangeEvent>();\n\n\t/** Whether the panel list is stacked beside the content (`tabs` / `pills`). */\n\treadonly vertical = input(false, { transform: booleanAttribute });\n\n\t/** Whether panel headers stretch to share the available width equally. */\n\treadonly justified = input(false, { transform: booleanAttribute });\n\n\t/** Visualization — `'tabs'` (default), `'pills'` or `'accordion'`. */\n\treadonly type = input<PanelsType>(this.config.type);\n\n\t/** Whether keyboard navigation is enabled. */\n\treadonly isKeysAllowed = input(this.config.isKeysAllowed, {\n\t\ttransform: booleanAttribute\n\t});\n\n\t/** Whether overflowing headers get backward/forward scroll buttons. */\n\treadonly scrollable = input(false, { transform: booleanAttribute });\n\n\t/** Accordion view: whether several panels may be expanded at once. */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/** Accordion view: edge-to-edge panels without outer borders or radius. */\n\treadonly flush = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Semantic accent applied to the navigation strip — the active/hover tab, the\n\t * active pill and the active accordion header all follow it. The built-in\n\t * values (`primary` / `success` / `danger` / `warning` / `info`) render with\n\t * the design-system tints; any other string is also accepted, since the strip\n\t * reads `--hub-sys-color-<variant>` from the host application, so a custom\n\t * accent palette interconnects with no changes to this library. Defaults to\n\t * `primary` when omitted.\n\t */\n\treadonly variant = input<HubPanelVariant | (string & {}) | undefined>(undefined);\n\n\t/**\n\t * Dot-notation path applied to each panel's `value` to obtain the emitted\n\t * form value (e.g. `'meta.key'`). Empty by default — the raw value is used.\n\t */\n\treadonly bindValue = input<string | undefined>(undefined);\n\n\t/** Equality used to match form values against panel values. `===` by default. */\n\treadonly compareWith = input<(a: unknown, b: unknown) => boolean>((a, b) => a === b);\n\n\t/** Registered panels, in projection order. */\n\treadonly panels = signal<PanelComponent[]>([]);\n\n\t/** Currently active panel, if any (the first one, under `multiple`). */\n\treadonly activePanel = computed(() => this.panels().find((panel) => panel.active()));\n\n\t/** Panel index lookup used by the strip templates and keyboard navigation. */\n\treadonly panelIndexMap = computed(() => new Map(this.panels().map((panel, index) => [panel, index])));\n\n\t/** Whether the container renders the accordion visualization. */\n\treadonly isAccordionView = computed(() => this.type() === 'accordion');\n\n\t/**\n\t * Whether the container renders the chromeless `card` visualization: no\n\t * navigation strip and every panel always visible, each styled as a card.\n\t */\n\treadonly isCardView = computed(() => this.type() === 'card');\n\n\t/**\n\t * Inline accent fed to the strip styles: `var(--hub-sys-color-<variant>)` for\n\t * the active variant, or `null` to keep the `primary` default. This is what\n\t * makes the variant set open — any accent token defined by the host\n\t * application is picked up without the library knowing the variant name.\n\t */\n\tprotected readonly groupAccent = computed(() => {\n\t\tconst variant = this.variant();\n\t\treturn variant ? `var(--hub-sys-color-${variant})` : null;\n\t});\n\n\t/**\n\t * Whether more than one panel may be active at once. Driven by `multiple`\n\t * for every view, and always enabled in the `card` view, where all panels\n\t * stay visible at once and must not deactivate one another.\n\t */\n\treadonly allowsMultipleActive = computed(() => this.multiple() || this.isCardView());\n\n\t/** Whether the bound form control disabled the whole container. */\n\treadonly formDisabled = signal(false);\n\n\t/**\n\t * Whether the active panel routes its content through a `<router-outlet>`.\n\t * Never true in the accordion view, where routed panels are not supported.\n\t */\n\tprotected readonly activePanelHasRouter = computed(\n\t\t() => !this.isAccordionView() && !this.allowsMultipleActive() && !!this.activePanel()?.routerUrl()\n\t);\n\n\t/**\n\t * In `multiple` tabs/pills, headers are partitioned into blocks. Every\n\t * active panel starts a block; following inactive headers stay visible in\n\t * that same block until the next active panel starts a new one.\n\t */\n\tprotected readonly multipleHeaderGroups = computed<MultipleHeaderGroup[]>(() => {\n\t\tif (!this.allowsMultipleActive() || this.isAccordionView()) {\n\t\t\treturn [];\n\t\t}\n\t\tconst panels = this.panels();\n\t\tif (!panels.length) {\n\t\t\treturn [];\n\t\t}\n\t\tconst activeIndices = panels\n\t\t\t.map((panel, index) => (panel.active() ? index : -1))\n\t\t\t.filter((index) => index !== -1);\n\t\tif (!activeIndices.length) {\n\t\t\treturn [{ headers: panels }];\n\t\t}\n\t\treturn activeIndices.map((activeIndex, groupIndex) => {\n\t\t\tconst startIndex = groupIndex === 0 ? 0 : activeIndex;\n\t\t\tconst endIndex = activeIndices[groupIndex + 1] ?? panels.length;\n\t\t\treturn {\n\t\t\t\tactivePanel: panels[activeIndex],\n\t\t\t\theaders: panels.slice(startIndex, endIndex)\n\t\t\t};\n\t\t});\n\t});\n\n\t/** Whether the strip cannot scroll further backward. */\n\treadonly backwardIsDisabled = signal(true);\n\n\t/** Whether the strip cannot scroll further forward. */\n\treadonly forwardIsDisabled = signal(false);\n\n\t#isDestroyed = false;\n\t#syncScheduled = false;\n\t#viewInitialised = false;\n\t#placementScheduled = false;\n\t#multipleBlockSizingScheduled = false;\n\n\t/** Last value written by the bound form control; `null` when no form. */\n\t#formValue: unknown[] | null = null;\n\n\t#onChange: (value: unknown) => void = () => undefined;\n\t#onTouched: () => void = () => undefined;\n\n\tconstructor() {\n\t\tthis.#destroyRef.onDestroy(() => {\n\t\t\tthis.#isDestroyed = true;\n\t\t});\n\n\t\tafterNextRender(() => {\n\t\t\tthis.#viewInitialised = true;\n\t\t\tthis.updateScrollButtons();\n\t\t\tthis.setActivePanel();\n\t\t\t// Re-apply any form value written before the panels' inputs were bound.\n\t\t\tthis.#applyFormValue();\n\t\t\tthis.#ensureActivePanel();\n\t\t\tthis.#schedulePanelPlacement();\n\t\t\tthis.#scheduleMultipleBlockSizing();\n\t\t\tthis.#router.events\n\t\t\t\t.pipe(\n\t\t\t\t\tfilter((event) => event instanceof NavigationEnd),\n\t\t\t\t\ttakeUntilDestroyed(this.#destroyRef)\n\t\t\t\t)\n\t\t\t\t.subscribe(() => this.setActivePanel());\n\t\t});\n\t}\n\n\t/**\n\t * Registers a panel in the container. Called by `PanelComponent` on\n\t * construction — not meant for manual use.\n\t */\n\tregisterPanel(panel: PanelComponent): void {\n\t\tthis.panels.update((panels) => [...panels, panel]);\n\t\tthis.#scheduleSync();\n\t}\n\n\t/**\n\t * Removes a panel from the container. `reselect` activates the closest\n\t * enabled neighbour when the removed panel was active; `emit` fires the\n\t * panel's `removed` output.\n\t */\n\tremovePanel(panel: PanelComponent, options: { reselect?: boolean; emit?: boolean } = {}): void {\n\t\tconst { reselect = true, emit = true } = options;\n\t\tconst panels = this.panels();\n\t\tconst index = panels.indexOf(panel);\n\t\tif (index === -1 || this.#isDestroyed) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (reselect && panel.active() && !this.isAccordionView()) {\n\t\t\tconst closestIndex = this.#closestEnabledIndex(index);\n\t\t\tif (closestIndex !== -1) {\n\t\t\t\tpanels[closestIndex].active.set(true);\n\t\t\t}\n\t\t}\n\t\tif (emit) {\n\t\t\tpanel.removed.emit(panel);\n\t\t}\n\n\t\tthis.panels.update((currentPanels) => currentPanels.filter((candidate) => candidate !== panel));\n\n\t\t// Detach the projected pane: the consumer template still owns the node,\n\t\t// so removing the header alone would leave the pane content behind.\n\t\tconst paneElement = panel.elementRef.nativeElement;\n\t\tif (paneElement.parentNode) {\n\t\t\tthis.#renderer.removeChild(paneElement.parentNode, paneElement);\n\t\t}\n\t\tif (panel.active()) {\n\t\t\tpanel.active.set(false);\n\t\t\tthis.#emitFormValue();\n\t\t}\n\t\tthis.#scheduleSync();\n\t}\n\n\t/**\n\t * Activates a panel on behalf of the user (`tabs` / `pills` views): marks it\n\t * active, navigates when routed, and emits `panelChange`. In `multiple` mode\n\t * clicking an active panel toggles it off (the panes render side by side);\n\t * otherwise an already-active panel no-ops. Disabled panels always no-op.\n\t */\n\tselectPanel(panel: PanelComponent): void {\n\t\tif (panel.disabled() || this.formDisabled()) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.allowsMultipleActive()) {\n\t\t\tif (panel.active()) {\n\t\t\t\tpanel.active.set(false);\n\t\t\t} else {\n\t\t\t\tpanel.active.set(true);\n\t\t\t\tpanel.navigate();\n\t\t\t\tthis.panelChange.emit({ prev: undefined, current: panel });\n\t\t\t}\n\t\t\tthis.#emitFormValue();\n\t\t\tthis.#onTouched();\n\t\t\tthis.#schedulePanelPlacement();\n\t\t\treturn;\n\t\t}\n\t\tif (panel.active()) {\n\t\t\treturn;\n\t\t}\n\t\tconst previousPanel = this.activePanel();\n\t\t// Deactivate the previously active panel up front so the emitted form\n\t\t// value reflects only the newly selected panel. The per-panel effect that\n\t\t// enforces single-active runs asynchronously, so relying on it here would\n\t\t// emit a stale value that still includes the previous panel.\n\t\tif (previousPanel && previousPanel !== panel) {\n\t\t\tpreviousPanel.active.set(false);\n\t\t}\n\t\tpanel.active.set(true);\n\t\tpanel.navigate();\n\t\tthis.panelChange.emit({ prev: previousPanel, current: panel });\n\t\tthis.#emitFormValue();\n\t\tthis.#onTouched();\n\t\tthis.#schedulePanelPlacement();\n\t}\n\n\t/**\n\t * Toggles a panel on behalf of the user (accordion view): an open panel\n\t * closes, a closed one opens — closing the others unless `multiple`.\n\t * Emits `panelChange` when a panel opens.\n\t */\n\ttogglePanel(panel: PanelComponent): void {\n\t\tif (panel.disabled() || this.formDisabled()) {\n\t\t\treturn;\n\t\t}\n\t\tif (panel.active()) {\n\t\t\tpanel.active.set(false);\n\t\t} else {\n\t\t\tconst previousPanel = this.allowsMultipleActive() ? undefined : this.activePanel();\n\t\t\tpanel.active.set(true);\n\t\t\tthis.panelChange.emit({ prev: previousPanel, current: panel });\n\t\t}\n\t\tthis.#emitFormValue();\n\t\tthis.#onTouched();\n\t\tthis.#schedulePanelPlacement();\n\t}\n\n\t/**\n\t * Marks the routed panel matching the current URL as active. Does not\n\t * navigate — activation through this path is URL-driven. No-op in the\n\t * accordion view, where routed panels are not supported.\n\t */\n\tsetActivePanel(): void {\n\t\tif (this.isAccordionView()) {\n\t\t\treturn;\n\t\t}\n\t\tconst [route, queryString] = this.#router.url.split('?');\n\t\tfor (const panel of this.panels()) {\n\t\t\tif (!panel.routerUrl()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet matches: boolean;\n\t\t\tif (panel.pathMatch() === 'full') {\n\t\t\t\tconst currentUrl = queryString?.trim() ? `${route}?${queryString.trim()}` : route;\n\t\t\t\tmatches = currentUrl === panel.getFullRoute();\n\t\t\t} else {\n\t\t\t\tmatches = route === panel.getRoute();\n\t\t\t}\n\t\t\tif (matches) {\n\t\t\t\tif (!panel.active()) {\n\t\t\t\t\tpanel.active.set(true);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// ── ControlValueAccessor ────────────────────────────────────────────────\n\n\t/**\n\t * Writes the form value into the container: panels whose (`bindValue`-mapped)\n\t * value matches are activated, the rest are deactivated. With `multiple` an\n\t * array is expected; otherwise a single value.\n\t */\n\twriteValue(value: unknown): void {\n\t\tif (value == null) {\n\t\t\tthis.#formValue = [];\n\t\t} else if (this.multiple()) {\n\t\t\tthis.#formValue = Array.isArray(value) ? [...value] : [value];\n\t\t} else {\n\t\t\tthis.#formValue = Array.isArray(value) ? value.slice(0, 1) : [value];\n\t\t}\n\t\tthis.#applyFormValue();\n\t}\n\n\t/** Registers the form-control change callback. */\n\tregisterOnChange(onChange: (value: unknown) => void): void {\n\t\tthis.#onChange = onChange;\n\t}\n\n\t/** Registers the form-control touched callback. */\n\tregisterOnTouched(onTouched: () => void): void {\n\t\tthis.#onTouched = onTouched;\n\t}\n\n\t/** Enables/disables every panel header on behalf of the form control. */\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.formDisabled.set(isDisabled);\n\t}\n\n\t/** Keyboard navigation for the panel strip (arrows / Home / End / Delete). */\n\tprotected onPanelKeydown(event: KeyboardEvent, index: number): void {\n\t\tif (!this.isKeysAllowed()) {\n\t\t\treturn;\n\t\t}\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowDown':\n\t\t\t\tif (event.key === 'ArrowDown' && !this.vertical()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.#focusPanelAt(this.#stepEnabledIndex(index, 1));\n\t\t\t\treturn;\n\t\t\tcase 'ArrowLeft':\n\t\t\tcase 'ArrowUp':\n\t\t\t\tif (event.key === 'ArrowUp' && !this.vertical()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.#focusPanelAt(this.#stepEnabledIndex(index, -1));\n\t\t\t\treturn;\n\t\t\tcase 'Home':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.#focusPanelAt(this.panels().findIndex((panel) => !panel.disabled()));\n\t\t\t\treturn;\n\t\t\tcase 'End': {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst panels = this.panels();\n\t\t\t\tthis.#focusPanelAt(panels.length - 1 - [...panels].reverse().findIndex((panel) => !panel.disabled()));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase 'Delete': {\n\t\t\t\tconst panel = this.panels()[index];\n\t\t\t\tif (panel?.removable()) {\n\t\t\t\t\tthis.removePanel(panel);\n\t\t\t\t\tqueueMicrotask(() => this.#focusPanelAt(Math.min(index, this.panels().length - 1)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Keyboard navigation between accordion headers (arrows / Home / End /\n\t * Delete). Enter and Space toggle natively through the button click.\n\t */\n\tonAccordionKeydown(event: KeyboardEvent, panel: PanelComponent): void {\n\t\tif (!this.isKeysAllowed()) {\n\t\t\treturn;\n\t\t}\n\t\tconst index = this.panels().indexOf(panel);\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowDown':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.#focusPanelAt(this.#stepEnabledIndex(index, 1));\n\t\t\t\treturn;\n\t\t\tcase 'ArrowUp':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.#focusPanelAt(this.#stepEnabledIndex(index, -1));\n\t\t\t\treturn;\n\t\t\tcase 'Home':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.#focusPanelAt(this.panels().findIndex((candidate) => !candidate.disabled()));\n\t\t\t\treturn;\n\t\t\tcase 'End': {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst panels = this.panels();\n\t\t\t\tthis.#focusPanelAt(panels.length - 1 - [...panels].reverse().findIndex((candidate) => !candidate.disabled()));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase 'Delete': {\n\t\t\t\tif (panel.removable()) {\n\t\t\t\t\tthis.removePanel(panel);\n\t\t\t\t\tqueueMicrotask(() => this.#focusPanelAt(Math.min(index, this.panels().length - 1)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Recomputes the enabled/disabled state of the scroll buttons. */\n\tprotected updateScrollButtons(): void {\n\t\tif (!this.scrollable() || this.isAccordionView()) {\n\t\t\treturn;\n\t\t}\n\t\tconst scroller = this.navScroller()?.nativeElement;\n\t\tif (!scroller) {\n\t\t\treturn;\n\t\t}\n\t\tconst { scrollLeft, scrollWidth } = scroller;\n\t\tthis.backwardIsDisabled.set(scrollLeft <= 0);\n\t\tthis.forwardIsDisabled.set(scrollLeft + contentBoxWidth(scroller) + 1 >= scrollWidth);\n\t}\n\n\t/** Re-syncs scroll controls and multiple-block sizing on window resize. */\n\tprotected onWindowResize(): void {\n\t\tthis.updateScrollButtons();\n\t\tthis.#scheduleMultipleBlockSizing();\n\t}\n\n\t/** Updates the scroll buttons as the strip scrolls. */\n\tprotected onScroll(): void {\n\t\tthis.updateScrollButtons();\n\t}\n\n\t/** Global index of a panel within the projected strip order. */\n\tprotected panelIndex(panel: PanelComponent): number {\n\t\treturn this.panelIndexMap().get(panel) ?? -1;\n\t}\n\n\t/** Scrolls the panel headers one viewport backward. */\n\tprotected navBackward(): void {\n\t\tconst scroller = this.navScroller()?.nativeElement;\n\t\tif (!scroller) {\n\t\t\treturn;\n\t\t}\n\t\tconst step = contentBoxWidth(scroller) - this.#visibleScrollButtonsWidth();\n\t\tscroller.scrollLeft = Math.max(scroller.scrollLeft - step, 0);\n\t}\n\n\t/** Scrolls the panel headers one viewport forward. */\n\tprotected navForward(): void {\n\t\tconst scroller = this.navScroller()?.nativeElement;\n\t\tif (!scroller) {\n\t\t\treturn;\n\t\t}\n\t\tconst step = contentBoxWidth(scroller) - this.#visibleScrollButtonsWidth();\n\t\tconst lastPosition = scroller.scrollWidth - step;\n\t\tscroller.scrollLeft = Math.min(scroller.scrollLeft + step, lastPosition);\n\t}\n\n\t/** Width currently taken by the visible scroll buttons. */\n\t#visibleScrollButtonsWidth(): number {\n\t\treturn [this.prevBtn()?.nativeElement, this.nextBtn()?.nativeElement].reduce(\n\t\t\t(total, button) => (button ? total + contentBoxWidth(button) : total),\n\t\t\t0\n\t\t);\n\t}\n\n\t/** Index of the enabled panel closest to `index`, or `-1` when none exists. */\n\t#closestEnabledIndex(index: number): number {\n\t\tconst panels = this.panels();\n\t\tfor (let step = 1; step <= panels.length; step += 1) {\n\t\t\tconst previous = panels[index - step];\n\t\t\tif (previous && !previous.disabled()) {\n\t\t\t\treturn index - step;\n\t\t\t}\n\t\t\tconst next = panels[index + step];\n\t\t\tif (next && !next.disabled()) {\n\t\t\t\treturn index + step;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\t/** Next enabled panel index from `index` in `direction`, wrapping around. */\n\t#stepEnabledIndex(index: number, direction: 1 | -1): number {\n\t\tconst panels = this.panels();\n\t\tfor (let step = 1; step <= panels.length; step += 1) {\n\t\t\tconst candidate = (index + direction * step + panels.length * step) % panels.length;\n\t\t\tif (!panels[candidate].disabled()) {\n\t\t\t\treturn candidate;\n\t\t\t}\n\t\t}\n\t\treturn index;\n\t}\n\n\t/** Moves DOM focus to the panel header at `index` (strip link or accordion button). */\n\t#focusPanelAt(index: number): void {\n\t\tif (index < 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst selector = this.isAccordionView() ? '.hub-panels__accordion-btn' : '.hub-panels__nav-link';\n\t\tconst headers = this.#elementRef.nativeElement.querySelectorAll<HTMLElement>(selector);\n\t\theaders[index]?.focus();\n\t}\n\n\t/**\n\t * Coalesces post-registration/removal housekeeping into one microtask:\n\t * re-applies the bound form value to the current panels, guarantees an\n\t * active panel (non-routed `tabs` / `pills` containers without a bound\n\t * form) and refreshes the scroll buttons after the strip changed size.\n\t * Skipped until the first render — before it the projected panels' inputs\n\t * are not bound yet, and the constructor's `afterNextRender` performs the\n\t * initial pass instead.\n\t */\n\t#scheduleSync(): void {\n\t\tif (this.#syncScheduled || this.#isDestroyed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#syncScheduled = true;\n\t\tqueueMicrotask(() => {\n\t\t\tthis.#syncScheduled = false;\n\t\t\tif (this.#isDestroyed || !this.#viewInitialised) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#applyFormValue();\n\t\t\tthis.#ensureActivePanel();\n\t\t\tthis.#schedulePanelPlacement();\n\t\t\tthis.updateScrollButtons();\n\t\t});\n\t}\n\n\t/** Coalesces DOM moves for the projected `hub-panel` hosts. */\n\t#schedulePanelPlacement(): void {\n\t\tif (this.#placementScheduled || this.#isDestroyed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#placementScheduled = true;\n\t\trequestAnimationFrame(() => {\n\t\t\tthis.#placementScheduled = false;\n\t\t\tif (this.#isDestroyed || !this.#viewInitialised) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#runPanelPlacementPass();\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tif (this.#isDestroyed || !this.#viewInitialised) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.#runPanelPlacementPass();\n\t\t\t});\n\t\t});\n\t}\n\n\t/** Performs one projected-panel placement pass plus dependent sizing. */\n\t#runPanelPlacementPass(): void {\n\t\tthis.#placeProjectedPanels();\n\t\tthis.#scheduleMultipleBlockSizing();\n\t}\n\n\t/** Coalesces the DOM measurements needed by `multiple + vertical`. */\n\t#scheduleMultipleBlockSizing(): void {\n\t\tif (this.#multipleBlockSizingScheduled || this.#isDestroyed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#multipleBlockSizingScheduled = true;\n\t\trequestAnimationFrame(() => {\n\t\t\tthis.#multipleBlockSizingScheduled = false;\n\t\t\tif (this.#isDestroyed || !this.#viewInitialised) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#syncMultipleBlockSizing();\n\t\t});\n\t}\n\n\t/** Moves projected panel hosts into their visible multiple-block container. */\n\t#placeProjectedPanels(): void {\n\t\tconst contentRoot = this.contentRoot()?.nativeElement;\n\t\tif (!contentRoot) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this.allowsMultipleActive() || this.isAccordionView()) {\n\t\t\tfor (const panel of this.panels()) {\n\t\t\t\tconst panelElement = panel.elementRef.nativeElement;\n\t\t\t\tif (panelElement.parentElement !== contentRoot) {\n\t\t\t\t\tthis.#renderer.appendChild(contentRoot, panelElement);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst hostMap = new Map(\n\t\t\tArray.from(\n\t\t\t\tthis.#elementRef.nativeElement.querySelectorAll<HTMLElement>(\n\t\t\t\t\t'.hub-panels__multiple-layout .hub-panels__multiple-pane-host'\n\t\t\t\t)\n\t\t\t)\n\t\t\t\t.map((host) => [host.dataset['panelId'] ?? '', host] as const)\n\t\t);\n\t\tfor (const panel of this.panels()) {\n\t\t\tconst panelElement = panel.elementRef.nativeElement;\n\t\t\tconst targetHost = hostMap.get(panel.id()) ?? contentRoot;\n\t\t\tif (panelElement.parentElement !== targetHost) {\n\t\t\t\tthis.#renderer.appendChild(targetHost, panelElement);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Updates the minimum content width for each `multiple + vertical` block. */\n\t#syncMultipleBlockSizing(): void {\n\t\tfor (const blockRef of this.multipleBlocks()) {\n\t\t\tconst block = blockRef.nativeElement;\n\t\t\tthis.#renderer.removeStyle(\n\t\t\t\tblock,\n\t\t\t\t'--hub-panels-multiple-vertical-panel-min-width',\n\t\t\t\tRendererStyleFlags2.DashCase\n\t\t\t);\n\t\t\tif (!this.vertical() || !this.allowsMultipleActive() || this.isAccordionView()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst header = block.querySelector(':scope > .hub-panels__header');\n\t\t\tif (!(header instanceof HTMLElement)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst headerStackHeight = Math.ceil(header.getBoundingClientRect().height);\n\t\t\tthis.#renderer.setStyle(\n\t\t\t\tblock,\n\t\t\t\t'--hub-panels-multiple-vertical-panel-min-width',\n\t\t\t\t`${headerStackHeight}px`,\n\t\t\t\tRendererStyleFlags2.DashCase\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Activates the first enabled panel when none is active. Skipped for the\n\t * accordion view (panels start collapsed), for routed containers (the URL\n\t * is the single source of truth) and when a form value is bound (the form\n\t * is).\n\t */\n\t#ensureActivePanel(): void {\n\t\tif (this.isAccordionView() || this.#formValue !== null) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.allowsMultipleActive()) {\n\t\t\treturn;\n\t\t}\n\t\tconst panels = this.panels();\n\t\tif (!panels.length || panels.some((panel) => panel.active())) {\n\t\t\treturn;\n\t\t}\n\t\tif (panels.some((panel) => !!panel.routerUrl())) {\n\t\t\treturn;\n\t\t}\n\t\tpanels.find((panel) => !panel.disabled())?.active.set(true);\n\t}\n\n\t/** Activates/deactivates panels so they mirror the bound form value. */\n\t#applyFormValue(): void {\n\t\tif (this.#formValue === null) {\n\t\t\treturn;\n\t\t}\n\t\tconst compare = this.compareWith();\n\t\tfor (const panel of this.panels()) {\n\t\t\tconst panelValue = this.#comparableValue(panel);\n\t\t\tconst matches = this.#formValue.some((selectedValue) => compare(selectedValue, panelValue));\n\t\t\tif (panel.active() !== matches) {\n\t\t\t\tpanel.active.set(matches);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Emits the current selection through the form-control callback. */\n\t#emitFormValue(): void {\n\t\tconst compare = this.compareWith();\n\t\tconst activeValues = this.panels()\n\t\t\t.filter((panel) => panel.active())\n\t\t\t.map((panel) => this.#comparableValue(panel));\n\t\tif (this.#formValue !== null) {\n\t\t\tthis.#formValue = [...activeValues];\n\t\t}\n\t\t// Deduplicate defensively when several panels share the same value.\n\t\tconst uniqueValues = activeValues.filter(\n\t\t\t(value, index) => activeValues.findIndex((candidate) => compare(candidate, value)) === index\n\t\t);\n\t\tthis.#onChange(this.multiple() ? uniqueValues : (uniqueValues[0] ?? null));\n\t}\n\n\t/** Form value of a panel with the `bindValue` path applied. */\n\t#comparableValue(panel: PanelComponent): unknown {\n\t\tconst rawValue = panel.formValue();\n\t\tconst bindPath = this.bindValue();\n\t\treturn bindPath ? readByPath(rawValue, bindPath) : rawValue;\n\t}\n}\n","@if (!isAccordionView() && !isCardView()) {\n\t@if (multiple()) {\n\t\t<div class=\"hub-panels__multiple-layout\">\n\t\t\t@for (group of multipleHeaderGroups(); track group.activePanel ?? group.headers[0]) {\n\t\t\t\t<div\n\t\t\t\t\t#multipleBlock\n\t\t\t\t\tclass=\"hub-panels hub-panels__multiple-block\"\n\t\t\t\t\t[class.hub-panels--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t[class.hub-panels--pills]=\"type() === 'pills'\"\n\t\t\t\t\t[class.hub-panels--vertical]=\"vertical()\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"hub-panels__header\">\n\t\t\t\t\t\t<ul\n\t\t\t\t\t\t\tclass=\"hub-panels__nav\"\n\t\t\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"config.ariaLabel\"\n\t\t\t\t\t\t\t[attr.aria-orientation]=\"vertical() ? 'vertical' : null\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--pills]=\"type() === 'pills'\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--vertical]=\"vertical()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--justified]=\"justified()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@for (panel of group.headers; track panel) {\n\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-item\"\n\t\t\t\t\t\t\t\t\t[class]=\"panel.customClass()\"\n\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-item--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-item--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-link\"\n\t\t\t\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\t\t\t\t[id]=\"panel.id() + '-link'\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"panel.disabled() || formDisabled()\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-controls]=\"panel.id()\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t\t[attr.tabindex]=\"panel.active() || (!activePanel() && panelIndex(panel) === 0) ? null : -1\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"selectPanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t(keydown)=\"onPanelKeydown($event, panelIndex(panel))\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t@if (panel.headingRef(); as headingRef) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingRef\" />\n\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t{{ panel.heading() }}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (panel.removable()) {\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__remove-btn\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); removePanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t\t\t>&times;</span\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t@if (!justified() && type() !== 'pills' && !vertical()) {\n\t\t\t\t\t\t\t<div class=\"hub-panels__spacer\"></div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t@if (group.activePanel) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"hub-panels__content\"\n\t\t\t\t\t\t\t[class.hub-panels__content--pills]=\"type() === 'pills'\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t#multiplePaneHost\n\t\t\t\t\t\t\t\tclass=\"hub-panels__multiple-pane-host\"\n\t\t\t\t\t\t\t\t[attr.data-panel-id]=\"group.activePanel.id()\"\n\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t} @else {\n\t\t<div class=\"hub-panels__header\">\n\t\t\t@if (scrollable() && !backwardIsDisabled()) {\n\t\t\t\t<button\n\t\t\t\t\t#prevBtn\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-panels__scroll-btn hub-panels__scroll-btn--backward\"\n\t\t\t\t\t[attr.aria-label]=\"config.scrollBackwardAriaLabel\"\n\t\t\t\t\t(click)=\"navBackward()\"\n\t\t\t\t></button>\n\t\t\t}\n\n\t\t\t<div #navScroller class=\"hub-panels__nav-scroller\" (scroll)=\"onScroll()\">\n\t\t\t\t<ul\n\t\t\t\t\tclass=\"hub-panels__nav\"\n\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\t[attr.aria-label]=\"config.ariaLabel\"\n\t\t\t\t\t[attr.aria-orientation]=\"vertical() ? 'vertical' : null\"\n\t\t\t\t\t[class.hub-panels__nav--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t[class.hub-panels__nav--pills]=\"type() === 'pills'\"\n\t\t\t\t\t[class.hub-panels__nav--vertical]=\"vertical()\"\n\t\t\t\t\t[class.hub-panels__nav--justified]=\"justified()\"\n\t\t\t\t>\n\t\t\t\t\t@for (panel of panels(); track panel; let index = $index) {\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\tclass=\"hub-panels__nav-item\"\n\t\t\t\t\t\t\t[class]=\"panel.customClass()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav-item--active]=\"panel.active()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav-item--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-link\"\n\t\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\t\t[id]=\"panel.id() + '-link'\"\n\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t[disabled]=\"panel.disabled() || formDisabled()\"\n\t\t\t\t\t\t\t\t[attr.aria-controls]=\"panel.id()\"\n\t\t\t\t\t\t\t\t[attr.aria-selected]=\"panel.active()\"\n\t\t\t\t\t\t\t\t[attr.tabindex]=\"panel.active() || (!activePanel() && index === 0) ? null : -1\"\n\t\t\t\t\t\t\t\t(click)=\"selectPanel(panel)\"\n\t\t\t\t\t\t\t\t(keydown)=\"onPanelKeydown($event, index)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (panel.headingRef(); as headingRef) {\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingRef\" />\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t{{ panel.heading() }}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@if (panel.removable()) {\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__remove-btn\"\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); removePanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t>&times;</span\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t\t@if (!justified() && type() !== 'pills') {\n\t\t\t\t\t<div class=\"hub-panels__spacer\"></div>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t@if (scrollable() && !forwardIsDisabled()) {\n\t\t\t\t<button\n\t\t\t\t\t#nextBtn\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-panels__scroll-btn hub-panels__scroll-btn--forward\"\n\t\t\t\t\t[attr.aria-label]=\"config.scrollForwardAriaLabel\"\n\t\t\t\t\t(click)=\"navForward()\"\n\t\t\t\t></button>\n\t\t\t}\n\t\t</div>\n\t}\n}\n\n<div\n\t#contentRoot\n\tclass=\"hub-panels__content\"\n\t[class.hub-panels__content--pills]=\"type() === 'pills'\"\n\t[class.hub-panels__content--accordion]=\"isAccordionView()\"\n\t[class.hub-panels__content--multiple-parking]=\"!isAccordionView() && multiple()\"\n>\n\t@if (activePanelHasRouter()) {\n\t\t<router-outlet />\n\t} @else {\n\t\t<ng-content />\n\t}\n</div>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\tOnDestroy,\n\toutput,\n\tRenderer2,\n\tsignal,\n\tTemplateRef,\n\tViewEncapsulation\n} from '@angular/core';\nimport { Params, Router } from '@angular/router';\n\nimport { HubPanelAppearance, HubPanelVariant } from '../../models/panels.types';\nimport { PanelsComponent } from '../panels/panels.component';\n\n/** Monotonic counter backing the auto-generated accessibility ids. */\nlet nextPanelId = 0;\n\n/**\n * One content panel inside a `<hub-panels>` container.\n *\n * In the `tabs` / `pills` views the host element is the tab *panel*\n * (`role=\"tabpanel\"`) and the clickable header is rendered by\n * {@link PanelsComponent} in the strip. In the `accordion` view this component\n * renders its own disclosure header plus an animated collapse wrapper around\n * the projected content. In every view the header comes from `heading` or from\n * a `<ng-template hubPanelHeading>` projected inside this element.\n *\n * Panels can be plain content panes or routed: when `routerLink` is set, the\n * container renders a `<router-outlet>` instead of the projected panels and\n * the active panel follows the current URL (`tabs` / `pills` views only).\n *\n * @example\n * ```html\n * <hub-panels>\n * <hub-panel heading=\"Fields\">…</hub-panel>\n * <hub-panel>\n * <ng-template hubPanelHeading>Validations <span class=\"badge\">3</span></ng-template>\n * …\n * </hub-panel>\n * </hub-panels>\n * ```\n */\n@Component({\n\tselector: 'hub-panel, [hub-panel]',\n\texportAs: 'hubPanel',\n\timports: [NgTemplateOutlet],\n\ttemplateUrl: './panel.component.html',\n\t// The `card` view styles (and the projected header/footer bands) live here so\n\t// a standalone `<hub-panel>` — used outside any `<hub-panels>` container, which\n\t// would otherwise be the only source of the global styles — is styled too.\n\t// `ViewEncapsulation.None` is required so the rules reach the projected,\n\t// consumer-owned `[hubPanelHeader]` / `[hubPanelFooter]` elements.\n\tstyleUrl: './panel.component.scss',\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\tclass: 'hub-panels__panel',\n\t\t'[attr.id]': 'accordionView() || cardView() ? null : id()',\n\t\t'[attr.role]': \"alertView() ? 'alert' : (accordionView() || cardView() ? null : 'tabpanel')\",\n\t\t'[attr.aria-labelledby]': \"accordionView() || cardView() ? null : id() + '-link'\",\n\t\t'[attr.data-variant]': 'alertView() ? (variant() ?? null) : null',\n\t\t'[style.--hub-panels-alert-accent]': 'alertAccent()',\n\t\t'[class.hub-panels__panel--active]': 'active()',\n\t\t'[class.hub-panels__panel--accordion]': 'accordionView()',\n\t\t'[class.hub-panels__panel--card]': 'cardView() && !alertView()',\n\t\t'[class.hub-panels__panel--alert]': 'alertView()'\n\t}\n})\nexport class PanelComponent implements OnDestroy {\n\t/** Host element reference — exposed so the container can detach removed panes. */\n\treadonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\treadonly #renderer = inject(Renderer2);\n\treadonly #router = inject(Router);\n\n\t/**\n\t * Owning panels container, or `null` when the panel is used standalone\n\t * (outside any `<hub-panels>`), in which case it renders as a card.\n\t * Exposed to the template for the accordion header.\n\t */\n\tprotected readonly tabset = inject(PanelsComponent, { optional: true });\n\n\t/** Plain-text panel header. Ignored when a `hubPanelHeading` template exists. */\n\treadonly heading = input<string | undefined>(undefined);\n\n\t/**\n\t * Visual appearance of a standalone panel: a plain `card` (default) or a\n\t * semantic `alert` callout. Only meaningful when the panel renders as a\n\t * card (used standalone or inside a `card` container); ignored in the\n\t * tabs / pills / accordion strip views.\n\t */\n\treadonly appearance = input<HubPanelAppearance>('card');\n\n\t/**\n\t * Semantic colour applied when `appearance` is `alert`. The built-in values\n\t * (`primary` / `success` / `danger` / `warning` / `info`) render with the\n\t * design-system tints. Any other string is also accepted: the alert reads\n\t * `--hub-sys-color-<variant>` from the host application, so a custom accent\n\t * palette interconnects with no changes to this library. Omit for a neutral\n\t * alert.\n\t */\n\treadonly variant = input<HubPanelVariant | (string & {}) | undefined>(undefined);\n\n\t/**\n\t * Unique id used for the `tab` / `tabpanel` (or accordion header / region)\n\t * ARIA pairing. Auto-generated (`hub-panel-<n>`) when not provided.\n\t */\n\treadonly id = input<string>(`hub-panel-${nextPanelId++}`);\n\n\t/** Whether the panel cannot be activated. */\n\treadonly disabled = input(false, { transform: booleanAttribute });\n\n\t/** Whether the panel shows a remove affordance (✕ and the Delete key). */\n\treadonly removable = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * URL comparison used to mark routed panels active: `'route'` compares the\n\t * path only, `'full'` also compares query params.\n\t */\n\treadonly pathMatch = input<'route' | 'full'>('route');\n\n\t/** Navigation target that turns this panel into a routed panel. */\n\treadonly routerLink = input<string | string[] | null | undefined>(undefined);\n\n\t/** Query params appended when navigating to `routerLink`. */\n\treadonly queryParams = input<Params | null | undefined>(undefined);\n\n\t/** Extra CSS classes applied to both the nav item and this pane. */\n\treadonly customClass = input<string | undefined>(undefined);\n\n\t/**\n\t * Value this panel contributes when the container is used as a form control\n\t * (see {@link PanelsComponent} `ControlValueAccessor`). Defaults to `id`.\n\t */\n\treadonly value = input<unknown>(undefined);\n\n\t/** Whether the panel is currently active (expanded, in the accordion view). */\n\treadonly active = model(false);\n\n\t/** Emitted when the panel becomes active. */\n\treadonly selectPanel = output<PanelComponent>();\n\n\t/** Emitted when the panel stops being active. */\n\treadonly deselectPanel = output<PanelComponent>();\n\n\t/** Emitted when the panel is removed through the ✕ button or the Delete key. */\n\treadonly removed = output<PanelComponent>();\n\n\t/** Custom header template registered by `PanelHeadingDirective`. */\n\treadonly headingRef = signal<TemplateRef<unknown> | undefined>(undefined);\n\n\t/** Whether the owning container renders the accordion visualization. */\n\tprotected readonly accordionView = computed(() => this.tabset?.isAccordionView() ?? false);\n\n\t/**\n\t * Whether this panel renders as a card: either inside a `<hub-panels\n\t * type=\"card\">` container or standalone (no owning container at all).\n\t */\n\tprotected readonly cardView = computed(() => !this.tabset || this.tabset.isCardView());\n\n\t/**\n\t * Whether this panel renders as a semantic alert: `appearance=\"alert\"` while\n\t * in a card-capable context (standalone or inside a `card` container). In the\n\t * strip / accordion views the alert appearance is ignored.\n\t */\n\tprotected readonly alertView = computed(() => this.appearance() === 'alert' && this.cardView());\n\n\t/**\n\t * Inline accent fed to the alert styles: `var(--hub-sys-color-<variant>)` for\n\t * the active variant, or `null` for a neutral alert / non-alert view. This is\n\t * what makes the variant set open — any accent token defined by the host\n\t * application is picked up without the library knowing the variant name.\n\t */\n\tprotected readonly alertAccent = computed(() => {\n\t\tconst variant = this.variant();\n\t\treturn this.alertView() && variant ? `var(--hub-sys-color-${variant})` : null;\n\t});\n\n\t/** Form value resolved for this panel: the explicit `value` or the panel id. */\n\treadonly formValue = computed(() => (this.value() !== undefined ? this.value() : this.id()));\n\n\t/** `routerLink` normalised to a segments array, or `null` when not routed. */\n\treadonly routerUrl = computed<string[] | null>(() => {\n\t\tconst link = this.routerLink();\n\t\tif (!link) {\n\t\t\treturn null;\n\t\t}\n\t\treturn Array.isArray(link) ? link : [link];\n\t});\n\n\t/** Last activation state seen by the effect — avoids emitting on init. */\n\t#wasActive = false;\n\n\tconstructor() {\n\t\t// Standalone panels (no container) render as a card and skip registration.\n\t\tthis.tabset?.registerPanel(this);\n\n\t\t// Mirror `customClass` onto the pane host element.\n\t\teffect((onCleanup) => {\n\t\t\tconst classes = (this.customClass() ?? '')\n\t\t\t\t.split(' ')\n\t\t\t\t.map((cssClass) => cssClass.trim())\n\t\t\t\t.filter((cssClass) => cssClass.length > 0);\n\t\t\tfor (const cssClass of classes) {\n\t\t\t\tthis.#renderer.addClass(this.elementRef.nativeElement, cssClass);\n\t\t\t}\n\t\t\tonCleanup(() => {\n\t\t\t\tfor (const cssClass of classes) {\n\t\t\t\t\tthis.#renderer.removeClass(this.elementRef.nativeElement, cssClass);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// Activation side effects: emit outputs and enforce single-active-panel\n\t\t// (unless the container allows multiple expanded panels — accordion mode).\n\t\teffect(() => {\n\t\t\tconst isActive = this.active();\n\t\t\tif (isActive && this.disabled()) {\n\t\t\t\tthis.active.set(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isActive === this.#wasActive) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#wasActive = isActive;\n\t\t\tif (isActive) {\n\t\t\t\tthis.selectPanel.emit(this);\n\t\t\t\tif (this.tabset && !this.tabset.allowsMultipleActive()) {\n\t\t\t\t\tfor (const panel of this.tabset.panels()) {\n\t\t\t\t\t\tif (panel !== this) {\n\t\t\t\t\t\t\tpanel.active.set(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.deselectPanel.emit(this);\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.tabset?.removePanel(this, { reselect: false, emit: false });\n\t}\n\n\t/** Route path plus query string, or `null` when the panel is not routed. */\n\tgetFullRoute(): string | null {\n\t\tconst route = this.getRoute();\n\t\tif (!route) {\n\t\t\treturn null;\n\t\t}\n\t\tconst queryString = this.getQueryParamsString();\n\t\treturn queryString ? `${route}?${queryString}` : route;\n\t}\n\n\t/** Normalised absolute route path, or `null` when the panel is not routed. */\n\tgetRoute(): string | null {\n\t\tconst routerUrl = this.routerUrl();\n\t\tif (!routerUrl) {\n\t\t\treturn null;\n\t\t}\n\t\tlet route = routerUrl.join('/').replace(/\\/\\/+/g, '/');\n\t\tif (route.charAt(0) === '.') {\n\t\t\troute = route.substring(1);\n\t\t}\n\t\tif (route.charAt(0) !== '/') {\n\t\t\troute = `/${route}`;\n\t\t}\n\t\treturn route;\n\t}\n\n\t/** `queryParams` serialised as `key=value&…`, or `null` when empty. */\n\tgetQueryParamsString(): string | null {\n\t\tconst params = this.queryParams();\n\t\tif (!params || !Object.keys(params).length) {\n\t\t\treturn null;\n\t\t}\n\t\treturn Object.entries(params)\n\t\t\t.map(([key, value]) => `${key}=${value}`)\n\t\t\t.join('&');\n\t}\n\n\t/** Navigates to the panel's route. No-op for non-routed panels. */\n\tnavigate(): void {\n\t\tconst routerUrl = this.routerUrl();\n\t\tif (routerUrl) {\n\t\t\tthis.#router.navigate(routerUrl, { queryParams: this.queryParams() ?? {} });\n\t\t}\n\t}\n\n\t/** Accordion header click — toggles this panel through the container. */\n\tprotected onAccordionHeaderClick(): void {\n\t\tthis.tabset?.togglePanel(this);\n\t}\n\n\t/** Accordion header keyboard navigation, delegated to the container. */\n\tprotected onAccordionHeaderKeydown(event: KeyboardEvent): void {\n\t\tthis.tabset?.onAccordionKeydown(event, this);\n\t}\n\n\t/** Removes this panel through the accordion header's ✕ affordance. */\n\tprotected removeSelf(): void {\n\t\tthis.tabset?.removePanel(this);\n\t}\n}\n","@if (accordionView()) {\n\t<h2 class=\"hub-panels__accordion-header\">\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"hub-panels__accordion-btn\"\n\t\t\t[class.hub-panels__accordion-btn--collapsed]=\"!active()\"\n\t\t\t[id]=\"id() + '-link'\"\n\t\t\t[disabled]=\"disabled() || tabset?.formDisabled()\"\n\t\t\t[attr.aria-expanded]=\"active()\"\n\t\t\t[attr.aria-controls]=\"id()\"\n\t\t\t(click)=\"onAccordionHeaderClick()\"\n\t\t\t(keydown)=\"onAccordionHeaderKeydown($event)\"\n\t\t>\n\t\t\t@if (headingRef(); as headingTemplate) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingTemplate\" />\n\t\t\t} @else {\n\t\t\t\t{{ heading() }}\n\t\t\t}\n\t\t\t@if (removable()) {\n\t\t\t\t<span class=\"hub-panels__remove-btn\" aria-hidden=\"true\" (click)=\"$event.stopPropagation(); removeSelf()\">&times;</span>\n\t\t\t}\n\t\t</button>\n\t</h2>\n}\n\n<!-- Projection slots for every view. In the strip views the wrappers are plain\n\t pass-throughs; in the accordion view they become the animated collapse\n\t region. The header/footer `select` slots and the default `<ng-content>` are\n\t all UNCONDITIONAL — never wrapped in `@if` — to avoid the lost-projection\n\t bug that conditional slots cause. Header/footer render in every view; the\n\t `card` view styles them as the card's header and footer bands. -->\n<div\n\t[class.hub-panels__accordion-collapse]=\"accordionView()\"\n\t[class.hub-panels__accordion-collapse--collapsed]=\"accordionView() && !active()\"\n\t[attr.role]=\"accordionView() ? 'region' : null\"\n\t[attr.id]=\"accordionView() ? id() : null\"\n\t[attr.aria-labelledby]=\"accordionView() ? id() + '-link' : null\"\n\t[attr.aria-hidden]=\"accordionView() ? !active() : null\"\n\t[attr.inert]=\"accordionView() && !active() ? '' : null\"\n>\n\t<div [class.hub-panels__accordion-body]=\"accordionView()\">\n\t\t<ng-content select=\"[hubPanelHeader]\" />\n\t\t<div class=\"hub-panels__panel-body\">\n\t\t\t<ng-content />\n\t\t</div>\n\t\t<ng-content select=\"[hubPanelFooter]\" />\n\t</div>\n</div>\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\nimport { PanelComponent } from '../components/panel/panel.component';\n\n/**\n * Marks an `<ng-template>` inside a `hub-panel` as that panel's custom header\n * (strip link in `tabs`/`pills` view, disclosure button in `accordion` view),\n * replacing the plain-text `heading` input.\n *\n * @example\n * ```html\n * <hub-panel>\n * <ng-template hubPanelHeading><em>Rich</em> heading</ng-template>\n * Panel content\n * </hub-panel>\n * ```\n */\n@Directive({ selector: '[hubPanelHeading]' })\nexport class PanelHeadingDirective {\n\tconstructor() {\n\t\tinject(PanelComponent).headingRef.set(inject(TemplateRef));\n\t}\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Marks an element inside a `hub-panel` as the panel's content **header** band,\n * projected at the top of the panel body (above `<ng-content>`).\n *\n * Unlike `hubPanelHeading` — which renders the navigational label in the\n * `tabs`/`pills` strip or the `accordion` disclosure button — this header lives\n * inside the panel body and renders in **every** view (`tabs`, `pills`,\n * `accordion`, `card`). It is the natural title slot for the `card` format.\n *\n * @example\n * ```html\n * <hub-panel>\n * <div hubPanelHeader>Card title</div>\n * Card content\n * <div hubPanelFooter>Actions</div>\n * </hub-panel>\n * ```\n */\n@Directive({\n\tselector: '[hubPanelHeader]',\n\thost: { class: 'hub-panels__panel-header' }\n})\nexport class PanelHeaderDirective {}\n","import { Directive } from '@angular/core';\n\n/**\n * Marks an element inside a `hub-panel` as the panel's content **footer** band,\n * projected at the bottom of the panel body (below `<ng-content>`).\n *\n * Renders in **every** view (`tabs`, `pills`, `accordion`, `card`); it is the\n * natural actions/footer slot for the `card` format.\n *\n * @example\n * ```html\n * <hub-panel>\n * <div hubPanelHeader>Card title</div>\n * Card content\n * <div hubPanelFooter>Actions</div>\n * </hub-panel>\n * ```\n */\n@Directive({\n\tselector: '[hubPanelFooter]',\n\thost: { class: 'hub-panels__panel-footer' }\n})\nexport class PanelFooterDirective {}\n","/*\n * Public API Surface of ng-hub-ui-panels\n */\n\nexport { PanelHeadingDirective } from './lib/directives/panel-heading.directive';\nexport { PanelHeaderDirective } from './lib/directives/panel-header.directive';\nexport { PanelFooterDirective } from './lib/directives/panel-footer.directive';\nexport { PanelComponent } from './lib/components/panel/panel.component';\nexport { PanelsComponent } from './lib/components/panels/panels.component';\nexport { PanelsConfig } from './lib/services/panels-config.service';\nexport type { PanelChangeEvent, PanelsType } from './lib/models/panels.types';\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-panels.mjs","sources":["../../../projects/panels/src/lib/services/panels-config.service.ts","../../../projects/panels/src/lib/utils/content-box-width.ts","../../../projects/panels/src/lib/utils/read-by-path.ts","../../../projects/panels/src/lib/components/panels/panels.component.ts","../../../projects/panels/src/lib/components/panels/panels.component.html","../../../projects/panels/src/lib/components/panel/panel.component.ts","../../../projects/panels/src/lib/components/panel/panel.component.html","../../../projects/panels/src/lib/directives/panel-heading.directive.ts","../../../projects/panels/src/lib/directives/panel-header.directive.ts","../../../projects/panels/src/lib/directives/panel-footer.directive.ts","../../../projects/panels/src/public-api.ts","../../../projects/panels/src/ng-hub-ui-panels.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport type { PanelsType } from '../models/panels.types';\n\n/**\n * Injectable defaults for every `<hub-panels>` in the application.\n *\n * Override at any injector level to change the defaults globally or for a\n * feature subtree:\n *\n * ```ts\n * providers: [{ provide: PanelsConfig, useValue: { ...new PanelsConfig(), type: 'pills' } }]\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class PanelsConfig {\n\t/** Default navigation style — `'tabs'`, `'pills'` or `'accordion'`. */\n\ttype: PanelsType = 'tabs';\n\n\t/** Whether keyboard navigation (arrows / Home / End / Delete) is enabled. */\n\tisKeysAllowed = true;\n\n\t/** Accessible label announced for the panel list. */\n\tariaLabel = 'Tabs';\n\n\t/** Accessible label for the backward scroll button (scrollable mode). */\n\tscrollBackwardAriaLabel = 'Scroll tabs backward';\n\n\t/** Accessible label for the forward scroll button (scrollable mode). */\n\tscrollForwardAriaLabel = 'Scroll tabs forward';\n}\n","/**\n * Usable inner width of an element: `offsetWidth` minus horizontal paddings\n * and borders. Used by the scrollable strip to size its scroll steps.\n */\nexport function contentBoxWidth(element: HTMLElement): number {\n\tconst style = getComputedStyle(element);\n\treturn (\n\t\telement.offsetWidth -\n\t\tparseFloat(style.paddingLeft) -\n\t\tparseFloat(style.paddingRight) -\n\t\tparseFloat(style.borderLeftWidth) -\n\t\tparseFloat(style.borderRightWidth)\n\t);\n}\n","/**\n * Reads a nested value from an object using dot-notation path syntax\n * (e.g. `id`, `meta.key`). Returns `undefined` when the path cannot be\n * resolved. Used by the panels' `bindValue` form-value mapping.\n */\nexport function readByPath(source: unknown, path: string): unknown {\n\tif (source == null || !path) {\n\t\treturn undefined;\n\t}\n\treturn path.split('.').reduce((currentValue: unknown, segment) => {\n\t\tif (currentValue == null) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn (currentValue as Record<string, unknown>)[segment];\n\t}, source);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tDestroyRef,\n\tElementRef,\n\tforwardRef,\n\tinject,\n\tinput,\n\toutput,\n\tRenderer2,\n\tRendererStyleFlags2,\n\tsignal,\n\tviewChild,\n\tviewChildren,\n\tViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NavigationEnd, Router, RouterOutlet } from '@angular/router';\nimport { filter } from 'rxjs';\n\nimport type { HubPanelVariant, PanelChangeEvent, PanelsType } from '../../models/panels.types';\nimport { PanelsConfig } from '../../services/panels-config.service';\nimport { contentBoxWidth } from '../../utils/content-box-width';\nimport { readByPath } from '../../utils/read-by-path';\nimport type { PanelComponent } from '../panel/panel.component';\n\ninterface MultipleHeaderGroup {\n\tactivePanel?: PanelComponent;\n\theaders: PanelComponent[];\n}\n\n/**\n * Content-panels container — the hub `panels` primitive.\n *\n * Projects `<hub-panel>` panes and renders them in one of three views:\n *\n * - **`tabs` / `pills`** — an accessible `tablist` of clickable headers\n * (roving tabindex, arrow/Home/End/Delete keys) above the active pane.\n * Panels with a `routerLink` switch the content area to a `<router-outlet>`\n * and the active panel follows the URL. With `scrollable`, overflowing\n * headers get backward/forward scroll buttons.\n * - **`accordion`** — each panel renders as a stacked disclosure panel with an\n * animated collapse: clicking an open header closes it, `multiple` allows\n * several panels open at once and `flush` removes the outer chrome. All\n * panels start collapsed unless a panel is marked `[active]` or a form value\n * is bound. Routed panels are not supported in this view.\n *\n * The container implements `ControlValueAccessor`, so the active panel(s) can\n * be bound as a form value (`ngModel` / `formControl`): each panel contributes\n * its `value` (or its `id` by default), optionally narrowed with `bindValue`\n * and compared with `compareWith`. With `multiple` the form value is an array.\n *\n * Theming is driven entirely by the `--hub-panels-*` CSS custom properties\n * (see `panels.variables.scss`); the accordion view also honours the\n * `--hub-accordion-*` ng-hub-ui contract as a compatibility fallback.\n *\n * @example\n * ```html\n * <hub-panels type=\"accordion\" multiple [formControl]=\"openPanels\">\n * <hub-panel heading=\"Fields\" value=\"fields\">…</hub-panel>\n * <hub-panel heading=\"Validations\" value=\"validations\">…</hub-panel>\n * </hub-panels>\n * ```\n */\n@Component({\n\tselector: 'hub-panels',\n\timports: [NgTemplateOutlet, RouterOutlet],\n\ttemplateUrl: './panels.component.html',\n\t// Split by concern (token contract / strip views / accordion view) so each\n\t// sheet stays inside the `anyComponentStyle` budget.\n\tstyleUrls: ['./panels.variables.scss', './panels.component.scss', './panels.accordion.scss'],\n\t// Library-style global stylesheet: rules are namespaced under `.hub-panels*`\n\t// and must reach the projected `hub-panel` panes (host-bound classes).\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => PanelsComponent),\n\t\t\tmulti: true\n\t\t}\n\t],\n\thost: {\n\t\tclass: 'hub-panels',\n\t\t'[class.hub-panels--tabs]': \"type() === 'tabs'\",\n\t\t'[class.hub-panels--pills]': \"type() === 'pills'\",\n\t\t'[class.hub-panels--card]': 'isCardView()',\n\t\t'[class.hub-panels--vertical]': 'vertical() && !isAccordionView() && !isCardView()',\n\t\t'[class.hub-panels--accordion]': 'isAccordionView()',\n\t\t'[class.hub-panels--flush]': 'isAccordionView() && flush()',\n\t\t'[class.hub-panels--multiple]': 'multiple()',\n\t\t'[attr.data-variant]': 'variant() ?? null',\n\t\t'[style.--hub-panels-accent]': 'groupAccent()',\n\t\t'(window:resize)': 'onWindowResize()'\n\t}\n})\nexport class PanelsComponent implements ControlValueAccessor {\n\treadonly #router = inject(Router);\n\treadonly #renderer = inject(Renderer2);\n\treadonly #elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\treadonly #destroyRef = inject(DestroyRef);\n\n\t/** Container-wide defaults (aria labels, default type, keyboard toggle). */\n\tprotected readonly config = inject(PanelsConfig);\n\n\t/** Scrollable container hosting the panel headers (`tabs` / `pills` views). */\n\treadonly navScroller = viewChild<ElementRef<HTMLElement>>('navScroller');\n\n\t/** Backward scroll button (only rendered while it can scroll back). */\n\treadonly prevBtn = viewChild<ElementRef<HTMLElement>>('prevBtn');\n\n\t/** Forward scroll button (only rendered while it can scroll forward). */\n\treadonly nextBtn = viewChild<ElementRef<HTMLElement>>('nextBtn');\n\n\t/** Parking lot that owns the projected panel hosts before they are placed. */\n\treadonly contentRoot = viewChild<ElementRef<HTMLElement>>('contentRoot');\n\n\t/** Visible block hosts used by `multiple` tabs / pills. */\n\treadonly multiplePaneHosts = viewChildren<ElementRef<HTMLElement>>('multiplePaneHost');\n\n\t/** Visible grouped blocks used by `multiple` tabs / pills. */\n\treadonly multipleBlocks = viewChildren<ElementRef<HTMLElement>>('multipleBlock');\n\n\t/** Emitted when the user activates (opens) a different panel. */\n\treadonly panelChange = output<PanelChangeEvent>();\n\n\t/** Whether the panel list is stacked beside the content (`tabs` / `pills`). */\n\treadonly vertical = input(false, { transform: booleanAttribute });\n\n\t/** Whether panel headers stretch to share the available width equally. */\n\treadonly justified = input(false, { transform: booleanAttribute });\n\n\t/** Visualization — `'tabs'` (default), `'pills'` or `'accordion'`. */\n\treadonly type = input<PanelsType>(this.config.type);\n\n\t/** Whether keyboard navigation is enabled. */\n\treadonly isKeysAllowed = input(this.config.isKeysAllowed, {\n\t\ttransform: booleanAttribute\n\t});\n\n\t/** Whether overflowing headers get backward/forward scroll buttons. */\n\treadonly scrollable = input(false, { transform: booleanAttribute });\n\n\t/** Accordion view: whether several panels may be expanded at once. */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/** Accordion view: edge-to-edge panels without outer borders or radius. */\n\treadonly flush = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Semantic accent applied to the navigation strip — the active/hover tab, the\n\t * active pill and the active accordion header all follow it. The built-in\n\t * values (`primary` / `success` / `danger` / `warning` / `info`) render with\n\t * the design-system tints; any other string is also accepted, since the strip\n\t * reads `--hub-sys-color-<variant>` from the host application, so a custom\n\t * accent palette interconnects with no changes to this library. Defaults to\n\t * `primary` when omitted.\n\t */\n\treadonly variant = input<HubPanelVariant | (string & {}) | undefined>(undefined);\n\n\t/**\n\t * Dot-notation path applied to each panel's `value` to obtain the emitted\n\t * form value (e.g. `'meta.key'`). Empty by default — the raw value is used.\n\t */\n\treadonly bindValue = input<string | undefined>(undefined);\n\n\t/** Equality used to match form values against panel values. `===` by default. */\n\treadonly compareWith = input<(a: unknown, b: unknown) => boolean>((a, b) => a === b);\n\n\t/** Registered panels, in projection order. */\n\treadonly panels = signal<PanelComponent[]>([]);\n\n\t/** Currently active panel, if any (the first one, under `multiple`). */\n\treadonly activePanel = computed(() => this.panels().find((panel) => panel.active()));\n\n\t/** Panel index lookup used by the strip templates and keyboard navigation. */\n\treadonly panelIndexMap = computed(() => new Map(this.panels().map((panel, index) => [panel, index])));\n\n\t/** Whether the container renders the accordion visualization. */\n\treadonly isAccordionView = computed(() => this.type() === 'accordion');\n\n\t/**\n\t * Whether the container renders the chromeless `card` visualization: no\n\t * navigation strip and every panel always visible, each styled as a card.\n\t */\n\treadonly isCardView = computed(() => this.type() === 'card');\n\n\t/**\n\t * Inline accent fed to the strip styles: `var(--hub-sys-color-<variant>)` for\n\t * the active variant, or `null` to keep the `primary` default. This is what\n\t * makes the variant set open — any accent token defined by the host\n\t * application is picked up without the library knowing the variant name.\n\t */\n\tprotected readonly groupAccent = computed(() => {\n\t\tconst variant = this.variant();\n\t\treturn variant ? `var(--hub-sys-color-${variant})` : null;\n\t});\n\n\t/**\n\t * Whether more than one panel may be active at once. Driven by `multiple`\n\t * for every view, and always enabled in the `card` view, where all panels\n\t * stay visible at once and must not deactivate one another.\n\t */\n\treadonly allowsMultipleActive = computed(() => this.multiple() || this.isCardView());\n\n\t/** Whether the bound form control disabled the whole container. */\n\treadonly formDisabled = signal(false);\n\n\t/**\n\t * Whether the active panel routes its content through a `<router-outlet>`.\n\t * Never true in the accordion view, where routed panels are not supported.\n\t */\n\tprotected readonly activePanelHasRouter = computed(\n\t\t() => !this.isAccordionView() && !this.allowsMultipleActive() && !!this.activePanel()?.routerUrl()\n\t);\n\n\t/**\n\t * In `multiple` tabs/pills, headers are partitioned into blocks. Every\n\t * active panel starts a block; following inactive headers stay visible in\n\t * that same block until the next active panel starts a new one.\n\t */\n\tprotected readonly multipleHeaderGroups = computed<MultipleHeaderGroup[]>(() => {\n\t\tif (!this.allowsMultipleActive() || this.isAccordionView()) {\n\t\t\treturn [];\n\t\t}\n\t\tconst panels = this.panels();\n\t\tif (!panels.length) {\n\t\t\treturn [];\n\t\t}\n\t\tconst activeIndices = panels\n\t\t\t.map((panel, index) => (panel.active() ? index : -1))\n\t\t\t.filter((index) => index !== -1);\n\t\tif (!activeIndices.length) {\n\t\t\treturn [{ headers: panels }];\n\t\t}\n\t\treturn activeIndices.map((activeIndex, groupIndex) => {\n\t\t\tconst startIndex = groupIndex === 0 ? 0 : activeIndex;\n\t\t\tconst endIndex = activeIndices[groupIndex + 1] ?? panels.length;\n\t\t\treturn {\n\t\t\t\tactivePanel: panels[activeIndex],\n\t\t\t\theaders: panels.slice(startIndex, endIndex)\n\t\t\t};\n\t\t});\n\t});\n\n\t/** Whether the strip cannot scroll further backward. */\n\treadonly backwardIsDisabled = signal(true);\n\n\t/** Whether the strip cannot scroll further forward. */\n\treadonly forwardIsDisabled = signal(false);\n\n\t#isDestroyed = false;\n\t#syncScheduled = false;\n\t#viewInitialised = false;\n\t#placementScheduled = false;\n\t#multipleBlockSizingScheduled = false;\n\n\t/** Last value written by the bound form control; `null` when no form. */\n\t#formValue: unknown[] | null = null;\n\n\t#onChange: (value: unknown) => void = () => undefined;\n\t#onTouched: () => void = () => undefined;\n\n\tconstructor() {\n\t\tthis.#destroyRef.onDestroy(() => {\n\t\t\tthis.#isDestroyed = true;\n\t\t});\n\n\t\tafterNextRender(() => {\n\t\t\tthis.#viewInitialised = true;\n\t\t\tthis.updateScrollButtons();\n\t\t\tthis.setActivePanel();\n\t\t\t// Re-apply any form value written before the panels' inputs were bound.\n\t\t\tthis.#applyFormValue();\n\t\t\tthis.#ensureActivePanel();\n\t\t\tthis.#schedulePanelPlacement();\n\t\t\tthis.#scheduleMultipleBlockSizing();\n\t\t\tthis.#router.events\n\t\t\t\t.pipe(\n\t\t\t\t\tfilter((event) => event instanceof NavigationEnd),\n\t\t\t\t\ttakeUntilDestroyed(this.#destroyRef)\n\t\t\t\t)\n\t\t\t\t.subscribe(() => this.setActivePanel());\n\t\t});\n\t}\n\n\t/**\n\t * Registers a panel in the container. Called by `PanelComponent` on\n\t * construction — not meant for manual use.\n\t */\n\tregisterPanel(panel: PanelComponent): void {\n\t\tthis.panels.update((panels) => [...panels, panel]);\n\t\tthis.#scheduleSync();\n\t}\n\n\t/**\n\t * Removes a panel from the container. `reselect` activates the closest\n\t * enabled neighbour when the removed panel was active; `emit` fires the\n\t * panel's `removed` output.\n\t */\n\tremovePanel(panel: PanelComponent, options: { reselect?: boolean; emit?: boolean } = {}): void {\n\t\tconst { reselect = true, emit = true } = options;\n\t\tconst panels = this.panels();\n\t\tconst index = panels.indexOf(panel);\n\t\tif (index === -1 || this.#isDestroyed) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (reselect && panel.active() && !this.isAccordionView()) {\n\t\t\tconst closestIndex = this.#closestEnabledIndex(index);\n\t\t\tif (closestIndex !== -1) {\n\t\t\t\tpanels[closestIndex].active.set(true);\n\t\t\t}\n\t\t}\n\t\tif (emit) {\n\t\t\tpanel.removed.emit(panel);\n\t\t}\n\n\t\tthis.panels.update((currentPanels) => currentPanels.filter((candidate) => candidate !== panel));\n\n\t\t// Detach the projected pane: the consumer template still owns the node,\n\t\t// so removing the header alone would leave the pane content behind.\n\t\tconst paneElement = panel.elementRef.nativeElement;\n\t\tif (paneElement.parentNode) {\n\t\t\tthis.#renderer.removeChild(paneElement.parentNode, paneElement);\n\t\t}\n\t\tif (panel.active()) {\n\t\t\tpanel.active.set(false);\n\t\t\tthis.#emitFormValue();\n\t\t}\n\t\tthis.#scheduleSync();\n\t}\n\n\t/**\n\t * Activates a panel on behalf of the user (`tabs` / `pills` views): marks it\n\t * active, navigates when routed, and emits `panelChange`. In `multiple` mode\n\t * clicking an active panel toggles it off (the panes render side by side);\n\t * otherwise an already-active panel no-ops. Disabled panels always no-op.\n\t */\n\tselectPanel(panel: PanelComponent): void {\n\t\tif (panel.disabled() || this.formDisabled()) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.allowsMultipleActive()) {\n\t\t\tif (panel.active()) {\n\t\t\t\tpanel.active.set(false);\n\t\t\t} else {\n\t\t\t\tpanel.active.set(true);\n\t\t\t\tpanel.navigate();\n\t\t\t\tthis.panelChange.emit({ prev: undefined, current: panel });\n\t\t\t}\n\t\t\tthis.#emitFormValue();\n\t\t\tthis.#onTouched();\n\t\t\tthis.#schedulePanelPlacement();\n\t\t\treturn;\n\t\t}\n\t\tif (panel.active()) {\n\t\t\treturn;\n\t\t}\n\t\tconst previousPanel = this.activePanel();\n\t\t// Deactivate the previously active panel up front so the emitted form\n\t\t// value reflects only the newly selected panel. The per-panel effect that\n\t\t// enforces single-active runs asynchronously, so relying on it here would\n\t\t// emit a stale value that still includes the previous panel.\n\t\tif (previousPanel && previousPanel !== panel) {\n\t\t\tpreviousPanel.active.set(false);\n\t\t}\n\t\tpanel.active.set(true);\n\t\tpanel.navigate();\n\t\tthis.panelChange.emit({ prev: previousPanel, current: panel });\n\t\tthis.#emitFormValue();\n\t\tthis.#onTouched();\n\t\tthis.#schedulePanelPlacement();\n\t}\n\n\t/**\n\t * Toggles a panel on behalf of the user (accordion view): an open panel\n\t * closes, a closed one opens — closing the others unless `multiple`.\n\t * Emits `panelChange` when a panel opens.\n\t */\n\ttogglePanel(panel: PanelComponent): void {\n\t\tif (panel.disabled() || this.formDisabled()) {\n\t\t\treturn;\n\t\t}\n\t\tif (panel.active()) {\n\t\t\tpanel.active.set(false);\n\t\t} else {\n\t\t\tconst previousPanel = this.allowsMultipleActive() ? undefined : this.activePanel();\n\t\t\tpanel.active.set(true);\n\t\t\tthis.panelChange.emit({ prev: previousPanel, current: panel });\n\t\t}\n\t\tthis.#emitFormValue();\n\t\tthis.#onTouched();\n\t\tthis.#schedulePanelPlacement();\n\t}\n\n\t/**\n\t * Marks the routed panel matching the current URL as active. Does not\n\t * navigate — activation through this path is URL-driven. No-op in the\n\t * accordion view, where routed panels are not supported.\n\t */\n\tsetActivePanel(): void {\n\t\tif (this.isAccordionView()) {\n\t\t\treturn;\n\t\t}\n\t\tconst [route, queryString] = this.#router.url.split('?');\n\t\tfor (const panel of this.panels()) {\n\t\t\tif (!panel.routerUrl()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet matches: boolean;\n\t\t\tif (panel.pathMatch() === 'full') {\n\t\t\t\tconst currentUrl = queryString?.trim() ? `${route}?${queryString.trim()}` : route;\n\t\t\t\tmatches = currentUrl === panel.getFullRoute();\n\t\t\t} else {\n\t\t\t\tmatches = route === panel.getRoute();\n\t\t\t}\n\t\t\tif (matches) {\n\t\t\t\tif (!panel.active()) {\n\t\t\t\t\tpanel.active.set(true);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// ── ControlValueAccessor ────────────────────────────────────────────────\n\n\t/**\n\t * Writes the form value into the container: panels whose (`bindValue`-mapped)\n\t * value matches are activated, the rest are deactivated. With `multiple` an\n\t * array is expected; otherwise a single value.\n\t */\n\twriteValue(value: unknown): void {\n\t\tif (value == null) {\n\t\t\tthis.#formValue = [];\n\t\t} else if (this.multiple()) {\n\t\t\tthis.#formValue = Array.isArray(value) ? [...value] : [value];\n\t\t} else {\n\t\t\tthis.#formValue = Array.isArray(value) ? value.slice(0, 1) : [value];\n\t\t}\n\t\tthis.#applyFormValue();\n\t}\n\n\t/** Registers the form-control change callback. */\n\tregisterOnChange(onChange: (value: unknown) => void): void {\n\t\tthis.#onChange = onChange;\n\t}\n\n\t/** Registers the form-control touched callback. */\n\tregisterOnTouched(onTouched: () => void): void {\n\t\tthis.#onTouched = onTouched;\n\t}\n\n\t/** Enables/disables every panel header on behalf of the form control. */\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.formDisabled.set(isDisabled);\n\t}\n\n\t/** Keyboard navigation for the panel strip (arrows / Home / End / Delete). */\n\tprotected onPanelKeydown(event: KeyboardEvent, index: number): void {\n\t\tif (!this.isKeysAllowed()) {\n\t\t\treturn;\n\t\t}\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowDown':\n\t\t\t\tif (event.key === 'ArrowDown' && !this.vertical()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.#focusPanelAt(this.#stepEnabledIndex(index, 1));\n\t\t\t\treturn;\n\t\t\tcase 'ArrowLeft':\n\t\t\tcase 'ArrowUp':\n\t\t\t\tif (event.key === 'ArrowUp' && !this.vertical()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.#focusPanelAt(this.#stepEnabledIndex(index, -1));\n\t\t\t\treturn;\n\t\t\tcase 'Home':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.#focusPanelAt(this.panels().findIndex((panel) => !panel.disabled()));\n\t\t\t\treturn;\n\t\t\tcase 'End': {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst panels = this.panels();\n\t\t\t\tthis.#focusPanelAt(panels.length - 1 - [...panels].reverse().findIndex((panel) => !panel.disabled()));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase 'Delete': {\n\t\t\t\tconst panel = this.panels()[index];\n\t\t\t\tif (panel?.removable()) {\n\t\t\t\t\tthis.removePanel(panel);\n\t\t\t\t\tqueueMicrotask(() => this.#focusPanelAt(Math.min(index, this.panels().length - 1)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Keyboard navigation between accordion headers (arrows / Home / End /\n\t * Delete). Enter and Space toggle natively through the button click.\n\t */\n\tonAccordionKeydown(event: KeyboardEvent, panel: PanelComponent): void {\n\t\tif (!this.isKeysAllowed()) {\n\t\t\treturn;\n\t\t}\n\t\tconst index = this.panels().indexOf(panel);\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowDown':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.#focusPanelAt(this.#stepEnabledIndex(index, 1));\n\t\t\t\treturn;\n\t\t\tcase 'ArrowUp':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.#focusPanelAt(this.#stepEnabledIndex(index, -1));\n\t\t\t\treturn;\n\t\t\tcase 'Home':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.#focusPanelAt(this.panels().findIndex((candidate) => !candidate.disabled()));\n\t\t\t\treturn;\n\t\t\tcase 'End': {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst panels = this.panels();\n\t\t\t\tthis.#focusPanelAt(panels.length - 1 - [...panels].reverse().findIndex((candidate) => !candidate.disabled()));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase 'Delete': {\n\t\t\t\tif (panel.removable()) {\n\t\t\t\t\tthis.removePanel(panel);\n\t\t\t\t\tqueueMicrotask(() => this.#focusPanelAt(Math.min(index, this.panels().length - 1)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Recomputes the enabled/disabled state of the scroll buttons. */\n\tprotected updateScrollButtons(): void {\n\t\tif (!this.scrollable() || this.isAccordionView()) {\n\t\t\treturn;\n\t\t}\n\t\tconst scroller = this.navScroller()?.nativeElement;\n\t\tif (!scroller) {\n\t\t\treturn;\n\t\t}\n\t\tconst { scrollLeft, scrollWidth } = scroller;\n\t\tthis.backwardIsDisabled.set(scrollLeft <= 0);\n\t\tthis.forwardIsDisabled.set(scrollLeft + contentBoxWidth(scroller) + 1 >= scrollWidth);\n\t}\n\n\t/** Re-syncs scroll controls and multiple-block sizing on window resize. */\n\tprotected onWindowResize(): void {\n\t\tthis.updateScrollButtons();\n\t\tthis.#scheduleMultipleBlockSizing();\n\t}\n\n\t/** Updates the scroll buttons as the strip scrolls. */\n\tprotected onScroll(): void {\n\t\tthis.updateScrollButtons();\n\t}\n\n\t/** Global index of a panel within the projected strip order. */\n\tprotected panelIndex(panel: PanelComponent): number {\n\t\treturn this.panelIndexMap().get(panel) ?? -1;\n\t}\n\n\t/** Scrolls the panel headers one viewport backward. */\n\tprotected navBackward(): void {\n\t\tconst scroller = this.navScroller()?.nativeElement;\n\t\tif (!scroller) {\n\t\t\treturn;\n\t\t}\n\t\tconst step = contentBoxWidth(scroller) - this.#visibleScrollButtonsWidth();\n\t\tscroller.scrollLeft = Math.max(scroller.scrollLeft - step, 0);\n\t}\n\n\t/** Scrolls the panel headers one viewport forward. */\n\tprotected navForward(): void {\n\t\tconst scroller = this.navScroller()?.nativeElement;\n\t\tif (!scroller) {\n\t\t\treturn;\n\t\t}\n\t\tconst step = contentBoxWidth(scroller) - this.#visibleScrollButtonsWidth();\n\t\tconst lastPosition = scroller.scrollWidth - step;\n\t\tscroller.scrollLeft = Math.min(scroller.scrollLeft + step, lastPosition);\n\t}\n\n\t/** Width currently taken by the visible scroll buttons. */\n\t#visibleScrollButtonsWidth(): number {\n\t\treturn [this.prevBtn()?.nativeElement, this.nextBtn()?.nativeElement].reduce(\n\t\t\t(total, button) => (button ? total + contentBoxWidth(button) : total),\n\t\t\t0\n\t\t);\n\t}\n\n\t/** Index of the enabled panel closest to `index`, or `-1` when none exists. */\n\t#closestEnabledIndex(index: number): number {\n\t\tconst panels = this.panels();\n\t\tfor (let step = 1; step <= panels.length; step += 1) {\n\t\t\tconst previous = panels[index - step];\n\t\t\tif (previous && !previous.disabled()) {\n\t\t\t\treturn index - step;\n\t\t\t}\n\t\t\tconst next = panels[index + step];\n\t\t\tif (next && !next.disabled()) {\n\t\t\t\treturn index + step;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\t/** Next enabled panel index from `index` in `direction`, wrapping around. */\n\t#stepEnabledIndex(index: number, direction: 1 | -1): number {\n\t\tconst panels = this.panels();\n\t\tfor (let step = 1; step <= panels.length; step += 1) {\n\t\t\tconst candidate = (index + direction * step + panels.length * step) % panels.length;\n\t\t\tif (!panels[candidate].disabled()) {\n\t\t\t\treturn candidate;\n\t\t\t}\n\t\t}\n\t\treturn index;\n\t}\n\n\t/** Moves DOM focus to the panel header at `index` (strip link or accordion button). */\n\t#focusPanelAt(index: number): void {\n\t\tif (index < 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst selector = this.isAccordionView() ? '.hub-panels__accordion-btn' : '.hub-panels__nav-link';\n\t\tconst headers = this.#elementRef.nativeElement.querySelectorAll<HTMLElement>(selector);\n\t\theaders[index]?.focus();\n\t}\n\n\t/**\n\t * Coalesces post-registration/removal housekeeping into one microtask:\n\t * re-applies the bound form value to the current panels, guarantees an\n\t * active panel (non-routed `tabs` / `pills` containers without a bound\n\t * form) and refreshes the scroll buttons after the strip changed size.\n\t * Skipped until the first render — before it the projected panels' inputs\n\t * are not bound yet, and the constructor's `afterNextRender` performs the\n\t * initial pass instead.\n\t */\n\t#scheduleSync(): void {\n\t\tif (this.#syncScheduled || this.#isDestroyed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#syncScheduled = true;\n\t\tqueueMicrotask(() => {\n\t\t\tthis.#syncScheduled = false;\n\t\t\tif (this.#isDestroyed || !this.#viewInitialised) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#applyFormValue();\n\t\t\tthis.#ensureActivePanel();\n\t\t\tthis.#schedulePanelPlacement();\n\t\t\tthis.updateScrollButtons();\n\t\t});\n\t}\n\n\t/** Coalesces DOM moves for the projected `hub-panel` hosts. */\n\t#schedulePanelPlacement(): void {\n\t\tif (this.#placementScheduled || this.#isDestroyed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#placementScheduled = true;\n\t\trequestAnimationFrame(() => {\n\t\t\tthis.#placementScheduled = false;\n\t\t\tif (this.#isDestroyed || !this.#viewInitialised) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#runPanelPlacementPass();\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tif (this.#isDestroyed || !this.#viewInitialised) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.#runPanelPlacementPass();\n\t\t\t});\n\t\t});\n\t}\n\n\t/** Performs one projected-panel placement pass plus dependent sizing. */\n\t#runPanelPlacementPass(): void {\n\t\tthis.#placeProjectedPanels();\n\t\tthis.#scheduleMultipleBlockSizing();\n\t}\n\n\t/** Coalesces the DOM measurements needed by `multiple + vertical`. */\n\t#scheduleMultipleBlockSizing(): void {\n\t\tif (this.#multipleBlockSizingScheduled || this.#isDestroyed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#multipleBlockSizingScheduled = true;\n\t\trequestAnimationFrame(() => {\n\t\t\tthis.#multipleBlockSizingScheduled = false;\n\t\t\tif (this.#isDestroyed || !this.#viewInitialised) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#syncMultipleBlockSizing();\n\t\t});\n\t}\n\n\t/** Moves projected panel hosts into their visible multiple-block container. */\n\t#placeProjectedPanels(): void {\n\t\tconst contentRoot = this.contentRoot()?.nativeElement;\n\t\tif (!contentRoot) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this.allowsMultipleActive() || this.isAccordionView()) {\n\t\t\tfor (const panel of this.panels()) {\n\t\t\t\tconst panelElement = panel.elementRef.nativeElement;\n\t\t\t\tif (panelElement.parentElement !== contentRoot) {\n\t\t\t\t\tthis.#renderer.appendChild(contentRoot, panelElement);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst hostMap = new Map(\n\t\t\tArray.from(\n\t\t\t\tthis.#elementRef.nativeElement.querySelectorAll<HTMLElement>(\n\t\t\t\t\t'.hub-panels__multiple-layout .hub-panels__multiple-pane-host'\n\t\t\t\t)\n\t\t\t)\n\t\t\t\t.map((host) => [host.dataset['panelId'] ?? '', host] as const)\n\t\t);\n\t\tfor (const panel of this.panels()) {\n\t\t\tconst panelElement = panel.elementRef.nativeElement;\n\t\t\tconst targetHost = hostMap.get(panel.id()) ?? contentRoot;\n\t\t\tif (panelElement.parentElement !== targetHost) {\n\t\t\t\tthis.#renderer.appendChild(targetHost, panelElement);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Updates the minimum content width for each `multiple + vertical` block. */\n\t#syncMultipleBlockSizing(): void {\n\t\tfor (const blockRef of this.multipleBlocks()) {\n\t\t\tconst block = blockRef.nativeElement;\n\t\t\tthis.#renderer.removeStyle(\n\t\t\t\tblock,\n\t\t\t\t'--hub-panels-multiple-vertical-panel-min-width',\n\t\t\t\tRendererStyleFlags2.DashCase\n\t\t\t);\n\t\t\tif (!this.vertical() || !this.allowsMultipleActive() || this.isAccordionView()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst header = block.querySelector(':scope > .hub-panels__header');\n\t\t\tif (!(header instanceof HTMLElement)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst headerStackHeight = Math.ceil(header.getBoundingClientRect().height);\n\t\t\tthis.#renderer.setStyle(\n\t\t\t\tblock,\n\t\t\t\t'--hub-panels-multiple-vertical-panel-min-width',\n\t\t\t\t`${headerStackHeight}px`,\n\t\t\t\tRendererStyleFlags2.DashCase\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Activates the first enabled panel when none is active. Skipped for the\n\t * accordion view (panels start collapsed), for routed containers (the URL\n\t * is the single source of truth) and when a form value is bound (the form\n\t * is).\n\t */\n\t#ensureActivePanel(): void {\n\t\tif (this.isAccordionView() || this.#formValue !== null) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.allowsMultipleActive()) {\n\t\t\treturn;\n\t\t}\n\t\tconst panels = this.panels();\n\t\tif (!panels.length || panels.some((panel) => panel.active())) {\n\t\t\treturn;\n\t\t}\n\t\tif (panels.some((panel) => !!panel.routerUrl())) {\n\t\t\treturn;\n\t\t}\n\t\tpanels.find((panel) => !panel.disabled())?.active.set(true);\n\t}\n\n\t/** Activates/deactivates panels so they mirror the bound form value. */\n\t#applyFormValue(): void {\n\t\tif (this.#formValue === null) {\n\t\t\treturn;\n\t\t}\n\t\tconst compare = this.compareWith();\n\t\tfor (const panel of this.panels()) {\n\t\t\tconst panelValue = this.#comparableValue(panel);\n\t\t\tconst matches = this.#formValue.some((selectedValue) => compare(selectedValue, panelValue));\n\t\t\tif (panel.active() !== matches) {\n\t\t\t\tpanel.active.set(matches);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Emits the current selection through the form-control callback. */\n\t#emitFormValue(): void {\n\t\tconst compare = this.compareWith();\n\t\tconst activeValues = this.panels()\n\t\t\t.filter((panel) => panel.active())\n\t\t\t.map((panel) => this.#comparableValue(panel));\n\t\tif (this.#formValue !== null) {\n\t\t\tthis.#formValue = [...activeValues];\n\t\t}\n\t\t// Deduplicate defensively when several panels share the same value.\n\t\tconst uniqueValues = activeValues.filter(\n\t\t\t(value, index) => activeValues.findIndex((candidate) => compare(candidate, value)) === index\n\t\t);\n\t\tthis.#onChange(this.multiple() ? uniqueValues : (uniqueValues[0] ?? null));\n\t}\n\n\t/** Form value of a panel with the `bindValue` path applied. */\n\t#comparableValue(panel: PanelComponent): unknown {\n\t\tconst rawValue = panel.formValue();\n\t\tconst bindPath = this.bindValue();\n\t\treturn bindPath ? readByPath(rawValue, bindPath) : rawValue;\n\t}\n}\n","@if (!isAccordionView() && !isCardView()) {\n\t@if (multiple()) {\n\t\t<div class=\"hub-panels__multiple-layout\">\n\t\t\t@for (group of multipleHeaderGroups(); track group.activePanel ?? group.headers[0]) {\n\t\t\t\t<div\n\t\t\t\t\t#multipleBlock\n\t\t\t\t\tclass=\"hub-panels hub-panels__multiple-block\"\n\t\t\t\t\t[class.hub-panels--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t[class.hub-panels--pills]=\"type() === 'pills'\"\n\t\t\t\t\t[class.hub-panels--vertical]=\"vertical()\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"hub-panels__header\">\n\t\t\t\t\t\t<ul\n\t\t\t\t\t\t\tclass=\"hub-panels__nav\"\n\t\t\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"config.ariaLabel\"\n\t\t\t\t\t\t\t[attr.aria-orientation]=\"vertical() ? 'vertical' : null\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--pills]=\"type() === 'pills'\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--vertical]=\"vertical()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav--justified]=\"justified()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@for (panel of group.headers; track panel) {\n\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-item\"\n\t\t\t\t\t\t\t\t\t[class]=\"panel.customClass()\"\n\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-item--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-item--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-link\"\n\t\t\t\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\t\t\t\t[id]=\"panel.id() + '-link'\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"panel.disabled() || formDisabled()\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-controls]=\"panel.id()\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-selected]=\"panel.active()\"\n\t\t\t\t\t\t\t\t\t\t[attr.tabindex]=\"panel.active() || (!activePanel() && panelIndex(panel) === 0) ? null : -1\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"selectPanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t(keydown)=\"onPanelKeydown($event, panelIndex(panel))\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t@if (panel.headingRef(); as headingRef) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingRef\" />\n\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t{{ panel.heading() }}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (panel.removable()) {\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__remove-btn\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); removePanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t\t\t>&times;</span\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t@if (!justified() && type() !== 'pills' && !vertical()) {\n\t\t\t\t\t\t\t<div class=\"hub-panels__spacer\"></div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t@if (group.activePanel) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"hub-panels__content\"\n\t\t\t\t\t\t\t[class.hub-panels__content--pills]=\"type() === 'pills'\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t#multiplePaneHost\n\t\t\t\t\t\t\t\tclass=\"hub-panels__multiple-pane-host\"\n\t\t\t\t\t\t\t\t[attr.data-panel-id]=\"group.activePanel.id()\"\n\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t} @else {\n\t\t<div class=\"hub-panels__header\">\n\t\t\t@if (scrollable() && !backwardIsDisabled()) {\n\t\t\t\t<button\n\t\t\t\t\t#prevBtn\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-panels__scroll-btn hub-panels__scroll-btn--backward\"\n\t\t\t\t\t[attr.aria-label]=\"config.scrollBackwardAriaLabel\"\n\t\t\t\t\t(click)=\"navBackward()\"\n\t\t\t\t></button>\n\t\t\t}\n\n\t\t\t<div #navScroller class=\"hub-panels__nav-scroller\" (scroll)=\"onScroll()\">\n\t\t\t\t<ul\n\t\t\t\t\tclass=\"hub-panels__nav\"\n\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\t[attr.aria-label]=\"config.ariaLabel\"\n\t\t\t\t\t[attr.aria-orientation]=\"vertical() ? 'vertical' : null\"\n\t\t\t\t\t[class.hub-panels__nav--tabs]=\"type() === 'tabs'\"\n\t\t\t\t\t[class.hub-panels__nav--pills]=\"type() === 'pills'\"\n\t\t\t\t\t[class.hub-panels__nav--vertical]=\"vertical()\"\n\t\t\t\t\t[class.hub-panels__nav--justified]=\"justified()\"\n\t\t\t\t>\n\t\t\t\t\t@for (panel of panels(); track panel; let index = $index) {\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\tclass=\"hub-panels__nav-item\"\n\t\t\t\t\t\t\t[class]=\"panel.customClass()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav-item--active]=\"panel.active()\"\n\t\t\t\t\t\t\t[class.hub-panels__nav-item--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"hub-panels__nav-link\"\n\t\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\t\t[id]=\"panel.id() + '-link'\"\n\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--active]=\"panel.active()\"\n\t\t\t\t\t\t\t\t[class.hub-panels__nav-link--disabled]=\"panel.disabled()\"\n\t\t\t\t\t\t\t\t[disabled]=\"panel.disabled() || formDisabled()\"\n\t\t\t\t\t\t\t\t[attr.aria-controls]=\"panel.id()\"\n\t\t\t\t\t\t\t\t[attr.aria-selected]=\"panel.active()\"\n\t\t\t\t\t\t\t\t[attr.tabindex]=\"panel.active() || (!activePanel() && index === 0) ? null : -1\"\n\t\t\t\t\t\t\t\t(click)=\"selectPanel(panel)\"\n\t\t\t\t\t\t\t\t(keydown)=\"onPanelKeydown($event, index)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (panel.headingRef(); as headingRef) {\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingRef\" />\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t{{ panel.heading() }}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@if (panel.removable()) {\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-panels__remove-btn\"\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); removePanel(panel)\"\n\t\t\t\t\t\t\t\t\t\t>&times;</span\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t\t@if (!justified() && type() !== 'pills') {\n\t\t\t\t\t<div class=\"hub-panels__spacer\"></div>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t@if (scrollable() && !forwardIsDisabled()) {\n\t\t\t\t<button\n\t\t\t\t\t#nextBtn\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-panels__scroll-btn hub-panels__scroll-btn--forward\"\n\t\t\t\t\t[attr.aria-label]=\"config.scrollForwardAriaLabel\"\n\t\t\t\t\t(click)=\"navForward()\"\n\t\t\t\t></button>\n\t\t\t}\n\t\t</div>\n\t}\n}\n\n<div\n\t#contentRoot\n\tclass=\"hub-panels__content\"\n\t[class.hub-panels__content--pills]=\"type() === 'pills'\"\n\t[class.hub-panels__content--accordion]=\"isAccordionView()\"\n\t[class.hub-panels__content--multiple-parking]=\"!isAccordionView() && multiple()\"\n>\n\t@if (activePanelHasRouter()) {\n\t\t<router-outlet />\n\t} @else {\n\t\t<ng-content />\n\t}\n</div>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\tOnDestroy,\n\toutput,\n\tRenderer2,\n\tsignal,\n\tTemplateRef,\n\tViewEncapsulation\n} from '@angular/core';\nimport { Params, Router } from '@angular/router';\n\nimport { HubPanelAppearance, HubPanelVariant } from '../../models/panels.types';\nimport { PanelsComponent } from '../panels/panels.component';\n\n/** Monotonic counter backing the auto-generated accessibility ids. */\nlet nextPanelId = 0;\n\n/**\n * One content panel inside a `<hub-panels>` container.\n *\n * In the `tabs` / `pills` views the host element is the tab *panel*\n * (`role=\"tabpanel\"`) and the clickable header is rendered by\n * {@link PanelsComponent} in the strip. In the `accordion` view this component\n * renders its own disclosure header plus an animated collapse wrapper around\n * the projected content. In every view the header comes from `heading` or from\n * a `<ng-template hubPanelHeading>` projected inside this element.\n *\n * Panels can be plain content panes or routed: when `routerLink` is set, the\n * container renders a `<router-outlet>` instead of the projected panels and\n * the active panel follows the current URL (`tabs` / `pills` views only).\n *\n * @example\n * ```html\n * <hub-panels>\n * <hub-panel heading=\"Fields\">…</hub-panel>\n * <hub-panel>\n * <ng-template hubPanelHeading>Validations <span class=\"badge\">3</span></ng-template>\n * …\n * </hub-panel>\n * </hub-panels>\n * ```\n */\n@Component({\n\tselector: 'hub-panel, [hub-panel]',\n\texportAs: 'hubPanel',\n\timports: [NgTemplateOutlet],\n\ttemplateUrl: './panel.component.html',\n\t// The `card` view styles (and the projected header/footer bands) live here so\n\t// a standalone `<hub-panel>` — used outside any `<hub-panels>` container, which\n\t// would otherwise be the only source of the global styles — is styled too.\n\t// `ViewEncapsulation.None` is required so the rules reach the projected,\n\t// consumer-owned `[hubPanelHeader]` / `[hubPanelFooter]` elements.\n\tstyleUrl: './panel.component.scss',\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\tclass: 'hub-panels__panel',\n\t\t'[attr.id]': 'accordionView() || cardView() ? null : id()',\n\t\t'[attr.role]': \"alertView() ? 'alert' : (accordionView() || cardView() ? null : 'tabpanel')\",\n\t\t'[attr.aria-labelledby]': \"accordionView() || cardView() ? null : id() + '-link'\",\n\t\t'[attr.data-variant]': 'alertView() ? (variant() ?? null) : null',\n\t\t'[style.--hub-panels-alert-accent]': 'alertAccent()',\n\t\t'[class.hub-panels__panel--active]': 'active()',\n\t\t'[class.hub-panels__panel--accordion]': 'accordionView()',\n\t\t'[class.hub-panels__panel--card]': 'cardView() && !alertView()',\n\t\t'[class.hub-panels__panel--alert]': 'alertView()'\n\t}\n})\nexport class PanelComponent implements OnDestroy {\n\t/** Host element reference — exposed so the container can detach removed panes. */\n\treadonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\treadonly #renderer = inject(Renderer2);\n\treadonly #router = inject(Router);\n\n\t/**\n\t * Owning panels container, or `null` when the panel is used standalone\n\t * (outside any `<hub-panels>`), in which case it renders as a card.\n\t * Exposed to the template for the accordion header.\n\t */\n\tprotected readonly tabset = inject(PanelsComponent, { optional: true });\n\n\t/** Plain-text panel header. Ignored when a `hubPanelHeading` template exists. */\n\treadonly heading = input<string | undefined>(undefined);\n\n\t/**\n\t * Visual appearance of a standalone panel: a plain `card` (default) or a\n\t * semantic `alert` callout. Only meaningful when the panel renders as a\n\t * card (used standalone or inside a `card` container); ignored in the\n\t * tabs / pills / accordion strip views.\n\t */\n\treadonly appearance = input<HubPanelAppearance>('card');\n\n\t/**\n\t * Semantic colour applied when `appearance` is `alert`. The built-in values\n\t * (`primary` / `success` / `danger` / `warning` / `info`) render with the\n\t * design-system tints. Any other string is also accepted: the alert reads\n\t * `--hub-sys-color-<variant>` from the host application, so a custom accent\n\t * palette interconnects with no changes to this library. Omit for a neutral\n\t * alert.\n\t */\n\treadonly variant = input<HubPanelVariant | (string & {}) | undefined>(undefined);\n\n\t/**\n\t * Unique id used for the `tab` / `tabpanel` (or accordion header / region)\n\t * ARIA pairing. Auto-generated (`hub-panel-<n>`) when not provided.\n\t */\n\treadonly id = input<string>(`hub-panel-${nextPanelId++}`);\n\n\t/** Whether the panel cannot be activated. */\n\treadonly disabled = input(false, { transform: booleanAttribute });\n\n\t/** Whether the panel shows a remove affordance (✕ and the Delete key). */\n\treadonly removable = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * URL comparison used to mark routed panels active: `'route'` compares the\n\t * path only, `'full'` also compares query params.\n\t */\n\treadonly pathMatch = input<'route' | 'full'>('route');\n\n\t/** Navigation target that turns this panel into a routed panel. */\n\treadonly routerLink = input<string | string[] | null | undefined>(undefined);\n\n\t/** Query params appended when navigating to `routerLink`. */\n\treadonly queryParams = input<Params | null | undefined>(undefined);\n\n\t/** Extra CSS classes applied to both the nav item and this pane. */\n\treadonly customClass = input<string | undefined>(undefined);\n\n\t/**\n\t * Value this panel contributes when the container is used as a form control\n\t * (see {@link PanelsComponent} `ControlValueAccessor`). Defaults to `id`.\n\t */\n\treadonly value = input<unknown>(undefined);\n\n\t/** Whether the panel is currently active (expanded, in the accordion view). */\n\treadonly active = model(false);\n\n\t/** Emitted when the panel becomes active. */\n\treadonly selectPanel = output<PanelComponent>();\n\n\t/** Emitted when the panel stops being active. */\n\treadonly deselectPanel = output<PanelComponent>();\n\n\t/** Emitted when the panel is removed through the ✕ button or the Delete key. */\n\treadonly removed = output<PanelComponent>();\n\n\t/** Custom header template registered by `PanelHeadingDirective`. */\n\treadonly headingRef = signal<TemplateRef<unknown> | undefined>(undefined);\n\n\t/** Whether the owning container renders the accordion visualization. */\n\tprotected readonly accordionView = computed(() => this.tabset?.isAccordionView() ?? false);\n\n\t/**\n\t * Whether this panel renders as a card: either inside a `<hub-panels\n\t * type=\"card\">` container or standalone (no owning container at all).\n\t */\n\tprotected readonly cardView = computed(() => !this.tabset || this.tabset.isCardView());\n\n\t/**\n\t * Whether this panel renders as a semantic alert: `appearance=\"alert\"` while\n\t * in a card-capable context (standalone or inside a `card` container). In the\n\t * strip / accordion views the alert appearance is ignored.\n\t */\n\tprotected readonly alertView = computed(() => this.appearance() === 'alert' && this.cardView());\n\n\t/**\n\t * Inline accent fed to the alert styles: `var(--hub-sys-color-<variant>)` for\n\t * the active variant, or `null` for a neutral alert / non-alert view. This is\n\t * what makes the variant set open — any accent token defined by the host\n\t * application is picked up without the library knowing the variant name.\n\t */\n\tprotected readonly alertAccent = computed(() => {\n\t\tconst variant = this.variant();\n\t\treturn this.alertView() && variant ? `var(--hub-sys-color-${variant})` : null;\n\t});\n\n\t/** Form value resolved for this panel: the explicit `value` or the panel id. */\n\treadonly formValue = computed(() => (this.value() !== undefined ? this.value() : this.id()));\n\n\t/** `routerLink` normalised to a segments array, or `null` when not routed. */\n\treadonly routerUrl = computed<string[] | null>(() => {\n\t\tconst link = this.routerLink();\n\t\tif (!link) {\n\t\t\treturn null;\n\t\t}\n\t\treturn Array.isArray(link) ? link : [link];\n\t});\n\n\t/** Last activation state seen by the effect — avoids emitting on init. */\n\t#wasActive = false;\n\n\tconstructor() {\n\t\t// Standalone panels (no container) render as a card and skip registration.\n\t\tthis.tabset?.registerPanel(this);\n\n\t\t// Mirror `customClass` onto the pane host element.\n\t\teffect((onCleanup) => {\n\t\t\tconst classes = (this.customClass() ?? '')\n\t\t\t\t.split(' ')\n\t\t\t\t.map((cssClass) => cssClass.trim())\n\t\t\t\t.filter((cssClass) => cssClass.length > 0);\n\t\t\tfor (const cssClass of classes) {\n\t\t\t\tthis.#renderer.addClass(this.elementRef.nativeElement, cssClass);\n\t\t\t}\n\t\t\tonCleanup(() => {\n\t\t\t\tfor (const cssClass of classes) {\n\t\t\t\t\tthis.#renderer.removeClass(this.elementRef.nativeElement, cssClass);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// Activation side effects: emit outputs and enforce single-active-panel\n\t\t// (unless the container allows multiple expanded panels — accordion mode).\n\t\teffect(() => {\n\t\t\tconst isActive = this.active();\n\t\t\tif (isActive && this.disabled()) {\n\t\t\t\tthis.active.set(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isActive === this.#wasActive) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#wasActive = isActive;\n\t\t\tif (isActive) {\n\t\t\t\tthis.selectPanel.emit(this);\n\t\t\t\tif (this.tabset && !this.tabset.allowsMultipleActive()) {\n\t\t\t\t\tfor (const panel of this.tabset.panels()) {\n\t\t\t\t\t\tif (panel !== this) {\n\t\t\t\t\t\t\tpanel.active.set(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.deselectPanel.emit(this);\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.tabset?.removePanel(this, { reselect: false, emit: false });\n\t}\n\n\t/** Route path plus query string, or `null` when the panel is not routed. */\n\tgetFullRoute(): string | null {\n\t\tconst route = this.getRoute();\n\t\tif (!route) {\n\t\t\treturn null;\n\t\t}\n\t\tconst queryString = this.getQueryParamsString();\n\t\treturn queryString ? `${route}?${queryString}` : route;\n\t}\n\n\t/** Normalised absolute route path, or `null` when the panel is not routed. */\n\tgetRoute(): string | null {\n\t\tconst routerUrl = this.routerUrl();\n\t\tif (!routerUrl) {\n\t\t\treturn null;\n\t\t}\n\t\tlet route = routerUrl.join('/').replace(/\\/\\/+/g, '/');\n\t\tif (route.charAt(0) === '.') {\n\t\t\troute = route.substring(1);\n\t\t}\n\t\tif (route.charAt(0) !== '/') {\n\t\t\troute = `/${route}`;\n\t\t}\n\t\treturn route;\n\t}\n\n\t/** `queryParams` serialised as `key=value&…`, or `null` when empty. */\n\tgetQueryParamsString(): string | null {\n\t\tconst params = this.queryParams();\n\t\tif (!params || !Object.keys(params).length) {\n\t\t\treturn null;\n\t\t}\n\t\treturn Object.entries(params)\n\t\t\t.map(([key, value]) => `${key}=${value}`)\n\t\t\t.join('&');\n\t}\n\n\t/** Navigates to the panel's route. No-op for non-routed panels. */\n\tnavigate(): void {\n\t\tconst routerUrl = this.routerUrl();\n\t\tif (routerUrl) {\n\t\t\tthis.#router.navigate(routerUrl, { queryParams: this.queryParams() ?? {} });\n\t\t}\n\t}\n\n\t/** Accordion header click — toggles this panel through the container. */\n\tprotected onAccordionHeaderClick(): void {\n\t\tthis.tabset?.togglePanel(this);\n\t}\n\n\t/** Accordion header keyboard navigation, delegated to the container. */\n\tprotected onAccordionHeaderKeydown(event: KeyboardEvent): void {\n\t\tthis.tabset?.onAccordionKeydown(event, this);\n\t}\n\n\t/** Removes this panel through the accordion header's ✕ affordance. */\n\tprotected removeSelf(): void {\n\t\tthis.tabset?.removePanel(this);\n\t}\n}\n","@if (accordionView()) {\n\t<h2 class=\"hub-panels__accordion-header\">\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"hub-panels__accordion-btn\"\n\t\t\t[class.hub-panels__accordion-btn--collapsed]=\"!active()\"\n\t\t\t[id]=\"id() + '-link'\"\n\t\t\t[disabled]=\"disabled() || tabset?.formDisabled()\"\n\t\t\t[attr.aria-expanded]=\"active()\"\n\t\t\t[attr.aria-controls]=\"id()\"\n\t\t\t(click)=\"onAccordionHeaderClick()\"\n\t\t\t(keydown)=\"onAccordionHeaderKeydown($event)\"\n\t\t>\n\t\t\t@if (headingRef(); as headingTemplate) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"headingTemplate\" />\n\t\t\t} @else {\n\t\t\t\t{{ heading() }}\n\t\t\t}\n\t\t\t@if (removable()) {\n\t\t\t\t<span class=\"hub-panels__remove-btn\" aria-hidden=\"true\" (click)=\"$event.stopPropagation(); removeSelf()\">&times;</span>\n\t\t\t}\n\t\t</button>\n\t</h2>\n}\n\n<!-- Projection slots for every view. In the strip views the wrappers are plain\n\t pass-throughs; in the accordion view they become the animated collapse\n\t region. The header/footer `select` slots and the default `<ng-content>` are\n\t all UNCONDITIONAL — never wrapped in `@if` — to avoid the lost-projection\n\t bug that conditional slots cause. Header/footer render in every view; the\n\t `card` view styles them as the card's header and footer bands. -->\n<div\n\t[class.hub-panels__accordion-collapse]=\"accordionView()\"\n\t[class.hub-panels__accordion-collapse--collapsed]=\"accordionView() && !active()\"\n\t[attr.role]=\"accordionView() ? 'region' : null\"\n\t[attr.id]=\"accordionView() ? id() : null\"\n\t[attr.aria-labelledby]=\"accordionView() ? id() + '-link' : null\"\n\t[attr.aria-hidden]=\"accordionView() ? !active() : null\"\n\t[attr.inert]=\"accordionView() && !active() ? '' : null\"\n>\n\t<div [class.hub-panels__accordion-body]=\"accordionView()\">\n\t\t<ng-content select=\"[hubPanelHeader]\" />\n\t\t<div class=\"hub-panels__panel-body\">\n\t\t\t<ng-content />\n\t\t</div>\n\t\t<ng-content select=\"[hubPanelFooter]\" />\n\t</div>\n</div>\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\nimport { PanelComponent } from '../components/panel/panel.component';\n\n/**\n * Marks an `<ng-template>` inside a `hub-panel` as that panel's custom header\n * (strip link in `tabs`/`pills` view, disclosure button in `accordion` view),\n * replacing the plain-text `heading` input.\n *\n * @example\n * ```html\n * <hub-panel>\n * <ng-template hubPanelHeading><em>Rich</em> heading</ng-template>\n * Panel content\n * </hub-panel>\n * ```\n */\n@Directive({ selector: '[hubPanelHeading]' })\nexport class PanelHeadingDirective {\n\tconstructor() {\n\t\tinject(PanelComponent).headingRef.set(inject(TemplateRef));\n\t}\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Marks an element inside a `hub-panel` as the panel's content **header** band,\n * projected at the top of the panel body (above `<ng-content>`).\n *\n * Unlike `hubPanelHeading` — which renders the navigational label in the\n * `tabs`/`pills` strip or the `accordion` disclosure button — this header lives\n * inside the panel body and renders in **every** view (`tabs`, `pills`,\n * `accordion`, `card`). It is the natural title slot for the `card` format.\n *\n * @example\n * ```html\n * <hub-panel>\n * <div hubPanelHeader>Card title</div>\n * Card content\n * <div hubPanelFooter>Actions</div>\n * </hub-panel>\n * ```\n */\n@Directive({\n\tselector: '[hubPanelHeader]',\n\thost: { class: 'hub-panels__panel-header' }\n})\nexport class PanelHeaderDirective {}\n","import { Directive } from '@angular/core';\n\n/**\n * Marks an element inside a `hub-panel` as the panel's content **footer** band,\n * projected at the bottom of the panel body (below `<ng-content>`).\n *\n * Renders in **every** view (`tabs`, `pills`, `accordion`, `card`); it is the\n * natural actions/footer slot for the `card` format.\n *\n * @example\n * ```html\n * <hub-panel>\n * <div hubPanelHeader>Card title</div>\n * Card content\n * <div hubPanelFooter>Actions</div>\n * </hub-panel>\n * ```\n */\n@Directive({\n\tselector: '[hubPanelFooter]',\n\thost: { class: 'hub-panels__panel-footer' }\n})\nexport class PanelFooterDirective {}\n","/*\n * Public API Surface of ng-hub-ui-panels\n */\n\nexport { PanelHeadingDirective } from './lib/directives/panel-heading.directive';\nexport { PanelHeaderDirective } from './lib/directives/panel-header.directive';\nexport { PanelFooterDirective } from './lib/directives/panel-footer.directive';\nexport { PanelComponent } from './lib/components/panel/panel.component';\nexport { PanelsComponent } from './lib/components/panels/panels.component';\nexport { PanelsConfig } from './lib/services/panels-config.service';\nexport type { PanelChangeEvent, PanelsType } from './lib/models/panels.types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
Binary file
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "ng-hub-ui-panels",
3
- "version": "22.1.0",
3
+ "version": "22.2.0",
4
4
  "description": "A versatile, accessible content-panels container for Angular with four visualizations (tabs, pills, accordion, card), standalone cards, content header/footer slots, routing, reactive forms and keyboard navigation. Part of the ng-hub-ui family.",
5
5
  "author": "Carlos Morcillo <carlos.morcillo@me.com> (https://www.carlosmorcillo.com)",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "https://github.com/carlos-morcillo/ng-hub-ui-panels.git"
8
+ "url": "git+https://github.com/carlos-morcillo/ng-hub-ui-panels.git"
9
9
  },
10
10
  "homepage": "https://hubui.dev/",
11
11
  "keywords": [
Binary file