@breadstone/mosaik-elements-angular 0.0.285 → 0.0.286
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## 0.0.286 (2026-05-20)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **order-management:** add filter option to select components and enhance focus management ([97c9824f16](https://github.com/RueDeRennes/mosaik/commit/97c9824f16))
|
|
6
|
+
|
|
1
7
|
## 0.0.285 (2026-05-20)
|
|
2
8
|
|
|
3
9
|
This was a version bump only for mosaik-elements-angular to align it with other projects, there were no code changes.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, inject, ChangeDetectorRef, ElementRef, DestroyRef, input, effect, output, ChangeDetectionStrategy, Component, makeEnvironmentProviders, Injectable, Renderer2, Input, Directive, isDevMode, ViewContainerRef, TemplateRef, EnvironmentInjector, runInInjectionContext, signal, booleanAttribute, forwardRef, ContentChildren, computed, HostListener, untracked, Injector, afterNextRender, ContentChild, DOCUMENT, provideEnvironmentInitializer, Pipe, ViewChild, ViewEncapsulation, Optional, Inject, SkipSelf, provideAppInitializer } from '@angular/core';
|
|
3
3
|
import * as i2 from '@breadstone/mosaik-elements-foundation';
|
|
4
|
-
import { AbsoluteItemElement, AbsoluteElement, ActionbarGroupElement, ActionbarItemElement, ActionbarSeparatorElement, ActionbarElement, AnchorElement, AppHeaderElement, AppElement, AttachmentChatToolElement, AudioElement, AnimationPlayer, Animation, BREAKPOINTS, PerspectiveElement, RippleElement, ScaleElement, ProgressRingElement, ExpandableElement, FlipElement, TooltipElement, dataListElementValueAccessor, DataListElement, dataTableElementValueAccessor, DataTableElement, StepperElement, WizardElement, Size, Spacing, TextFormatters, DIALOG_STACK_BEHAVIOR_DEFAULT_CONFIG, ButtonElement, DialogActionsElement, DialogElement, DialogFooterElement, DialogHeaderElement, DialogHeaderSubTextElement, DialogHeaderTextElement, Key, EID, DRAWER_STACK_BEHAVIOR_DEFAULT_CONFIG, DrawerActionsElement, DrawerElement, DrawerContentElement, DrawerFooterElement, DrawerHeaderElement, DrawerHeaderSubTextElement, DrawerHeaderTextElement, DismissElement, MessageBoxElement, MessageBoxResult, SheetElement, SheetContentElement, SheetFooterElement, SheetHeaderElement, SheetHeaderSubTextElement, SheetHeaderTextElement, ToastElement, DateAgoIntl, TimeAgoIntl, ThemeService as ThemeService$1, TranslatorService, Translator, TranslatorServiceLocator, autoCompleteBoxElementValueAccessor, AutoCompleteBoxElement, AvatarGroupElement, avatarElementValueAccessor, AvatarElement, BackdropElement, BadgeElement, BannerGroupElement, BannerHeaderElement, BannerSubHeaderElement, BannerElement, BoxElement, BreadcrumbItemElement, BreadcrumbElement, BusyStateElement, ButtonGroupElement, CalendarHeaderElement, CalendarItemElement, CalendarSubHeaderElement, calendarElementValueAccessor, CalendarElement, CameraElement, CardActionsElement, CardContentElement, CardFooterElement, CardHeaderElement, CardSubTitleElement, CardTitleElement, CardElement, Carousel2Element, CarouselItem2Element, CarouselItemElement, CarouselElement, CellGroupElement, CellElement, ChartElement, ChatHeaderElement, ChatInputAttachmentListElement, ChatInputElement, ChatMarkerElement, ChatMessageAvatarElement, ChatMessageDividerElement, ChatMessageReactionElement, ChatMessageElement, ChatElement, checkBoxGroupElementValueAccessor, CheckBoxGroupElement, checkboxElementValueAccessor, CheckboxElement, CheckmarkElement, chipGroupElementValueAccessor, ChipGroupElement, ChipElement, chipBoxElementValueAccessor, ChipBoxElement, ChoiceGroupHeaderElement, choiceGroupElementValueAccessor, ChoiceGroupElement, choiceElementValueAccessor, ChoiceElement, CodeElement, ColorAreaElement, colorEditorAlphaSliderElementValueAccessor, ColorEditorAlphaSliderElement, colorEditorAreaElementValueAccessor, ColorEditorAreaElement, colorEditorHueSliderElementValueAccessor, ColorEditorHueSliderElement, colorEditorInputsElementValueAccessor, ColorEditorInputsElement, colorEditorPaletteElementValueAccessor, ColorEditorPaletteElement, colorEditorShadeSliderElementValueAccessor, ColorEditorShadeSliderElement, colorEditorSwatchElementValueAccessor, ColorEditorSwatchElement, colorEditorElementValueAccessor, ColorEditorElement, ColorPickerElement, ColorSliderElement, ColorSwatchGroupElement, ColorSwatchElement, ColorThumbElement, colorBoxElementValueAccessor, ColorBoxElement, ComboItemElement, comboElementValueAccessor, ComboElement, CommentElement, CompoundButtonElement, CookiesConsentElement, dateBoxElementValueAccessor, DateBoxElement, dateTimeBoxElementValueAccessor, DateTimeBoxElement, DesignerCanvasElement, DesignerContentElement, DesignerFrameElement, DesignerElement, DialogContentElement, DisclosureElement, DividerElement, DockPanelElement, DotGroupElement, DotElement, DrawerContainerElement, DropZoneElement, DropDownButtonElement, DurationBoxElement, ElevationElement, EmojiElement, EmptyStateElement, EpgChannelElement, EpgProgramElement, EpgElement, ErrorStateElement, ErrorElement, ExpanderGroupElement, ExpanderHeaderElement, ExpanderSubHeaderElement, ExpanderElement, FloatingActionButtonGroupElement, FloatingActionButtonElement, FilePickerElement, FileUploadItemElement, fileUploadElementValueAccessor, FileUploadElement, fileBoxElementValueAccessor, FileBoxElement, FloatingTriggerElement, FloatingElement, FlowBoardColumnComposerElement, FlowBoardColumnItemComposerElement, FlowBoardColumnItemElement, FlowBoardColumnElement, FlowBoardElement, FocusRingElement, FontEditorElement, FooterItemGroupElement, FooterItemElement, FooterElement, FormFieldElement, FormElement, GhostElement, GridItemElement, GridElement, HelmetElement, HintElement, IconElement, ImageElement, IndicatorElement, JumbotronHeaderElement, JumbotronSubHeaderElement, JumbotronElement, KbdShortcutElement, KbdElement, LightChainElement, ListItemGroupElement, ListItemElement, listElementValueAccessor, ListElement, ListingItemMarkerElement, ListingItemElement, ListingElement, MapElement, MarqueeElement, MasonryElement, MenuItemGroupElement, MenuItemElement, MenuElement, MessageContentElement, MessageElement, MeterBarElement, MeterRingElement, NumberCounterElement, NumberElement, numberBoxElementValueAccessor, NumberBoxElement, PageContentElement, PageHeaderElement, PagePreContentElement, PagePreHeaderElement, PageElement, PageMenuElement, PaginatorElement, passwordBoxElementValueAccessor, PasswordBoxElement, PatternElement, PersonaElement, pinBoxElementValueAccessor, PinBoxElement, PipElement, PlaceholderElement, PopupElement, PortalHostElement, PortalProjectionElement, PortalElement, PressButtonElement, ProgressBarElement, QRCodeElement, radioGroupElementValueAccessor, RadioGroupElement, radioElementValueAccessor, RadioElement, RatingElement, ReactionChatToolElement, RegionViewElement, RegionElement, RepeatButtonElement, ResizeAdornerElement, ResizeThumbElement, ResizeElement, RibbonElement, richTextBoxElementValueAccessor, RichTextBoxElement, SchedulerEventElement, SchedulerElement, ScrollElement, scrubSliderElementValueAccessor, ScrubSliderElement, searchBoxElementValueAccessor, SearchBoxElement, SegmentItemElement, SegmentElement, SelectItemGroupElement, SelectItemElement, selectElementValueAccessor, SelectElement, signaturePadElementValueAccessor, SignaturePadElement, SkeletonElement, sliderElementValueAccessor, SliderElement, Slider2ThumbElement, Slider2Element, SpacerElement, SplitButtonElement, SplitElement, StackElement, StepperItemElement, StickyElement, SuccessStateElement, SummaryElement, SwipeElement, TabItemElement, TabPanelElement, TabStripItemElement, TabStripElement, TabElement, TableBodyCellElement, TableBodyRowElement, TableBodyElement, TableColumnEditorElement, TableFooterCellElement, TableFooterRowElement, TableFooterElement, TableHeaderCellElement, TableHeaderRowElement, TableHeaderElement, TableElement, TextFormatElement, TextElement, textBoxElementValueAccessor, TextBoxElement, Theme2Element, ThumbElement, ThumbnailElement, TickBarElement, TileListItemElement, TileListElement, TileManagerTileElement, TileManagerElement, TileElement, timeBoxElementValueAccessor, TimeBoxElement, TimelineContentElement, TimelineItemElement, TimelineMarkerElement, TimelineOppositeElement, TimelineElement, toggleButtonGroupElementValueAccessor, ToggleButtonGroupElement, toggleButtonElementValueAccessor, ToggleButtonElement, toggleSwitchElementValueAccessor, ToggleSwitchElement, ToggleTipElement, ToolbarElement, TourAnchorElement, TourStepElement, TourElement, TreeItemElement, treeElementValueAccessor, TreeElement, UpDownSpinnerElement, VideoElement, VirtualizeElement, VoiceRecorderChatToolElement, WheelPickerElement, WizardStepElement, WrapElement } from '@breadstone/mosaik-elements-foundation';
|
|
4
|
+
import { AbsoluteItemElement, AbsoluteElement, ActionbarGroupElement, ActionbarItemElement, ActionbarSeparatorElement, ActionbarElement, AnchorElement, AppHeaderElement, AppElement, AttachmentChatToolElement, AudioElement, AnimationPlayer, Animation, BREAKPOINTS, PerspectiveElement, RippleElement, ScaleElement, ProgressRingElement, ExpandableElement, FlipElement, TooltipElement, dataListElementValueAccessor, DataListElement, dataTableElementValueAccessor, DataTableElement, StepperElement, WizardElement, Size, Spacing, TextFormatters, DIALOG_STACK_BEHAVIOR_DEFAULT_CONFIG, ButtonElement, DialogActionsElement, DialogElement, DialogFooterElement, DialogHeaderElement, DialogHeaderSubTextElement, DialogHeaderTextElement, MOSAIK_PORTAL_SCOPE_ATTRIBUTE, Key, EID, DRAWER_STACK_BEHAVIOR_DEFAULT_CONFIG, DrawerActionsElement, DrawerElement, DrawerContentElement, DrawerFooterElement, DrawerHeaderElement, DrawerHeaderSubTextElement, DrawerHeaderTextElement, DismissElement, MessageBoxElement, MessageBoxResult, SheetElement, SheetContentElement, SheetFooterElement, SheetHeaderElement, SheetHeaderSubTextElement, SheetHeaderTextElement, ToastElement, DateAgoIntl, TimeAgoIntl, ThemeService as ThemeService$1, TranslatorService, Translator, TranslatorServiceLocator, autoCompleteBoxElementValueAccessor, AutoCompleteBoxElement, AvatarGroupElement, avatarElementValueAccessor, AvatarElement, BackdropElement, BadgeElement, BannerGroupElement, BannerHeaderElement, BannerSubHeaderElement, BannerElement, BoxElement, BreadcrumbItemElement, BreadcrumbElement, BusyStateElement, ButtonGroupElement, CalendarHeaderElement, CalendarItemElement, CalendarSubHeaderElement, calendarElementValueAccessor, CalendarElement, CameraElement, CardActionsElement, CardContentElement, CardFooterElement, CardHeaderElement, CardSubTitleElement, CardTitleElement, CardElement, Carousel2Element, CarouselItem2Element, CarouselItemElement, CarouselElement, CellGroupElement, CellElement, ChartElement, ChatHeaderElement, ChatInputAttachmentListElement, ChatInputElement, ChatMarkerElement, ChatMessageAvatarElement, ChatMessageDividerElement, ChatMessageReactionElement, ChatMessageElement, ChatElement, checkBoxGroupElementValueAccessor, CheckBoxGroupElement, checkboxElementValueAccessor, CheckboxElement, CheckmarkElement, chipGroupElementValueAccessor, ChipGroupElement, ChipElement, chipBoxElementValueAccessor, ChipBoxElement, ChoiceGroupHeaderElement, choiceGroupElementValueAccessor, ChoiceGroupElement, choiceElementValueAccessor, ChoiceElement, CodeElement, ColorAreaElement, colorEditorAlphaSliderElementValueAccessor, ColorEditorAlphaSliderElement, colorEditorAreaElementValueAccessor, ColorEditorAreaElement, colorEditorHueSliderElementValueAccessor, ColorEditorHueSliderElement, colorEditorInputsElementValueAccessor, ColorEditorInputsElement, colorEditorPaletteElementValueAccessor, ColorEditorPaletteElement, colorEditorShadeSliderElementValueAccessor, ColorEditorShadeSliderElement, colorEditorSwatchElementValueAccessor, ColorEditorSwatchElement, colorEditorElementValueAccessor, ColorEditorElement, ColorPickerElement, ColorSliderElement, ColorSwatchGroupElement, ColorSwatchElement, ColorThumbElement, colorBoxElementValueAccessor, ColorBoxElement, ComboItemElement, comboElementValueAccessor, ComboElement, CommentElement, CompoundButtonElement, CookiesConsentElement, dateBoxElementValueAccessor, DateBoxElement, dateTimeBoxElementValueAccessor, DateTimeBoxElement, DesignerCanvasElement, DesignerContentElement, DesignerFrameElement, DesignerElement, DialogContentElement, DisclosureElement, DividerElement, DockPanelElement, DotGroupElement, DotElement, DrawerContainerElement, DropZoneElement, DropDownButtonElement, DurationBoxElement, ElevationElement, EmojiElement, EmptyStateElement, EpgChannelElement, EpgProgramElement, EpgElement, ErrorStateElement, ErrorElement, ExpanderGroupElement, ExpanderHeaderElement, ExpanderSubHeaderElement, ExpanderElement, FloatingActionButtonGroupElement, FloatingActionButtonElement, FilePickerElement, FileUploadItemElement, fileUploadElementValueAccessor, FileUploadElement, fileBoxElementValueAccessor, FileBoxElement, FloatingTriggerElement, FloatingElement, FlowBoardColumnComposerElement, FlowBoardColumnItemComposerElement, FlowBoardColumnItemElement, FlowBoardColumnElement, FlowBoardElement, FocusRingElement, FontEditorElement, FooterItemGroupElement, FooterItemElement, FooterElement, FormFieldElement, FormElement, GhostElement, GridItemElement, GridElement, HelmetElement, HintElement, IconElement, ImageElement, IndicatorElement, JumbotronHeaderElement, JumbotronSubHeaderElement, JumbotronElement, KbdShortcutElement, KbdElement, LightChainElement, ListItemGroupElement, ListItemElement, listElementValueAccessor, ListElement, ListingItemMarkerElement, ListingItemElement, ListingElement, MapElement, MarqueeElement, MasonryElement, MenuItemGroupElement, MenuItemElement, MenuElement, MessageContentElement, MessageElement, MeterBarElement, MeterRingElement, NumberCounterElement, NumberElement, numberBoxElementValueAccessor, NumberBoxElement, PageContentElement, PageHeaderElement, PagePreContentElement, PagePreHeaderElement, PageElement, PageMenuElement, PaginatorElement, passwordBoxElementValueAccessor, PasswordBoxElement, PatternElement, PersonaElement, pinBoxElementValueAccessor, PinBoxElement, PipElement, PlaceholderElement, PopupElement, PortalHostElement, PortalProjectionElement, PortalElement, PressButtonElement, ProgressBarElement, QRCodeElement, radioGroupElementValueAccessor, RadioGroupElement, radioElementValueAccessor, RadioElement, RatingElement, ReactionChatToolElement, RegionViewElement, RegionElement, RepeatButtonElement, ResizeAdornerElement, ResizeThumbElement, ResizeElement, RibbonElement, richTextBoxElementValueAccessor, RichTextBoxElement, SchedulerEventElement, SchedulerElement, ScrollElement, scrubSliderElementValueAccessor, ScrubSliderElement, searchBoxElementValueAccessor, SearchBoxElement, SegmentItemElement, SegmentElement, SelectItemGroupElement, SelectItemElement, selectElementValueAccessor, SelectElement, signaturePadElementValueAccessor, SignaturePadElement, SkeletonElement, sliderElementValueAccessor, SliderElement, Slider2ThumbElement, Slider2Element, SpacerElement, SplitButtonElement, SplitElement, StackElement, StepperItemElement, StickyElement, SuccessStateElement, SummaryElement, SwipeElement, TabItemElement, TabPanelElement, TabStripItemElement, TabStripElement, TabElement, TableBodyCellElement, TableBodyRowElement, TableBodyElement, TableColumnEditorElement, TableFooterCellElement, TableFooterRowElement, TableFooterElement, TableHeaderCellElement, TableHeaderRowElement, TableHeaderElement, TableElement, TextFormatElement, TextElement, textBoxElementValueAccessor, TextBoxElement, Theme2Element, ThumbElement, ThumbnailElement, TickBarElement, TileListItemElement, TileListElement, TileManagerTileElement, TileManagerElement, TileElement, timeBoxElementValueAccessor, TimeBoxElement, TimelineContentElement, TimelineItemElement, TimelineMarkerElement, TimelineOppositeElement, TimelineElement, toggleButtonGroupElementValueAccessor, ToggleButtonGroupElement, toggleButtonElementValueAccessor, ToggleButtonElement, toggleSwitchElementValueAccessor, ToggleSwitchElement, ToggleTipElement, ToolbarElement, TourAnchorElement, TourStepElement, TourElement, TreeItemElement, treeElementValueAccessor, TreeElement, UpDownSpinnerElement, VideoElement, VirtualizeElement, VoiceRecorderChatToolElement, WheelPickerElement, WizardStepElement, WrapElement } from '@breadstone/mosaik-elements-foundation';
|
|
5
5
|
import { AbstractControl, FormGroupDirective, NgControl, TouchedChangeEvent, NG_VALUE_ACCESSOR, FormControl, FormArray, FormGroup } from '@angular/forms';
|
|
6
6
|
import { BreakpointObserver } from '@angular/cdk/layout';
|
|
7
7
|
import { Subject, map, Subscription, filter, of, isObservable, BehaviorSubject, merge, fromEvent, take, takeUntil, timer, share, Observable } from 'rxjs';
|
|
@@ -11426,6 +11426,146 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
|
|
|
11426
11426
|
}]
|
|
11427
11427
|
}] });
|
|
11428
11428
|
|
|
11429
|
+
// #region Imports
|
|
11430
|
+
const OVERLAY_INTERACTION_STATE = getOverlayInteractionState();
|
|
11431
|
+
/**
|
|
11432
|
+
* Coordinates close interactions across stacked CDK overlays.
|
|
11433
|
+
*
|
|
11434
|
+
* @internal
|
|
11435
|
+
*/
|
|
11436
|
+
class OverlayInteractionCoordinator {
|
|
11437
|
+
// #region Methods
|
|
11438
|
+
/**
|
|
11439
|
+
* Registers an overlay as active for global close interaction arbitration.
|
|
11440
|
+
*
|
|
11441
|
+
* @internal
|
|
11442
|
+
*/
|
|
11443
|
+
static register(overlayRef) {
|
|
11444
|
+
const focusTrap = OverlayInteractionCoordinator.findEntry(overlayRef)?.focusTrap ?? null;
|
|
11445
|
+
OverlayInteractionCoordinator.remove(overlayRef);
|
|
11446
|
+
OVERLAY_INTERACTION_STATE.entries.push({
|
|
11447
|
+
overlayRef: overlayRef,
|
|
11448
|
+
order: ++OVERLAY_INTERACTION_STATE.order,
|
|
11449
|
+
focusTrap: focusTrap
|
|
11450
|
+
});
|
|
11451
|
+
OverlayInteractionCoordinator.updateFocusTrapStates();
|
|
11452
|
+
}
|
|
11453
|
+
/**
|
|
11454
|
+
* Removes an overlay from global close interaction arbitration.
|
|
11455
|
+
*
|
|
11456
|
+
* @internal
|
|
11457
|
+
*/
|
|
11458
|
+
static unregister(overlayRef) {
|
|
11459
|
+
OverlayInteractionCoordinator.remove(overlayRef);
|
|
11460
|
+
OverlayInteractionCoordinator.updateFocusTrapStates();
|
|
11461
|
+
}
|
|
11462
|
+
/**
|
|
11463
|
+
* Registers a focus trap for an overlay and enables only the uppermost attached overlay trap.
|
|
11464
|
+
*
|
|
11465
|
+
* @internal
|
|
11466
|
+
*/
|
|
11467
|
+
static registerFocusTrap(overlayRef, focusTrap) {
|
|
11468
|
+
let entry = OverlayInteractionCoordinator.findEntry(overlayRef);
|
|
11469
|
+
if (!entry) {
|
|
11470
|
+
entry = {
|
|
11471
|
+
overlayRef: overlayRef,
|
|
11472
|
+
order: ++OVERLAY_INTERACTION_STATE.order,
|
|
11473
|
+
focusTrap: null
|
|
11474
|
+
};
|
|
11475
|
+
OVERLAY_INTERACTION_STATE.entries.push(entry);
|
|
11476
|
+
}
|
|
11477
|
+
entry.focusTrap = focusTrap;
|
|
11478
|
+
OverlayInteractionCoordinator.updateFocusTrapStates();
|
|
11479
|
+
}
|
|
11480
|
+
/**
|
|
11481
|
+
* Removes the focus trap for an overlay and re-enables the next uppermost attached overlay trap.
|
|
11482
|
+
*
|
|
11483
|
+
* @internal
|
|
11484
|
+
*/
|
|
11485
|
+
static unregisterFocusTrap(overlayRef) {
|
|
11486
|
+
const entry = OverlayInteractionCoordinator.findEntry(overlayRef);
|
|
11487
|
+
if (entry) {
|
|
11488
|
+
if (entry.focusTrap) {
|
|
11489
|
+
entry.focusTrap.enabled = false;
|
|
11490
|
+
}
|
|
11491
|
+
entry.focusTrap = null;
|
|
11492
|
+
}
|
|
11493
|
+
OverlayInteractionCoordinator.updateFocusTrapStates();
|
|
11494
|
+
}
|
|
11495
|
+
/**
|
|
11496
|
+
* Returns whether the overlay is the uppermost currently attached overlay.
|
|
11497
|
+
*
|
|
11498
|
+
* @internal
|
|
11499
|
+
*/
|
|
11500
|
+
static isTopMost(overlayRef) {
|
|
11501
|
+
return OverlayInteractionCoordinator.getTopMostOverlayRef() === overlayRef;
|
|
11502
|
+
}
|
|
11503
|
+
/**
|
|
11504
|
+
* Returns whether the overlay owned the uppermost position when the interaction event started.
|
|
11505
|
+
*
|
|
11506
|
+
* @internal
|
|
11507
|
+
*/
|
|
11508
|
+
static isTopMostForInteraction(overlayRef, event) {
|
|
11509
|
+
return OverlayInteractionCoordinator.getOrCreateInteractionOwner(event) === overlayRef;
|
|
11510
|
+
}
|
|
11511
|
+
static remove(overlayRef) {
|
|
11512
|
+
const index = OVERLAY_INTERACTION_STATE.entries.findIndex((entry) => entry.overlayRef === overlayRef);
|
|
11513
|
+
if (index >= 0) {
|
|
11514
|
+
const entry = OVERLAY_INTERACTION_STATE.entries[index];
|
|
11515
|
+
if (entry.focusTrap) {
|
|
11516
|
+
entry.focusTrap.enabled = false;
|
|
11517
|
+
}
|
|
11518
|
+
OVERLAY_INTERACTION_STATE.entries.splice(index, 1);
|
|
11519
|
+
}
|
|
11520
|
+
}
|
|
11521
|
+
static getOrCreateInteractionOwner(event) {
|
|
11522
|
+
if (!OVERLAY_INTERACTION_STATE.eventOwners.has(event)) {
|
|
11523
|
+
OVERLAY_INTERACTION_STATE.eventOwners.set(event, OverlayInteractionCoordinator.getTopMostOverlayRef());
|
|
11524
|
+
}
|
|
11525
|
+
return OVERLAY_INTERACTION_STATE.eventOwners.get(event) ?? null;
|
|
11526
|
+
}
|
|
11527
|
+
static findEntry(overlayRef) {
|
|
11528
|
+
return OVERLAY_INTERACTION_STATE.entries.find((entry) => entry.overlayRef === overlayRef) ?? null;
|
|
11529
|
+
}
|
|
11530
|
+
static getTopMostOverlayRef() {
|
|
11531
|
+
let topMostEntry = null;
|
|
11532
|
+
for (const entry of OVERLAY_INTERACTION_STATE.entries) {
|
|
11533
|
+
if (entry.overlayRef.hasAttached() && (!topMostEntry || entry.order > topMostEntry.order)) {
|
|
11534
|
+
topMostEntry = entry;
|
|
11535
|
+
}
|
|
11536
|
+
}
|
|
11537
|
+
return topMostEntry?.overlayRef ?? null;
|
|
11538
|
+
}
|
|
11539
|
+
static updateFocusTrapStates() {
|
|
11540
|
+
const topMostOverlayRef = OverlayInteractionCoordinator.getTopMostOverlayRef();
|
|
11541
|
+
for (const entry of OVERLAY_INTERACTION_STATE.entries) {
|
|
11542
|
+
if (entry.focusTrap) {
|
|
11543
|
+
entry.focusTrap.enabled = entry.overlayRef === topMostOverlayRef;
|
|
11544
|
+
}
|
|
11545
|
+
}
|
|
11546
|
+
}
|
|
11547
|
+
}
|
|
11548
|
+
function getOverlayInteractionState() {
|
|
11549
|
+
const root = globalThis;
|
|
11550
|
+
root.__mosaikOverlayInteractionState__ ??= {
|
|
11551
|
+
entries: new Array(),
|
|
11552
|
+
eventOwners: new WeakMap(),
|
|
11553
|
+
order: 0
|
|
11554
|
+
};
|
|
11555
|
+
return root.__mosaikOverlayInteractionState__;
|
|
11556
|
+
}
|
|
11557
|
+
|
|
11558
|
+
// #region Imports
|
|
11559
|
+
// #endregion
|
|
11560
|
+
// #region Constants
|
|
11561
|
+
/**
|
|
11562
|
+
* Injection token for the CDK overlay reference that hosts a Mosaik portal component.
|
|
11563
|
+
*
|
|
11564
|
+
* @internal
|
|
11565
|
+
*/
|
|
11566
|
+
const PORTAL_OVERLAY_REF = new InjectionToken('MOSAIK_PORTAL_OVERLAY_REF');
|
|
11567
|
+
// #endregion
|
|
11568
|
+
|
|
11429
11569
|
// #region Imports
|
|
11430
11570
|
// #endregion
|
|
11431
11571
|
/**
|
|
@@ -11436,6 +11576,7 @@ let PortalComponent$1 = class PortalComponent extends BasePortalOutlet {
|
|
|
11436
11576
|
_element;
|
|
11437
11577
|
_focusTrapFactory;
|
|
11438
11578
|
_document;
|
|
11579
|
+
_overlayRef;
|
|
11439
11580
|
_focusTrap;
|
|
11440
11581
|
_elementFocusedBeforeOpened;
|
|
11441
11582
|
// #endregion
|
|
@@ -11450,8 +11591,11 @@ let PortalComponent$1 = class PortalComponent extends BasePortalOutlet {
|
|
|
11450
11591
|
this._element = inject(ElementRef);
|
|
11451
11592
|
this._focusTrapFactory = inject(ConfigurableFocusTrapFactory);
|
|
11452
11593
|
this._document = inject(DOCUMENT);
|
|
11594
|
+
this._overlayRef = inject(PORTAL_OVERLAY_REF, { optional: true });
|
|
11453
11595
|
this._focusTrap = null;
|
|
11454
11596
|
this._elementFocusedBeforeOpened = null;
|
|
11597
|
+
this._element.nativeElement.setAttribute(MOSAIK_PORTAL_SCOPE_ATTRIBUTE, '');
|
|
11598
|
+
this._element.nativeElement.tabIndex = -1;
|
|
11455
11599
|
}
|
|
11456
11600
|
// #endregion
|
|
11457
11601
|
// #region Methods
|
|
@@ -11475,7 +11619,9 @@ let PortalComponent$1 = class PortalComponent extends BasePortalOutlet {
|
|
|
11475
11619
|
*/
|
|
11476
11620
|
attachComponentPortal(portal) {
|
|
11477
11621
|
this.savePreviouslyFocusedElement();
|
|
11478
|
-
|
|
11622
|
+
const componentRef = this.portal.attachComponentPortal(portal);
|
|
11623
|
+
this.trapFocus();
|
|
11624
|
+
return componentRef;
|
|
11479
11625
|
}
|
|
11480
11626
|
/**
|
|
11481
11627
|
* Attach a TemplatePortal as content to this dialog container.
|
|
@@ -11485,7 +11631,9 @@ let PortalComponent$1 = class PortalComponent extends BasePortalOutlet {
|
|
|
11485
11631
|
*/
|
|
11486
11632
|
attachTemplatePortal(portal) {
|
|
11487
11633
|
this.savePreviouslyFocusedElement();
|
|
11488
|
-
|
|
11634
|
+
const embeddedViewRef = this.portal.attachTemplatePortal(portal);
|
|
11635
|
+
this.trapFocus();
|
|
11636
|
+
return embeddedViewRef;
|
|
11489
11637
|
}
|
|
11490
11638
|
/**
|
|
11491
11639
|
* @public
|
|
@@ -11493,22 +11641,38 @@ let PortalComponent$1 = class PortalComponent extends BasePortalOutlet {
|
|
|
11493
11641
|
trapFocus() {
|
|
11494
11642
|
const element = this._element.nativeElement;
|
|
11495
11643
|
this._focusTrap ??= this._focusTrapFactory.create(element);
|
|
11496
|
-
|
|
11644
|
+
if (this._overlayRef) {
|
|
11645
|
+
OverlayInteractionCoordinator.registerFocusTrap(this._overlayRef, this._focusTrap);
|
|
11646
|
+
}
|
|
11647
|
+
const focusPromise = this._focusTrap.focusInitialElementWhenReady();
|
|
11497
11648
|
const activeElement = this._document.activeElement;
|
|
11498
11649
|
if (activeElement !== element && !element.contains(activeElement)) {
|
|
11499
11650
|
element.focus();
|
|
11651
|
+
this.focusFirstTabbableDescendant(element);
|
|
11500
11652
|
}
|
|
11653
|
+
void focusPromise.then((focused) => {
|
|
11654
|
+
if (!this._focusTrap || !element.isConnected) {
|
|
11655
|
+
return;
|
|
11656
|
+
}
|
|
11657
|
+
if (!focused || this._document.activeElement === element || !element.contains(this._document.activeElement)) {
|
|
11658
|
+
this.focusFirstTabbableDescendant(element);
|
|
11659
|
+
}
|
|
11660
|
+
});
|
|
11501
11661
|
}
|
|
11502
11662
|
/**
|
|
11503
11663
|
* @public
|
|
11504
11664
|
*/
|
|
11505
11665
|
restoreFocus() {
|
|
11506
11666
|
const toFocus = this._elementFocusedBeforeOpened;
|
|
11667
|
+
if (this._overlayRef) {
|
|
11668
|
+
OverlayInteractionCoordinator.unregisterFocusTrap(this._overlayRef);
|
|
11669
|
+
}
|
|
11507
11670
|
if (toFocus && typeof toFocus.focus === 'function') {
|
|
11508
11671
|
toFocus.focus();
|
|
11509
11672
|
}
|
|
11510
11673
|
if (this._focusTrap) {
|
|
11511
11674
|
this._focusTrap.destroy();
|
|
11675
|
+
this._focusTrap = null;
|
|
11512
11676
|
}
|
|
11513
11677
|
}
|
|
11514
11678
|
/**
|
|
@@ -11520,6 +11684,39 @@ let PortalComponent$1 = class PortalComponent extends BasePortalOutlet {
|
|
|
11520
11684
|
void Promise.resolve().then(() => this._element.nativeElement.focus());
|
|
11521
11685
|
}
|
|
11522
11686
|
}
|
|
11687
|
+
/**
|
|
11688
|
+
* @private
|
|
11689
|
+
*/
|
|
11690
|
+
focusFirstTabbableDescendant(element) {
|
|
11691
|
+
this.findFirstTabbableDescendant(element)?.focus();
|
|
11692
|
+
}
|
|
11693
|
+
/**
|
|
11694
|
+
* @private
|
|
11695
|
+
*/
|
|
11696
|
+
findFirstTabbableDescendant(element) {
|
|
11697
|
+
for (const child of Array.from(element.children)) {
|
|
11698
|
+
if (!(child instanceof HTMLElement)) {
|
|
11699
|
+
continue;
|
|
11700
|
+
}
|
|
11701
|
+
if (this.isTabbable(child)) {
|
|
11702
|
+
return child;
|
|
11703
|
+
}
|
|
11704
|
+
const descendant = this.findFirstTabbableDescendant(child);
|
|
11705
|
+
if (descendant) {
|
|
11706
|
+
return descendant;
|
|
11707
|
+
}
|
|
11708
|
+
}
|
|
11709
|
+
return null;
|
|
11710
|
+
}
|
|
11711
|
+
/**
|
|
11712
|
+
* @private
|
|
11713
|
+
*/
|
|
11714
|
+
isTabbable(element) {
|
|
11715
|
+
if (element.tabIndex < 0 || element.hidden || element.hasAttribute('disabled') || element.getAttribute('aria-hidden') === 'true') {
|
|
11716
|
+
return false;
|
|
11717
|
+
}
|
|
11718
|
+
return element.getClientRects().length > 0;
|
|
11719
|
+
}
|
|
11523
11720
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: PortalComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
11524
11721
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.13", type: PortalComponent, isStandalone: true, usesInheritance: true, ngImport: i0 });
|
|
11525
11722
|
};
|
|
@@ -12043,80 +12240,6 @@ class OverlayBackdropStackCoordinator {
|
|
|
12043
12240
|
}
|
|
12044
12241
|
}
|
|
12045
12242
|
|
|
12046
|
-
// #region Imports
|
|
12047
|
-
const OVERLAY_INTERACTION_STATE = getOverlayInteractionState();
|
|
12048
|
-
/**
|
|
12049
|
-
* Coordinates close interactions across stacked CDK overlays.
|
|
12050
|
-
*
|
|
12051
|
-
* @internal
|
|
12052
|
-
*/
|
|
12053
|
-
class OverlayInteractionCoordinator {
|
|
12054
|
-
// #region Methods
|
|
12055
|
-
/**
|
|
12056
|
-
* Registers an overlay as active for global close interaction arbitration.
|
|
12057
|
-
*
|
|
12058
|
-
* @internal
|
|
12059
|
-
*/
|
|
12060
|
-
static register(overlayRef) {
|
|
12061
|
-
OverlayInteractionCoordinator.unregister(overlayRef);
|
|
12062
|
-
OVERLAY_INTERACTION_STATE.entries.push({
|
|
12063
|
-
overlayRef: overlayRef,
|
|
12064
|
-
order: ++OVERLAY_INTERACTION_STATE.order
|
|
12065
|
-
});
|
|
12066
|
-
}
|
|
12067
|
-
/**
|
|
12068
|
-
* Removes an overlay from global close interaction arbitration.
|
|
12069
|
-
*
|
|
12070
|
-
* @internal
|
|
12071
|
-
*/
|
|
12072
|
-
static unregister(overlayRef) {
|
|
12073
|
-
const index = OVERLAY_INTERACTION_STATE.entries.findIndex((entry) => entry.overlayRef === overlayRef);
|
|
12074
|
-
if (index >= 0) {
|
|
12075
|
-
OVERLAY_INTERACTION_STATE.entries.splice(index, 1);
|
|
12076
|
-
}
|
|
12077
|
-
}
|
|
12078
|
-
/**
|
|
12079
|
-
* Returns whether the overlay is the uppermost currently attached overlay.
|
|
12080
|
-
*
|
|
12081
|
-
* @internal
|
|
12082
|
-
*/
|
|
12083
|
-
static isTopMost(overlayRef) {
|
|
12084
|
-
return OverlayInteractionCoordinator.getTopMostOverlayRef() === overlayRef;
|
|
12085
|
-
}
|
|
12086
|
-
/**
|
|
12087
|
-
* Returns whether the overlay owned the uppermost position when the interaction event started.
|
|
12088
|
-
*
|
|
12089
|
-
* @internal
|
|
12090
|
-
*/
|
|
12091
|
-
static isTopMostForInteraction(overlayRef, event) {
|
|
12092
|
-
return OverlayInteractionCoordinator.getOrCreateInteractionOwner(event) === overlayRef;
|
|
12093
|
-
}
|
|
12094
|
-
static getOrCreateInteractionOwner(event) {
|
|
12095
|
-
if (!OVERLAY_INTERACTION_STATE.eventOwners.has(event)) {
|
|
12096
|
-
OVERLAY_INTERACTION_STATE.eventOwners.set(event, OverlayInteractionCoordinator.getTopMostOverlayRef());
|
|
12097
|
-
}
|
|
12098
|
-
return OVERLAY_INTERACTION_STATE.eventOwners.get(event) ?? null;
|
|
12099
|
-
}
|
|
12100
|
-
static getTopMostOverlayRef() {
|
|
12101
|
-
let topMostEntry = null;
|
|
12102
|
-
for (const entry of OVERLAY_INTERACTION_STATE.entries) {
|
|
12103
|
-
if (entry.overlayRef.hasAttached() && (!topMostEntry || entry.order > topMostEntry.order)) {
|
|
12104
|
-
topMostEntry = entry;
|
|
12105
|
-
}
|
|
12106
|
-
}
|
|
12107
|
-
return topMostEntry?.overlayRef ?? null;
|
|
12108
|
-
}
|
|
12109
|
-
}
|
|
12110
|
-
function getOverlayInteractionState() {
|
|
12111
|
-
const root = globalThis;
|
|
12112
|
-
root.__mosaikOverlayInteractionState__ ??= {
|
|
12113
|
-
entries: new Array(),
|
|
12114
|
-
eventOwners: new WeakMap(),
|
|
12115
|
-
order: 0
|
|
12116
|
-
};
|
|
12117
|
-
return root.__mosaikOverlayInteractionState__;
|
|
12118
|
-
}
|
|
12119
|
-
|
|
12120
12243
|
// #region Imports
|
|
12121
12244
|
// #endregion
|
|
12122
12245
|
// #region Constants
|
|
@@ -12214,8 +12337,11 @@ class PortalProvider {
|
|
|
12214
12337
|
/**
|
|
12215
12338
|
* @protected
|
|
12216
12339
|
*/
|
|
12217
|
-
createPortal(component, config) {
|
|
12218
|
-
|
|
12340
|
+
createPortal(component, overlayRef, config) {
|
|
12341
|
+
const portalInjector = new StatelessInjector(this.createPortalInjector(config), [
|
|
12342
|
+
[PORTAL_OVERLAY_REF, overlayRef]
|
|
12343
|
+
]);
|
|
12344
|
+
return new ComponentPortal(component, null, portalInjector);
|
|
12219
12345
|
}
|
|
12220
12346
|
/**
|
|
12221
12347
|
* @protected
|
|
@@ -12426,7 +12552,7 @@ class DialogService extends PortalProvider {
|
|
|
12426
12552
|
backdropStackKey: 'dialog',
|
|
12427
12553
|
backdropStrategy: config?.backdropStrategy
|
|
12428
12554
|
});
|
|
12429
|
-
const portal = this.createPortal(DialogPortalComponent, config);
|
|
12555
|
+
const portal = this.createPortal(DialogPortalComponent, overlayRef, config);
|
|
12430
12556
|
const componentRef = this.createComponent(portal, overlayRef, DialogPortalComponent, config);
|
|
12431
12557
|
this._portalInjector = componentRef.injector;
|
|
12432
12558
|
const dialogRef = new DialogRef(this.createId(), componentRef.instance.dialog, overlayRef, config?.data);
|
|
@@ -15280,7 +15406,7 @@ class DrawerService extends PortalProvider {
|
|
|
15280
15406
|
backdropStackKey: 'drawer',
|
|
15281
15407
|
backdropStrategy: config?.backdropStrategy
|
|
15282
15408
|
});
|
|
15283
|
-
const portal = this.createPortal(DrawerPortalComponent, config);
|
|
15409
|
+
const portal = this.createPortal(DrawerPortalComponent, overlayRef, config);
|
|
15284
15410
|
const componentRef = this.createComponent(portal, overlayRef, DrawerPortalComponent, config);
|
|
15285
15411
|
this._portalInjector = componentRef.injector;
|
|
15286
15412
|
const drawerRef = new DrawerRef(this.createId(), componentRef.instance.drawer, overlayRef, config?.data);
|
|
@@ -16239,7 +16365,7 @@ class MessageBoxService extends PortalProvider {
|
|
|
16239
16365
|
backdropStackKey: 'message-box',
|
|
16240
16366
|
backdropStrategy: config?.backdropStrategy
|
|
16241
16367
|
});
|
|
16242
|
-
const portal = this.createPortal(MessageBoxPortalComponent, config);
|
|
16368
|
+
const portal = this.createPortal(MessageBoxPortalComponent, overlayRef, config);
|
|
16243
16369
|
const componentRef = this.createComponent(portal, overlayRef, MessageBoxPortalComponent, config);
|
|
16244
16370
|
const messageBoxRef = new MessageBoxRef(this.createId(), componentRef.instance.messageBox, overlayRef, config?.data);
|
|
16245
16371
|
this.prepareComponent(overlayRef, componentRef.instance.messageBox, messageBoxRef, config);
|
|
@@ -17898,7 +18024,7 @@ class SheetService extends PortalProvider {
|
|
|
17898
18024
|
backdropStackKey: 'sheet',
|
|
17899
18025
|
backdropStrategy: config?.backdropStrategy
|
|
17900
18026
|
});
|
|
17901
|
-
const portal = this.createPortal(SheetPortalComponent, config);
|
|
18027
|
+
const portal = this.createPortal(SheetPortalComponent, overlayRef, config);
|
|
17902
18028
|
const componentRef = this.createComponent(portal, overlayRef, SheetPortalComponent, config);
|
|
17903
18029
|
this._portalInjector = componentRef.injector;
|
|
17904
18030
|
const sheetRef = new SheetRef(this.createId(), componentRef.instance.sheet, overlayRef, config?.data);
|
|
@@ -18660,7 +18786,7 @@ class ToastService extends PortalProvider {
|
|
|
18660
18786
|
backdropStackKey: 'toast',
|
|
18661
18787
|
backdropStrategy: resolvedConfig?.backdropStrategy
|
|
18662
18788
|
});
|
|
18663
|
-
const portal = this.createPortal(ToastPortalComponent, resolvedConfig);
|
|
18789
|
+
const portal = this.createPortal(ToastPortalComponent, overlayRef, resolvedConfig);
|
|
18664
18790
|
const componentRef = this.createComponent(portal, overlayRef, ToastPortalComponent, resolvedConfig);
|
|
18665
18791
|
const toastRef = new ToastRef(this.createId(), componentRef.instance.toast, overlayRef, resolvedConfig?.data);
|
|
18666
18792
|
if (componentTypeOrTemplateRef) {
|