@agorapulse/ui-components 20.3.32 → 20.3.34

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.
@@ -1 +1 @@
1
- {"version":3,"file":"agorapulse-ui-components-nav-selector.mjs","sources":["../../../libs/ui-components/nav-selector/src/nav-selector-popover/nav-selector-popover-item.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector.ts","../../../libs/ui-components/nav-selector/src/directives/tree-node-accessibility.directive.ts","../../../libs/ui-components/nav-selector/src/directives/nav-selector-popover-trigger.directive.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.accessibility.ts","../../../libs/ui-components/nav-selector/src/utils/leaf.utils.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.folding.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.single-select.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.builder.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.filter.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.merger.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.minifying.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.multi-select.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.view-more.ts","../../../libs/ui-components/nav-selector/src/nav-selector.state.ts","../../../libs/ui-components/nav-selector/src/nav-selector-leaf-detail/nav-selector-leaf-detail.presenter.ts","../../../libs/ui-components/nav-selector/src/nav-selector-leaf-detail/nav-selector-leaf-detail.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector-leaf-detail/nav-selector-leaf-detail.component.html","../../../libs/ui-components/nav-selector/src/nav-selector-leaf-details/nav-selector-leaf-details.presenter.ts","../../../libs/ui-components/nav-selector/src/nav-selector-leaf-details/nav-selector-leaf-details.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector-leaf-details/nav-selector-leaf-details.component.html","../../../libs/ui-components/nav-selector/src/nav-selector-popover/nav-selector-popover.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector-popover/nav-selector-popover.component.html","../../../libs/ui-components/nav-selector/src/nav-selector-leaf/nav-selector-leaf.presenter.ts","../../../libs/ui-components/nav-selector/src/nav-selector-leaf/nav-selector-leaf.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector-leaf/nav-selector-leaf.component.html","../../../libs/ui-components/nav-selector/src/nav-selector-group/nav-selector-group.presenter.ts","../../../libs/ui-components/nav-selector/src/nav-selector-group/nav-selector-group.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector-group/nav-selector-group.component.html","../../../libs/ui-components/nav-selector/src/nav-selector-category/nav-selector-category.presenter.ts","../../../libs/ui-components/nav-selector/src/nav-selector-category/nav-selector-category.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector-category/nav-selector-category.component.html","../../../libs/ui-components/nav-selector/src/nav-selector.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector.component.html","../../../libs/ui-components/nav-selector/src/agorapulse-ui-components-nav-selector.ts"],"sourcesContent":["import { BaseButtonDirective } from '@agorapulse/ui-components/directives';\nimport { apFeatureLock, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport { Component, inject, input } from '@angular/core';\n\n@Component({\n selector: 'ap-nav-selector-popover-item',\n hostDirectives: [BaseButtonDirective],\n template: `\n <button\n #buttonElement\n type=\"button\"\n role=\"button\"\n [disabled]=\"disabled()\"\n [name]=\"name()\"\n [attr.data-test]=\"baseButtonDirective.hostDataTest ?? name()\"\n [attr.id]=\"id()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-disabled]=\"disabled()?.toString()\">\n <ng-content />\n\n @if (locked()) {\n <ap-symbol\n symbolId=\"feature-lock\"\n color=\"purple\"\n size=\"sm\" />\n }\n </button>\n `,\n styleUrls: ['./nav-selector-popover-item.component.scss'],\n host: {\n '[class.selected]': 'selected()',\n '[class.disabled]': 'disabled()',\n '[class.locked]': 'locked()',\n },\n imports: [SymbolComponent],\n providers: [withSymbols(apFeatureLock)],\n})\nexport class NavSelectorPopoverItemComponent {\n selected = input(false);\n disabled = input(false);\n locked = input(false);\n id = input<string | null>('');\n name = input.required<string>();\n ariaLabel = input<string | undefined>(undefined);\n\n readonly baseButtonDirective: BaseButtonDirective = inject(BaseButtonDirective, { self: true });\n}\n","import { AvatarNetwork } from '@agorapulse/ui-components/avatar';\nimport { agorapulseSymbol } from '@agorapulse/ui-symbol';\n\nexport const NavSelectorStyle = {\n DEFAULT: 'default',\n MENU: 'menu',\n} as const;\nexport type NavSelectorStyle = (typeof NavSelectorStyle)[keyof typeof NavSelectorStyle];\n\nexport type NavSelectorLeafActionClickedEvent = {\n /** Name of the action that has been clicked */\n actionName: string;\n /** Leaf on which the action has been clicked */\n leafUid: string;\n};\n\nexport type NavSelectorCategoryEmptyStateActionEvent = {\n /** Name of the action that has been clicked */\n actionName: string;\n};\n\n/**\n * As translation is not available in the DS, this all translations needed\n */\nexport interface NavSelectorTranslatedTexts {\n /** Title of the nav selector */\n title: string;\n /** Only text in multi select mode */\n only: string;\n /** Tooltip displayed on folded group when one of its children have token is invalid */\n groupTokenInvalid: string;\n /** Toolip displaying that token is invalid */\n tokenInvalid: string;\n /** Toolip displaying that feature is locked */\n featureLocked: string;\n /** placeholder for the search input */\n searchPlaceholder: string;\n /** Text displayed when the search return no results */\n noResults: string;\n /** Text of the button to show more details, it’s used when we limit the number of details displayed */\n viewMore: string;\n /** Text of the button to show less details, it’s used when we limit the number of details displayed */\n viewLess: string;\n}\n\n/**\n * Common interface for the NavSelector\n */\nexport type NavSelectorBaseNode = {\n /** Unique identifier of the node */\n uid: string;\n /** Displayed name of the node */\n alias: string;\n};\n\n/**\n * Represent an action that can be performed on a leaf\n */\nexport type NavSelectorLeafAction = {\n /** Unique identifier of the action, used for click tracking */\n id: string;\n /** Action label to display */\n label: string;\n /** Optional icon to display on the action */\n icon: string | null;\n /** Optional Status */\n status: 'disabled' | 'locked' | null;\n /** Whether to add a divider before this item */\n dividerEnabled?: boolean;\n};\n\n/**\n * Represent final entry of the nav selector\n */\nexport type NavSelectorLeaf = {\n /** Picture url to display on the avatar, optional */\n pictureUrl: string | null;\n /** Counter to display on the entry, to ignore if the leaf has details */\n counter: number | null;\n /** When true, the leaf will be hidden */\n missingPermission: boolean;\n /** For social profiles or ad accounts the corresponding network */\n network: AvatarNetwork | null;\n /** Translated text when the entry is disabled */\n disableReason: string | null;\n /** Indicates if entry has its token invalid */\n tokenInvalid: boolean;\n /** Indicates if entry is locked */\n featureLocked: boolean;\n /** Indicates if and which icon should be displayed before the label */\n startSymbolId: agorapulseSymbol | null;\n /** Indicates if and what dot color should be displayed before the label */\n startDotColor: string | null;\n /** Sub elements of the leaf, they are optional */\n details: NavSelectorLeafDetails[];\n /** Optional actions that can be performed on the leaf */\n actions: NavSelectorLeafAction[];\n type: 'LEAF';\n} & NavSelectorBaseNode;\n\n/**\n * Represent a group of entries which has been created by the user (ex: menuGroup)\n */\nexport type NavSelectorGroup = {\n /** A group can only have leaves as children */\n children: NavSelectorLeaf[];\n /** Indicates if the group should be folded or expanded when generating the nav selector */\n folded: boolean;\n type: 'GROUP';\n} & NavSelectorBaseNode;\n\n/**\n * Represent a category of entries which has been created by the product to separate different kind of entries (ex: social profiles, reports, ad accounts…)\n */\nexport type NavSelectorCategory = {\n /** A Category can have leaves or groups as children, you can have leaves alongside with groups */\n children: (NavSelectorLeaf | NavSelectorGroup)[];\n /** Indicates if the group should be folded or expanded when generating the nav selector */\n folded: boolean;\n /** Title of the empty state */\n emptyStateTitle?: string;\n /** Action of the empty state */\n emptyStateAction?: NavSelectorEmptyStateAction;\n\n avatar?: NavSelectorCategoryAvatar;\n\n type: 'CATEGORY';\n} & NavSelectorBaseNode;\n\nexport type NavSelectorCategoryAvatar =\n | {\n pictureUrl: string | null;\n rounded: boolean;\n }\n | {\n symbolId: agorapulseSymbol;\n };\n\n/**\n * Represent the action available in the empty state\n */\nexport type NavSelectorEmptyStateAction = {\n name: string;\n title: string;\n id?: string;\n symbolId?: agorapulseSymbol;\n featureLocked?: boolean;\n};\n\nexport type NavSelectorEntry = NavSelectorLeaf | NavSelectorGroup | NavSelectorCategory;\n\n/**\n * Represent details of a leaf, they are used to allow to display more specific information about the leaf\n */\nexport interface NavSelectorLeafDetails {\n /** Unique identifier of the node */\n uid: string;\n /** Counter to display on the entry */\n counter: number | null;\n /** If true, excludes this from the counter sum */\n excludedCounterSum: boolean;\n /** Displayed name of the node */\n name: string;\n /** Translation of the error on the leaf */\n errorReason: string | null;\n}\n\nexport const isNavSelectorEntryALeaf = (entry: NavSelectorEntry): entry is NavSelectorLeaf => entry.type === 'LEAF';\n\nexport const isNavSelectorEntryAGroup = (entry: NavSelectorEntry): entry is NavSelectorGroup => entry.type === 'GROUP';\n\nexport const isNavSelectorEntryACategory = (entry: NavSelectorEntry): entry is NavSelectorCategory => entry.type === 'CATEGORY';\n\n/**\n * Represent the accessibility on a node\n */\nexport type NodeAccessibility = {\n /** Number of sibling elements, itself included. Ex: there are 7 social profiles display in the group */\n ariaSetsize: number;\n /** Index starting from 1 of the element alongside its sibling */\n ariaPosinset: number;\n /** 0 to be focusable by Tab key and -1 to be focusable by keyboard with JS */\n tabIndex: number;\n /** In a tree, the deep level, starting from 1 */\n ariaLevel: number;\n};\n\nexport type InternalNavSelectorLeafAction = {\n /** Unique identifier of the action, used for click tracking */\n id: string;\n /** Action label to display */\n label: string;\n /** Optional icon to display on the action */\n icon: string | null;\n /** Optional Status */\n status: 'disabled' | 'locked' | null;\n /** Whether to add a divider before this item */\n dividerEnabled?: boolean;\n};\n\n/**\n * Represent a node\n */\nexport type InternalNavSelectorBaseNode = {\n /** Unique identifier of the entry */\n uid: string;\n /** Displayed name of the entry */\n alias: string;\n accessibility: NodeAccessibility;\n /** When hidden, the entry is not displayed, used when searching an element */\n hidden: boolean;\n /** When true, you can navigate with arrow keys on this entry */\n focusable: boolean;\n};\n\n/**\n * Represent a group of entries which has been created by the user (ex: menuGroup)\n */\nexport type InternalNavSelectorGroup = {\n /** A group can only have leaves as children */\n children: InternalNavSelectorLeaf[];\n /** Picture url of the group, used when the nav selector is minified */\n childrenPictureUrlSample: { url: string | null; initial: string }[];\n /** Indicates whenever the group is folded or not */\n folded: boolean;\n /** Indicates the counter value to display when the group is folded */\n counter: number;\n /** Indicates if the counter should be display when the group is folded */\n displayCounter: boolean;\n /** Indicates if the token invalid icon should be display when the group is folded */\n displayTokenInvalid: boolean;\n /** Indicates in multi select mode if the group has some children selected */\n undeterminedSelection: boolean;\n /** Indicates if the group is selected */\n selected: boolean;\n /** Indicates if the group is selectable */\n selectable: boolean;\n type: 'GROUP';\n} & InternalNavSelectorBaseNode;\n\n/**\n * Represent a category of entries which has been created by the product to separate different kind of entries (ex: social profiles, reports, ad accounts…)\n */\nexport type InternalNavSelectorCategory = {\n /** A Category can have leaves or groups as children, you can have leaves alongside with groups */\n children: (InternalNavSelectorGroup | InternalNavSelectorLeaf)[];\n /** Indicates whenever the category is folded or not */\n folded: boolean;\n /** Title of the empty state */\n emptyStateTitle?: string;\n /** Action of the empty state */\n emptyStateAction?: NavSelectorEmptyStateAction;\n\n /** Avatar configuration of the category */\n avatarDisplayed: boolean;\n avatarRounded: boolean;\n avatarSymbolId: agorapulseSymbol | null;\n avatarPictureUrl: string | undefined;\n avatarPictureUrlDisplayed: boolean;\n\n type: 'CATEGORY';\n} & InternalNavSelectorBaseNode;\n\n/**\n * Represent final entry of the nav selector\n */\nexport type InternalNavSelectorLeaf = {\n /** Indicates if the actions dropdown could be display. Should not be display if the leaf has an error status. */\n actionsDisplayable: boolean;\n /** Actions that can be performed on the leaf */\n actions: InternalNavSelectorLeafAction[];\n /** Picture url to display on the avatar, optional */\n pictureUrl: string | null;\n /** Indicates if the counter could be display. The leaf should not be disabled, feature locked or has token invalid */\n counterDisplayable: boolean;\n /** Indicates if the token invalid icon should be display. So when displayable when no details or folded */\n displayCounter: boolean;\n /** Counter value to display */\n counter: number;\n /** Indicates if the token invalid icon should be display */\n displayTokenInvalid: boolean;\n /** Indicates if the feature is locked */\n displayFeatureLocked: boolean;\n /** Indicates if and which icon should be displayed before the label */\n startSymbolId: agorapulseSymbol | null;\n /** Indicates if and what dot color should be displayed before the label */\n startDotColor: string | null;\n /** Indicates if the leaf is disabled */\n disabled: boolean;\n /** The disabled reason to display in tooltip */\n disableReason: string | null;\n /** Indicates if the leaf is selected */\n selected: boolean;\n /** Indicates if the leaf is selectable */\n selectable: boolean;\n /** For social profiles or ad accounts, the corresponding network */\n network: AvatarNetwork | null;\n /** Indicates if the leaf foldable. So when it has details and no error status */\n foldable: boolean;\n /** Indicates if the leaf is folded */\n folded: boolean;\n /** Indicates if the leaf has one of its details selected */\n detailSelected: boolean;\n /** Indicates if the leaf has details and they are displayable. So no error status */\n detailsDisplayable: boolean;\n /** Details of the leaf */\n details: InternalNavSelectorLeafDetails[];\n type: 'LEAF';\n /** Indicates if the view more section should be display for details */\n viewMoreDisplayable: boolean;\n /** Indicates if the view more or view less button is displayed */\n viewMoreDisplayed: boolean;\n /** Number of details to display when the view more is not clicked */\n viewMoreDetailsDisplayedLimit: number;\n} & InternalNavSelectorBaseNode;\n\n/**\n * Represent details of a leaf, they are used to allow to display more specific information about the leaf\n */\nexport type InternalNavSelectorLeafDetails = {\n /** Unique identifier of the node */\n uid: string;\n /** Counter to display on the detail */\n counter: number;\n /** Indicates if the counter should be display. So no error on the detail */\n displayCounter: boolean;\n /** Displayed name of the node */\n alias: string;\n /** Indicates if the detail is selected */\n selected: boolean;\n /** Indicates if we should display an error icon */\n displayError: boolean;\n /** Translated text to display in the tooltip */\n errorReason: string | null;\n type: 'LEAF_DETAILS';\n} & InternalNavSelectorBaseNode;\n\nexport type InternalNavSelectorEntry =\n | InternalNavSelectorLeaf\n | InternalNavSelectorGroup\n | InternalNavSelectorCategory\n | InternalNavSelectorLeafDetails;\n\nexport const isInternalNavSelectorEntryALeaf = (entry: InternalNavSelectorEntry): entry is InternalNavSelectorLeaf => entry.type === 'LEAF';\n\nexport const isInternalNavSelectorEntryANode = (\n entry: InternalNavSelectorEntry\n): entry is InternalNavSelectorCategory | InternalNavSelectorGroup => `children` in entry;\n\nexport const isInternalNavSelectorEntryACategory = (entry: InternalNavSelectorEntry): entry is InternalNavSelectorCategory =>\n entry.type === 'CATEGORY';\n\nexport const isInternalNavSelectorEntryAGroup = (entry: InternalNavSelectorEntry): entry is InternalNavSelectorGroup =>\n entry.type === 'GROUP';\n\nexport const isInternalNavSelectorEntryALeafDetails = (entry: InternalNavSelectorEntry): entry is InternalNavSelectorLeafDetails =>\n entry.type === 'LEAF_DETAILS';\n","import { afterEveryRender, Directive, ElementRef, input, Renderer2 } from '@angular/core';\nimport { InternalNavSelectorEntry } from '../nav-selector';\n\n@Directive({\n selector: '[apTreeNodeAccessibility]',\n standalone: true,\n})\nexport class TreeNodeAccessibilityDirective {\n apTreeNodeAccessibility = input.required<InternalNavSelectorEntry>();\n\n constructor(el: ElementRef, renderer: Renderer2) {\n afterEveryRender(() => {\n const nativeEl = el.nativeElement;\n const entry = this.apTreeNodeAccessibility();\n renderer.setAttribute(nativeEl, 'aria-level', `${entry.accessibility.ariaLevel}`);\n renderer.setAttribute(nativeEl, 'aria-setsize', `${entry.accessibility.ariaSetsize}`);\n renderer.setAttribute(nativeEl, 'aria-posinset', `${entry.accessibility.ariaPosinset}`);\n renderer.setAttribute(nativeEl, 'tabindex', `${entry.accessibility.tabIndex}`);\n renderer.setAttribute(nativeEl, 'aria-label', `${entry.alias}`);\n if ('folded' in entry) {\n renderer.setAttribute(nativeEl, 'aria-expanded', `${entry.folded}`);\n }\n renderer.setAttribute(nativeEl, 'role', 'treeitem');\n });\n }\n}\n","import { Directive, effect, ElementRef, input, Renderer2, untracked } from '@angular/core';\nimport { NavSelectorPopoverComponent } from '../nav-selector-popover/nav-selector-popover.component';\n\nexport type NavSelectorPopoverTriggerMode = {\n click: boolean;\n hover: boolean;\n focus: boolean;\n keyboard: ('Space' | 'Enter' | string)[];\n};\n\n@Directive({\n selector: '[apNavSelectorPopoverTrigger]',\n standalone: true,\n host: {\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)',\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n },\n})\nexport class NavSelectorPopoverTriggerDirective {\n apNavSelectorPopoverTrigger = input.required<NavSelectorPopoverComponent>();\n apNavSelectorPopoverTriggerMode = input<Partial<NavSelectorPopoverTriggerMode>>({\n click: true,\n keyboard: [],\n hover: false,\n focus: false,\n });\n apNavSelectorPopoverDisabled = input<boolean>(false);\n\n private readonly ACTIVE_CLASS = 'nav-selector-popover-trigger--active';\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2\n ) {\n effect(() => {\n const displayed = this.apNavSelectorPopoverTrigger().navSelectorPopoverDisplayed();\n untracked(() => {\n if (displayed) {\n this.renderer.addClass(this.el.nativeElement, this.ACTIVE_CLASS);\n } else {\n this.renderer.removeClass(this.el.nativeElement, this.ACTIVE_CLASS);\n }\n });\n });\n }\n\n onClick(event: Event) {\n if (!this.apNavSelectorPopoverTriggerMode().click || this.apNavSelectorPopoverDisabled()) {\n return;\n }\n event.stopImmediatePropagation();\n this.toggleDisplay();\n }\n\n onKeydown(event: KeyboardEvent) {\n if (this.apNavSelectorPopoverTriggerMode().keyboard?.includes(event.code) && !this.apNavSelectorPopoverDisabled()) {\n this.toggleDisplay();\n }\n }\n\n onMouseEnter() {\n if (this.apNavSelectorPopoverTriggerMode().hover && !this.apNavSelectorPopoverDisabled()) {\n this.apNavSelectorPopoverTrigger().display(this.el);\n }\n }\n\n onMouseLeave() {\n if (this.apNavSelectorPopoverTriggerMode().hover) {\n this.apNavSelectorPopoverTrigger().hide();\n }\n }\n\n private toggleDisplay() {\n this.apNavSelectorPopoverTrigger().toggle(this.el);\n }\n}\n","import {\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n InternalNavSelectorLeaf,\n InternalNavSelectorLeafDetails,\n isInternalNavSelectorEntryACategory,\n isInternalNavSelectorEntryAGroup,\n isInternalNavSelectorEntryALeaf,\n isInternalNavSelectorEntryALeafDetails,\n} from '../nav-selector';\n\n/**\n * NavSelectorAccessibility is a utility class that provides methods to manage the accessibility and the focusability of nav selector entries.\n */\nexport class NavSelectorAccessibility {\n /**\n * Set tabIndex to 0 for the first focusable entry and -1 for all other entries\n * @param entries nav selector entries\n */\n static resetFocus(entries: InternalNavSelectorEntry[]): InternalNavSelectorEntry[] {\n const flattenEntries = this.flatten(entries);\n\n let alreadyFocused = false;\n\n for (const entry of flattenEntries) {\n if (alreadyFocused) {\n entry.accessibility.tabIndex = -1;\n } else if (entry.focusable) {\n alreadyFocused = true;\n entry.accessibility.tabIndex = 0;\n } else {\n entry.accessibility.tabIndex = -1;\n }\n }\n\n return this.unflatten(flattenEntries);\n }\n\n /**\n * Focus the given entry and set tabIndex to 0 for the given uid and -1 for all other entries\n * @param entries nav selector entries\n * @param uid the uid of the entry to focus\n */\n static focus<T extends InternalNavSelectorEntry>(entries: T[], uid: string): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryAGroup(entry) || isInternalNavSelectorEntryACategory(entry)) {\n return {\n ...this.focusAnEntry(entry, uid),\n children: NavSelectorAccessibility.focus(entry.children, uid),\n } as InternalNavSelectorGroup;\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return {\n ...this.focusAnEntry(entry, uid),\n details: entry.details.map(detail => this.focusAnEntry(detail, uid)),\n } as InternalNavSelectorLeaf;\n }\n return this.focusAnEntry(entry, uid);\n });\n }\n\n /**\n * Unfocus the given entry and set tabIndex to -1 for the given uid and 0 for all other entries\n * @param entries nav selector entries\n * @param uid the uid of the entry to unfocus\n */\n static unfocus(entries: InternalNavSelectorEntry[], uid: string): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryAGroup(entry) || isInternalNavSelectorEntryACategory(entry)) {\n return {\n ...this.unfocusAnEntry(entry, uid),\n children: NavSelectorAccessibility.unfocus(entry.children, uid),\n } as InternalNavSelectorGroup;\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return {\n ...this.unfocusAnEntry(entry, uid),\n details: entry.details.map(detail => this.unfocusAnEntry(detail, uid)),\n } as InternalNavSelectorLeaf;\n }\n return this.unfocusAnEntry(entry, uid);\n });\n }\n\n /**\n * Focus the previous entry focusable and set tabIndex to 0 for the previous focusable entry and -1 for all other entries\n *\n * If not previous entries are focusable, entries will not be modified\n *\n * @param entries nav selector entries\n */\n static focusPrevious<T extends InternalNavSelectorEntry>(entries: T[]): InternalNavSelectorEntry[] {\n const flattenEntries = this.flatten(entries);\n\n const idxFocusedId = flattenEntries.findIndex(({ accessibility }) => accessibility.tabIndex === 0);\n\n if (idxFocusedId === 0 || this.noPreviousEntryFocusable(flattenEntries, idxFocusedId)) {\n return entries;\n }\n\n const focusedEntry = flattenEntries[idxFocusedId];\n focusedEntry.accessibility.tabIndex = -1;\n\n for (let i = idxFocusedId - 1; i >= 0; i--) {\n const entry = flattenEntries[i];\n if (entry.focusable) {\n entry.accessibility.tabIndex = 0;\n break;\n }\n }\n\n return this.unflatten(flattenEntries);\n }\n\n /**\n * Focus the next entry focusable and set tabIndex to 0 for the next focusable entry and -1 for all other entries\n *\n * If not next entries are focusable, entries will not be modified\n *\n * @param entries nav selector entries\n */\n static focusNext<T extends InternalNavSelectorEntry>(entries: T[]): InternalNavSelectorEntry[] {\n const flattenEntries = this.flatten(entries);\n\n const focusableFlattenEntries = flattenEntries.filter(entry => entry.focusable);\n\n const idxFocusedId = focusableFlattenEntries.findIndex(({ accessibility }) => accessibility.tabIndex === 0);\n\n if (focusableFlattenEntries.length - 1 <= idxFocusedId) {\n return entries;\n }\n\n focusableFlattenEntries[idxFocusedId].accessibility.tabIndex = -1;\n\n focusableFlattenEntries[idxFocusedId + 1].accessibility.tabIndex = 0;\n\n return this.unflatten(flattenEntries);\n }\n\n private static noPreviousEntryFocusable(flattenEntries: InternalNavSelectorEntry[], idxFocusedId: number): boolean {\n for (let i = idxFocusedId - 1; i >= 0; i--) {\n const entry = flattenEntries[i];\n if (entry.focusable) {\n return false;\n }\n }\n\n return true;\n }\n\n private static focusAnEntry(entry: InternalNavSelectorEntry, uid: string): InternalNavSelectorEntry {\n return { ...entry, accessibility: { ...entry.accessibility, tabIndex: entry.uid === uid ? 0 : -1 } };\n }\n\n private static unfocusAnEntry(entry: InternalNavSelectorEntry, uid: string): InternalNavSelectorEntry {\n return { ...entry, accessibility: { ...entry.accessibility, tabIndex: entry.uid === uid ? -1 : entry.accessibility.tabIndex } };\n }\n\n /**\n * Flatten the nav selector entries. It is easier to work with flat entries for the focus management as we need to know which is the previous or the next entry\n * @param entries nav selector entries\n */\n private static flatten(entries: InternalNavSelectorEntry[]): InternalNavSelectorEntry[] {\n return entries.flatMap(entry => {\n if (isInternalNavSelectorEntryAGroup(entry) || isInternalNavSelectorEntryACategory(entry)) {\n return [{ ...entry, children: [] }, ...this.flatten(entry.children)];\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return [{ ...entry, details: [] }, ...entry.details.map(detail => ({ ...detail }))];\n }\n return [{ ...entry }];\n });\n }\n\n /**\n * Unflatten the nav selector entries\n * @param entries nav selector entries\n */\n private static unflatten<T extends InternalNavSelectorEntry>(entries: T[]): InternalNavSelectorEntry[] {\n return entries.reduceRight((acc, entry) => {\n if (!acc.length) {\n return [entry];\n }\n if (entry.accessibility.ariaLevel < acc[0].accessibility.ariaLevel) {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return [\n {\n ...entry,\n details: acc\n .filter(it => isInternalNavSelectorEntryALeafDetails(it))\n // Force destroying the reference to the original object else Angular will not detect the change\n .map(it => ({ ...it })) as InternalNavSelectorLeafDetails[],\n },\n ...acc.filter(it => !isInternalNavSelectorEntryALeafDetails(it)),\n ];\n } else if (isInternalNavSelectorEntryAGroup(entry) || isInternalNavSelectorEntryACategory(entry)) {\n return [\n {\n ...entry,\n children: acc.filter(\n ({ accessibility }) => accessibility.ariaLevel > entry.accessibility.ariaLevel\n ) as InternalNavSelectorLeaf[],\n },\n ...acc.filter(({ accessibility }) => accessibility.ariaLevel <= entry.accessibility.ariaLevel),\n ];\n }\n }\n return [entry, ...acc];\n }, [] as InternalNavSelectorEntry[]);\n }\n}\n","import {\n InternalNavSelectorCategory,\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n InternalNavSelectorLeaf,\n isInternalNavSelectorEntryAGroup,\n isInternalNavSelectorEntryALeaf,\n isInternalNavSelectorEntryANode,\n} from '../nav-selector';\n\n/**\n * Utility type to extract keys of an object that are of type string, number or symbol which are the only type allowed in a Record\n */\ntype AllowedKey<T> = Pick<T, { [K in keyof T]: T[K] extends string | number | symbol ? K : never }[keyof T]>;\n\n/**\n * Create a Record of key/value pairs from an array of objects\n * @param array\n * @param key attribute of the object to use as key\n */\nexport const associateBy = <T>(array: T[], key: keyof AllowedKey<T>): Record<string, T> =>\n array.reduce(\n (previousValue, currentValue) => {\n previousValue[`${currentValue[key]}`] = currentValue;\n return previousValue;\n },\n {} as Record<string, T>\n );\n\nexport const isInternalNavSelectorEntryALeafFocusable = (\n leaf: InternalNavSelectorLeaf,\n { parentFolded, multipleMode }: { parentFolded: boolean; multipleMode: boolean }\n): boolean => {\n if (parentFolded) {\n return false;\n }\n if (multipleMode) {\n return !leaf.disabled && !leaf.displayTokenInvalid && !leaf.displayFeatureLocked;\n }\n return !leaf.disabled;\n};\n\nexport const computeFolded = (\n entry: InternalNavSelectorGroup | InternalNavSelectorCategory,\n children: InternalNavSelectorEntry[]\n): boolean => {\n // If the entry is not folded, we keep it unfolded\n if (!entry.folded) {\n return false;\n }\n return !children.some(\n child =>\n (isInternalNavSelectorEntryALeaf(child) && (child.selected || !child.folded)) ||\n (isInternalNavSelectorEntryANode(child) && !child.folded) ||\n (isInternalNavSelectorEntryAGroup(child) && child.undeterminedSelection)\n );\n};\n\nexport const computeNumberOfDisplayableChildrenOnUnfold = (entry: InternalNavSelectorEntry): number => {\n if (isInternalNavSelectorEntryANode(entry)) {\n const nbChildren = entry.children.length;\n const nbDisplayableChildrenOfUnfoldedChild = entry.children\n .filter(child => !child.folded)\n .reduce((acc, child) => {\n return acc + computeNumberOfDisplayableChildrenOnUnfold(child);\n }, 0);\n return nbDisplayableChildrenOfUnfoldedChild + nbChildren;\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return entry.details.length;\n }\n return 0;\n};\n\nexport const computeSelectableUids = (entries: InternalNavSelectorEntry[]): string[] => {\n return entries.flatMap(entry => computeSelectableUidsByEntry(entry));\n};\n\nexport const computeSelectableUidsByEntry = (entry: InternalNavSelectorEntry): string[] => {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n // Disabled leafs can now be selected programmatically\n return [entry.uid, ...entry.details.filter(detail => !detail.hidden).map(detail => detail.uid)];\n }\n if (isInternalNavSelectorEntryANode(entry)) {\n return [entry.uid, ...entry.children.flatMap(child => computeSelectableUidsByEntry(child))];\n }\n return [];\n};\n\nexport const computeVisibleUids = (entries: InternalNavSelectorEntry[]): string[] => {\n return entries.flatMap(entry => computeVisibleUidsByEntry(entry));\n};\n\nexport const computeVisibleUidsByEntry = (entry: InternalNavSelectorEntry): string[] => {\n if (entry.hidden) {\n return [];\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return [entry.uid, ...entry.details.filter(detail => !detail.hidden).map(detail => detail.uid)];\n }\n if (isInternalNavSelectorEntryANode(entry)) {\n return entry.children.flatMap(child => computeVisibleUidsByEntry(child));\n }\n // Fallback for unexpected entry types (should never be reached)\n return [];\n};\n","import {\n InternalNavSelectorCategory,\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n InternalNavSelectorLeaf,\n isInternalNavSelectorEntryACategory,\n isInternalNavSelectorEntryAGroup,\n isInternalNavSelectorEntryALeaf,\n} from '../nav-selector';\nimport { isInternalNavSelectorEntryALeafFocusable } from '../utils/leaf.utils';\n\n/**\n * Options for folding operations\n */\nexport interface NavSelectorFoldingOptions {\n /** To update the focusable state of leaves and details correctly */\n multipleMode: boolean;\n /** True if the nav selector is minified. Needed for leaf as they are not foldable in minified mode */\n minified: boolean;\n}\n\n/**\n * Class to handle the folding and unfolding of nav selector entries.\n */\nexport class NavSelectorFolding {\n /**\n * Unfolds all parents of the entry with the given uid until the root.\n * @param entries nav selector entries\n * @param entryUid the entry uid to unfold parents for\n * @param options options for folding operations\n */\n static unfoldParents<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions\n ): InternalNavSelectorEntry[] {\n return this.unfoldParentsOfEntry(entries, entryUid, options).entries;\n }\n\n /**\n * Toggle the folding state of an entry.\n *\n * @see {@link NavSelectorFolding.fold} and {@link NavSelectorFolding.unfold} for more information on folding and unfolding.\n *\n * @param entries nav selector entries\n * @param entryUid the entry uid to toggle\n * @param options options for folding operations\n */\n static toggleFolding<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions\n ): InternalNavSelectorEntry[] {\n return this.toggleEntryFolding(entries, entryUid, options);\n }\n\n /**\n * Fold an entry.\n *\n * Set unfocusable on all children of the folded entry.\n * Compute whenever the counter and token invalid should be displayed on groups and leaves.\n *\n * @param entries nav selector entries\n * @param entryUid the entry uid to fold\n * @param options options for folding operations\n */\n static fold<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions\n ): InternalNavSelectorEntry[] {\n return this.foldEntry(entries, entryUid, options);\n }\n\n /**\n * Unfold an entry.\n *\n * Set focusable on all children of the folded entry.\n * Compute whenever the counter and token invalid should be displayed on groups and leaves.\n *\n * @param entries nav selector entries\n * @param entryUid the entry uid to unfold\n * @param options options for folding operations\n */\n static unfold<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions\n ): InternalNavSelectorEntry[] {\n return this.unfoldEntry(entries, entryUid, options);\n }\n\n private static toggleEntryFolding<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions,\n parentFolded = false\n ): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryACategory(entry)) {\n if (entry.uid === entryUid) {\n const folded = !entry.folded;\n if (folded) {\n return this.foldCategory(entry, options);\n } else {\n return this.unfoldCategory(entry, options);\n }\n }\n return {\n ...entry,\n children: this.toggleEntryFolding(entry.children, entryUid, options, entry.folded),\n };\n }\n if (isInternalNavSelectorEntryAGroup(entry)) {\n if (entry.uid === entryUid) {\n const folded = !entry.folded;\n if (folded) {\n return this.foldGroup(entry, options);\n } else {\n return this.unfoldGroup(entry, options);\n }\n }\n return {\n ...entry,\n children: this.toggleEntryFolding(entry.children, entryUid, options, parentFolded || entry.folded),\n };\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n if (entry.uid === entryUid) {\n const folded = !entry.folded;\n if (folded) {\n return this.foldLeaf(entry, options.minified);\n } else {\n return this.unfoldLeaf(entry, options.minified);\n }\n }\n return {\n ...entry,\n focusable: isInternalNavSelectorEntryALeafFocusable(entry, { parentFolded, multipleMode: options.multipleMode }),\n };\n }\n return { ...entry, focusable: !parentFolded };\n });\n }\n\n private static foldEntry<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions,\n parentFolded = false\n ): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryACategory(entry)) {\n if (entry.uid === entryUid) {\n return this.foldCategory(entry, options);\n }\n return {\n ...entry,\n children: this.foldEntry(entry.children, entryUid, options, entry.folded),\n };\n }\n if (isInternalNavSelectorEntryAGroup(entry)) {\n if (entry.uid === entryUid) {\n return this.foldGroup(entry, options);\n }\n return {\n ...entry,\n focusable: !parentFolded,\n children: this.foldEntry(entry.children, entryUid, options, parentFolded || entry.folded),\n };\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n if (entry.uid === entryUid) {\n return this.foldLeaf(entry, options.minified);\n }\n return {\n ...entry,\n focusable: isInternalNavSelectorEntryALeafFocusable(entry, { parentFolded, multipleMode: options.multipleMode }),\n };\n }\n return { ...entry, focusable: !parentFolded };\n });\n }\n\n private static unfoldEntry<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions,\n parentFolded = false\n ): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryACategory(entry)) {\n if (entry.uid === entryUid) {\n return this.unfoldCategory(entry, options);\n }\n return {\n ...entry,\n children: this.unfoldEntry(entry.children, entryUid, options, entry.folded),\n };\n }\n if (isInternalNavSelectorEntryAGroup(entry)) {\n if (entry.uid === entryUid) {\n return this.unfoldGroup(entry, options);\n }\n return {\n ...entry,\n children: this.unfoldEntry(entry.children, entryUid, options, parentFolded || entry.folded),\n focusable: !parentFolded,\n };\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n if (entry.uid === entryUid) {\n return this.unfoldLeaf(entry, options.minified);\n }\n return {\n ...entry,\n focusable: isInternalNavSelectorEntryALeafFocusable(entry, { parentFolded, multipleMode: options.multipleMode }),\n };\n }\n return { ...entry, focusable: !parentFolded };\n });\n }\n\n private static foldCategory(category: InternalNavSelectorCategory, options: NavSelectorFoldingOptions): InternalNavSelectorCategory {\n return {\n ...category,\n folded: true,\n children: this.foldEntry(category.children, category.uid, options, true) as (\n | InternalNavSelectorLeaf\n | InternalNavSelectorGroup\n )[],\n };\n }\n\n private static unfoldCategory(category: InternalNavSelectorCategory, options: NavSelectorFoldingOptions): InternalNavSelectorCategory {\n return {\n ...category,\n folded: false,\n children: this.unfoldEntry(category.children, category.uid, options, false) as (\n | InternalNavSelectorLeaf\n | InternalNavSelectorGroup\n )[],\n };\n }\n\n private static foldGroup(group: InternalNavSelectorGroup, options: NavSelectorFoldingOptions): InternalNavSelectorGroup {\n return {\n ...group,\n folded: true,\n children: this.foldEntry(group.children, group.uid, options, true) as InternalNavSelectorLeaf[],\n displayCounter: !!group.counter,\n displayTokenInvalid: group.children.some(({ displayTokenInvalid }) => displayTokenInvalid),\n };\n }\n\n private static unfoldGroup(group: InternalNavSelectorGroup, options: NavSelectorFoldingOptions): InternalNavSelectorGroup {\n return {\n ...group,\n folded: false,\n children: this.unfoldEntry(group.children, group.uid, options, false) as InternalNavSelectorLeaf[],\n displayCounter: false,\n displayTokenInvalid: false,\n };\n }\n\n private static foldLeaf(leaf: InternalNavSelectorLeaf, minified: boolean): InternalNavSelectorLeaf {\n if (!leaf.foldable || minified) {\n return leaf;\n }\n return {\n ...leaf,\n displayCounter: leaf.counterDisplayable,\n folded: true,\n details: leaf.details.map(detail => ({ ...detail, focusable: false })),\n };\n }\n\n private static unfoldLeaf(leaf: InternalNavSelectorLeaf, minified: boolean): InternalNavSelectorLeaf {\n if (!leaf.foldable || minified) {\n return leaf;\n }\n return {\n ...leaf,\n displayCounter: false,\n folded: false,\n details: leaf.details.map((detail, idx) => ({\n ...detail,\n focusable: idx < leaf.viewMoreDetailsDisplayedLimit && !detail.displayError,\n })),\n };\n }\n\n /**\n * Unfolds all parents of the entry with the given uid until the root.\n * @param entries nav selector entries\n * @param entryUid the entry uid to unfold parents for\n * @param options options for folding operations\n */\n static unfoldParentsOfEntry<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions\n ): { found: boolean; entries: InternalNavSelectorEntry[] } {\n let found = false;\n const newEntries = entries.map(entry => {\n if (isInternalNavSelectorEntryACategory(entry)) {\n const entryFound = entry.children.some(({ uid }) => uid === entryUid);\n if (entryFound) {\n found = true;\n return this.unfoldCategory(entry, options);\n }\n const result = this.unfoldParentsOfEntry(entry.children, entryUid, options);\n found ||= result.found;\n if (result.found) {\n return {\n ...entry,\n children: result.entries,\n folded: false,\n focusable: true,\n };\n }\n } else if (isInternalNavSelectorEntryAGroup(entry)) {\n const entryFound = entry.children.some(({ uid }) => uid === entryUid);\n if (entryFound) {\n found = true;\n return { ...this.unfoldGroup(entry, options), focusable: true };\n }\n const result = this.unfoldParentsOfEntry(entry.children, entryUid, options);\n found ||= result.found;\n if (result.found) {\n return {\n ...entry,\n children: result.entries,\n folded: false,\n displayCounter: false,\n displayTokenInvalid: false,\n focusable: true,\n };\n }\n } else if (isInternalNavSelectorEntryALeaf(entry)) {\n const entryFound = entry.details.some(({ uid }) => uid === entryUid);\n if (entryFound) {\n found = true;\n return { ...this.unfoldLeaf(entry, options.minified), focusable: true };\n }\n }\n return entry;\n });\n return { found, entries: newEntries };\n }\n}\n","import {\n InternalNavSelectorEntry,\n InternalNavSelectorLeaf,\n InternalNavSelectorLeafDetails,\n isInternalNavSelectorEntryALeaf,\n isInternalNavSelectorEntryANode,\n} from '../nav-selector';\n\n/**\n * NavSelectorSingleSelect is a utility class that provides methods to select a single entry in a nav selector.\n */\nexport class NavSelectorSingleSelect {\n /**\n * Selects a single entry in the nav selector.\n * @param entries nav selector entries\n * @param entryUid the entry uid to select\n */\n static select<T extends InternalNavSelectorEntry>(entries: T[], entryUid: string): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return this.selectALeaf(entry, entryUid);\n } else if (isInternalNavSelectorEntryANode(entry)) {\n return {\n ...entry,\n children: entry.children.flatMap(child => this.select([child], entryUid)),\n };\n }\n return entry;\n });\n }\n\n private static selectALeaf(leaf: InternalNavSelectorLeaf, entryUid: string): InternalNavSelectorLeaf {\n if (!!leaf.details.length) {\n return this.selectALeafWithDetails(leaf, entryUid);\n }\n return this.selectALeafWithoutDetails(leaf, entryUid);\n }\n\n private static selectALeafWithDetails(leaf: InternalNavSelectorLeaf, entryUid: string): InternalNavSelectorLeaf {\n if (leaf.uid === entryUid) {\n if (!leaf.detailsDisplayable) {\n return this.selectALeafWitDetailsNotDisplayable(leaf);\n }\n\n return this.selectALeafWithDisplayableDetails(leaf);\n }\n const details = leaf.details.map(detail => {\n const detailSelected = detail.uid === entryUid && !detail.displayError;\n return {\n ...detail,\n selected: detailSelected,\n accessibility: {\n ...detail.accessibility,\n tabIndex: detailSelected ? 0 : -1,\n },\n };\n });\n\n return {\n ...leaf,\n accessibility: {\n ...leaf.accessibility,\n tabIndex: -1,\n },\n selected: false,\n folded: !leaf.folded ? false : details.every(detail => !detail.selected),\n detailSelected: details.some(detail => detail.selected),\n details,\n };\n }\n\n private static selectALeafWitDetailsNotDisplayable(leaf: InternalNavSelectorLeaf): InternalNavSelectorLeaf {\n const selected = leaf.selectable;\n return {\n ...leaf,\n selected,\n accessibility: {\n ...leaf.accessibility,\n tabIndex: selected ? 0 : -1,\n },\n folded: !leaf.detailsDisplayable,\n };\n }\n\n private static selectALeafWithDisplayableDetails(leaf: InternalNavSelectorLeaf): InternalNavSelectorLeaf {\n const details = leaf.details.reduce(\n ({ previousDetailSelected, details }, detail, idx) => {\n const detailSelected =\n !previousDetailSelected && leaf.detailsDisplayable && !detail.displayError && (idx === 0 || !details[idx - 1].selected);\n details.push({\n ...detail,\n selected: detailSelected,\n focusable: true,\n accessibility: {\n ...detail.accessibility,\n tabIndex: detailSelected ? 0 : -1,\n },\n });\n return { previousDetailSelected: previousDetailSelected || detailSelected, details };\n },\n { previousDetailSelected: false, details: [] as InternalNavSelectorLeafDetails[] }\n ).details;\n return {\n ...leaf,\n selected: false,\n accessibility: {\n ...leaf.accessibility,\n tabIndex: -1,\n },\n displayCounter: false,\n folded: !leaf.detailsDisplayable,\n detailSelected: details.some(detail => detail.selected),\n details,\n };\n }\n\n private static selectALeafWithoutDetails(leaf: InternalNavSelectorLeaf, entryUid: string): InternalNavSelectorLeaf {\n const selected = leaf.selectable && leaf.uid === entryUid;\n return {\n ...leaf,\n selected,\n accessibility: {\n ...leaf.accessibility,\n tabIndex: selected ? 0 : -1,\n },\n folded: true,\n };\n }\n}\n","import {\n InternalNavSelectorCategory,\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n InternalNavSelectorLeaf,\n InternalNavSelectorLeafDetails,\n isInternalNavSelectorEntryACategory,\n isInternalNavSelectorEntryAGroup,\n isInternalNavSelectorEntryALeaf,\n isNavSelectorEntryACategory,\n isNavSelectorEntryAGroup,\n isNavSelectorEntryALeaf,\n NavSelectorCategory,\n NavSelectorCategoryAvatar,\n NavSelectorEntry,\n NavSelectorGroup,\n NavSelectorLeaf,\n NavSelectorLeafDetails,\n} from '../nav-selector';\nimport { computeSelectableUids } from '../utils/leaf.utils';\nimport { NavSelectorAccessibility } from '../utils/nav-selector.accessibility';\nimport { NavSelectorFolding } from '../utils/nav-selector.folding';\nimport { NavSelectorSingleSelect } from './nav-selector.single-select';\n\nconst LeafLogics = {\n DISABLED: 'DISABLED',\n FEATURE_LOCKED: 'FEATURE_LOCKED',\n TOKEN_INVALID: 'TOKEN_INVALID',\n COUNTER: 'COUNTER',\n} as const;\ntype LeafLogics = keyof typeof LeafLogics;\n\n/**\n * NavSelectorBuilder is a utility class that builds the NavSelector entries for single and multiple select modes.\n * It also checks the structure of the entries to ensure they are valid.\n */\nexport class NavSelectorBuilder {\n // /!\\/!\\ Order of logics is important /!\\/!\\\n private static LEAF_LOGICS_PRIORITY: Record<LeafLogics, (lef: NavSelectorLeaf) => boolean> = {\n [LeafLogics.DISABLED]: (leaf: NavSelectorLeaf) => leaf.disableReason !== null,\n [LeafLogics.FEATURE_LOCKED]: (leaf: NavSelectorLeaf) => leaf.featureLocked,\n [LeafLogics.TOKEN_INVALID]: (leaf: NavSelectorLeaf) => leaf.tokenInvalid,\n [LeafLogics.COUNTER]: (leaf: NavSelectorLeaf) => leaf.counter !== null,\n };\n\n /**\n * Builds the NavSelector entries for single select mode.\n * @param entries nav selector entries\n * @param selectedEntryUid selected entry uid\n * @param detailsDisplayedLimit number of details displayed limit\n */\n static build(entries: NavSelectorEntry[], selectedEntryUid: string | null, detailsDisplayedLimit: number): InternalNavSelectorEntry[] {\n this.structureChecker(entries);\n let builtEntries = this.buildEntries(entries, false, 1, detailsDisplayedLimit);\n if (selectedEntryUid) {\n builtEntries = NavSelectorSingleSelect.select(builtEntries, selectedEntryUid);\n builtEntries = NavSelectorFolding.unfoldParents(builtEntries, selectedEntryUid, { multipleMode: false, minified: false });\n }\n return builtEntries;\n }\n\n /**\n * Builds the NavSelector entries for multiple select mode.\n * @param entries nav selector entries\n * @param selectedEntryUids selected entry uids\n * @param detailsDisplayedLimit number of details displayed limit\n */\n static buildInMultipleMode(\n entries: NavSelectorEntry[],\n selectedEntryUids: string[] | null,\n detailsDisplayedLimit: number\n ): InternalNavSelectorEntry[] {\n this.structureChecker(entries, true);\n let builtEntries = this.buildEntries(entries, true, 1, detailsDisplayedLimit);\n if (selectedEntryUids) {\n // Filter out group/category uids - only leafs and leaf details should be selectable\n const selectableUids = computeSelectableUids(builtEntries);\n const validSelectedUids = selectedEntryUids.filter(uid => selectableUids.includes(uid));\n\n // Building entries with allowed selection of disabled items\n builtEntries = this.setInitialSelection(builtEntries, validSelectedUids);\n\n // Unfold parents for all selected items\n for (const selectedEntryUid of validSelectedUids) {\n builtEntries = NavSelectorFolding.unfoldParents(builtEntries, selectedEntryUid, { multipleMode: false, minified: false });\n }\n }\n return builtEntries;\n }\n\n private static structureChecker(entries: NavSelectorEntry[], multipleModeEnabled = false): void {\n entries.forEach(entry => {\n if (isNavSelectorEntryAGroup(entry) || isNavSelectorEntryACategory(entry)) {\n this.structureChecker(entry.children, multipleModeEnabled);\n } else if (isNavSelectorEntryALeaf(entry)) {\n if (entry.details.length && multipleModeEnabled) {\n console.error(`NavSelectorBuilder: Leaf ${entry.uid} with details is not allowed in multiple mode`);\n }\n }\n });\n }\n\n private static buildEntries(\n entries: NavSelectorEntry[],\n multipleModeEnabled: boolean,\n level = 1,\n detailsDisplayedLimit: number\n ): InternalNavSelectorEntry[] {\n const newEntries = entries\n .map((entry, idx) =>\n this.buildEntry(entry, { multipleModeEnabled, level, idx, totalNumberOfEntry: entries.length, detailsDisplayedLimit })\n )\n .filter(it => it !== null);\n return NavSelectorAccessibility.resetFocus(newEntries);\n }\n\n private static buildEntry(\n entry: NavSelectorEntry,\n {\n multipleModeEnabled,\n level,\n idx,\n totalNumberOfEntry,\n detailsDisplayedLimit,\n }: { multipleModeEnabled: boolean; level: number; idx: number; totalNumberOfEntry: number; detailsDisplayedLimit: number }\n ): InternalNavSelectorEntry | null {\n if (isNavSelectorEntryALeaf(entry)) {\n return this.buildLeaf(entry, {\n multipleModeEnabled,\n level,\n idx,\n totalNumberOfLeaf: totalNumberOfEntry,\n focusable: true,\n detailsDisplayedLimit,\n });\n } else if (isNavSelectorEntryACategory(entry)) {\n return this.buildCategory(entry, {\n multipleModeEnabled,\n level,\n idx,\n totalNumberOfCategory: totalNumberOfEntry,\n detailsDisplayedLimit,\n });\n } else {\n return this.buildGroup(entry, {\n multipleModeEnabled,\n level,\n idx,\n totalNumberOfGroups: totalNumberOfEntry,\n focusable: true,\n detailsDisplayedLimit,\n });\n }\n }\n\n private static buildCategoryChildren(\n entry: NavSelectorCategory,\n {\n focusable,\n multipleModeEnabled,\n categoryLevel,\n detailsDisplayedLimit,\n }: {\n focusable: boolean;\n multipleModeEnabled: boolean;\n categoryLevel: number;\n detailsDisplayedLimit: number;\n }\n ): (InternalNavSelectorGroup | InternalNavSelectorLeaf)[] {\n return entry.children\n .map((child, idx) => {\n if (isNavSelectorEntryALeaf(child)) {\n return this.buildLeaf(child, {\n focusable,\n multipleModeEnabled,\n level: categoryLevel + 1,\n idx,\n totalNumberOfLeaf: entry.children.length,\n detailsDisplayedLimit,\n });\n } else {\n return this.buildGroup(child, {\n focusable,\n multipleModeEnabled,\n level: categoryLevel + 1,\n idx,\n totalNumberOfGroups: entry.children.length,\n detailsDisplayedLimit,\n });\n }\n })\n .filter(it => it !== null);\n }\n\n private static buildCategory(\n node: NavSelectorCategory,\n {\n multipleModeEnabled,\n level,\n idx,\n totalNumberOfCategory,\n detailsDisplayedLimit,\n }: {\n multipleModeEnabled: boolean;\n level: number;\n idx: number;\n totalNumberOfCategory: number;\n detailsDisplayedLimit: number;\n }\n ): InternalNavSelectorCategory {\n const children = this.buildCategoryChildren(node, {\n focusable: !node.folded,\n multipleModeEnabled,\n categoryLevel: level,\n detailsDisplayedLimit,\n });\n\n return {\n uid: node.uid,\n alias: node.alias,\n children,\n hidden: false,\n focusable: true,\n accessibility: {\n tabIndex: -1,\n ariaLevel: level,\n ariaPosinset: idx + 1,\n ariaSetsize: totalNumberOfCategory,\n },\n folded: node.folded,\n emptyStateTitle: node.emptyStateTitle,\n emptyStateAction: node.emptyStateAction,\n ...this.buildCategoryAvatar(node.avatar),\n type: node.type,\n };\n }\n\n private static buildCategoryAvatar(\n categoryAvatar: NavSelectorCategoryAvatar | undefined\n ): Pick<\n InternalNavSelectorCategory,\n 'avatarDisplayed' | 'avatarSymbolId' | 'avatarPictureUrl' | 'avatarRounded' | 'avatarPictureUrlDisplayed'\n > {\n if (!categoryAvatar) {\n return {\n avatarDisplayed: false,\n avatarSymbolId: null,\n avatarPictureUrl: undefined,\n avatarRounded: false,\n avatarPictureUrlDisplayed: false,\n };\n }\n\n if ('pictureUrl' in categoryAvatar) {\n return {\n avatarDisplayed: true,\n avatarSymbolId: null,\n avatarPictureUrl: categoryAvatar.pictureUrl ? categoryAvatar.pictureUrl : undefined,\n avatarRounded: categoryAvatar.rounded,\n avatarPictureUrlDisplayed: true,\n };\n }\n\n return {\n avatarDisplayed: true,\n avatarSymbolId: categoryAvatar.symbolId,\n avatarPictureUrl: undefined,\n avatarRounded: false,\n avatarPictureUrlDisplayed: false,\n };\n }\n\n private static buildGroupChildren(\n entry: NavSelectorGroup,\n {\n multipleModeEnabled,\n groupLevel,\n focusable,\n detailsDisplayedLimit,\n }: { multipleModeEnabled: boolean; groupLevel: number; focusable: boolean; detailsDisplayedLimit: number }\n ): InternalNavSelectorLeaf[] {\n return entry.children\n .map((child, idx) =>\n this.buildLeaf(child, {\n multipleModeEnabled,\n level: groupLevel + 1,\n idx,\n totalNumberOfLeaf: entry.children.length,\n focusable: focusable && !entry.folded,\n detailsDisplayedLimit,\n })\n )\n .filter(it => it !== null);\n }\n\n private static buildGroup(\n node: NavSelectorGroup,\n {\n focusable,\n multipleModeEnabled,\n level,\n idx,\n totalNumberOfGroups,\n detailsDisplayedLimit,\n }: {\n focusable: boolean;\n multipleModeEnabled: boolean;\n level: number;\n idx: number;\n totalNumberOfGroups: number;\n detailsDisplayedLimit: number;\n }\n ): InternalNavSelectorGroup | null {\n const children = this.buildGroupChildren(node, { multipleModeEnabled, groupLevel: level, focusable, detailsDisplayedLimit });\n\n if (!children.length) {\n return null;\n }\n\n const displayTokenInvalid = children.some(({ displayTokenInvalid }) => displayTokenInvalid);\n\n const selectedChildrenCount = children.filter(({ selected }) => selected).length;\n // A group is selected if all children are either selected or not selectable\n // (disabled children must still be selected to count)\n const selected = children.every(c => c.selected || !c.selectable);\n\n return {\n uid: node.uid,\n alias: node.alias,\n children,\n childrenPictureUrlSample: children\n .map((child, idx) =>\n isInternalNavSelectorEntryALeaf(child) && idx < 4 ? { url: child.pictureUrl, initial: child.alias[0] } : null\n )\n .filter(it => it !== null),\n hidden: false,\n accessibility: {\n tabIndex: -1,\n ariaPosinset: idx + 1,\n ariaLevel: level,\n ariaSetsize: totalNumberOfGroups,\n },\n focusable,\n displayCounter: node.folded && children.some(child => isInternalNavSelectorEntryALeaf(child) && child.counter !== 0),\n counter: children.reduce((acc, { counter }) => acc + counter, 0),\n displayTokenInvalid,\n selected,\n selectable: multipleModeEnabled && children.some(child => child.selectable && !child.disabled),\n undeterminedSelection: !selected && selectedChildrenCount > 0,\n folded: node.folded,\n type: node.type,\n };\n }\n\n private static buildLeaf(\n leaf: NavSelectorLeaf,\n {\n focusable,\n multipleModeEnabled,\n level,\n idx,\n totalNumberOfLeaf,\n detailsDisplayedLimit,\n }: {\n focusable: boolean;\n multipleModeEnabled: boolean;\n level: number;\n idx: number;\n totalNumberOfLeaf: number;\n detailsDisplayedLimit: number;\n }\n ): InternalNavSelectorLeaf | null {\n if (leaf.missingPermission) {\n return null;\n }\n\n const detailsDisplayable = this.isLeafLogicValid(leaf, LeafLogics.COUNTER) && !!leaf.details.length;\n const foldable = !!leaf.details.length && detailsDisplayable;\n const folded = true;\n const counter =\n (leaf.details.filter(detail => !detail.excludedCounterSum).reduce((acc, detail) => acc + (detail.counter ?? 0), 0) ||\n leaf.counter) ??\n 0;\n const counterDisplayable = counter !== 0 && this.isLeafLogicValid(leaf, LeafLogics.COUNTER);\n\n const disabled = leaf.disableReason !== null;\n\n const viewMoreDisplayable = leaf.details.length > detailsDisplayedLimit;\n\n return {\n uid: leaf.uid,\n alias: leaf.alias,\n actions: leaf.actions,\n pictureUrl: leaf.pictureUrl,\n actionsDisplayable: !!leaf.actions.length && this.isLeafLogicValid(leaf, LeafLogics.COUNTER),\n disabled,\n disableReason: leaf.disableReason,\n hidden: false,\n focusable:\n focusable &&\n ((multipleModeEnabled && this.isLeafLogicValid(leaf, LeafLogics.COUNTER)) || (!multipleModeEnabled && !disabled)),\n accessibility: {\n tabIndex: -1,\n ariaPosinset: idx + 1,\n ariaLevel: level,\n ariaSetsize: totalNumberOfLeaf,\n },\n foldable,\n folded,\n displayCounter: folded && counterDisplayable,\n counterDisplayable,\n counter,\n network: leaf.network,\n displayTokenInvalid: leaf.tokenInvalid && this.isLeafLogicValid(leaf, LeafLogics.TOKEN_INVALID, LeafLogics.COUNTER),\n displayFeatureLocked:\n leaf.featureLocked && this.isLeafLogicValid(leaf, LeafLogics.FEATURE_LOCKED, LeafLogics.TOKEN_INVALID, LeafLogics.COUNTER),\n startSymbolId: leaf.startSymbolId,\n startDotColor: leaf.startDotColor,\n selected: false,\n // In multiple mode, a disabled item can still be selectable (programmatically)\n // We exclude DISABLED from validation to allow selected + disabled state\n selectable: multipleModeEnabled\n ? this.isLeafLogicValid(leaf, LeafLogics.DISABLED, LeafLogics.COUNTER)\n : this.isLeafLogicValid(leaf, LeafLogics.FEATURE_LOCKED, LeafLogics.TOKEN_INVALID, LeafLogics.COUNTER),\n detailsDisplayable,\n details: leaf.details.map(detail => this.buildLeafDetail(detail, level + 1, focusable && !folded)),\n detailSelected: false,\n type: 'LEAF',\n viewMoreDisplayable,\n viewMoreDisplayed: viewMoreDisplayable,\n viewMoreDetailsDisplayedLimit: detailsDisplayedLimit,\n };\n }\n\n private static buildLeafDetail(detail: NavSelectorLeafDetails, level: number, focusable: boolean): InternalNavSelectorLeafDetails {\n return {\n uid: detail.uid,\n counter: detail.counter ?? 0,\n displayCounter: detail.counter !== null,\n alias: detail.name,\n hidden: false,\n accessibility: {\n tabIndex: -1,\n ariaPosinset: 1,\n ariaLevel: level,\n ariaSetsize: 1,\n },\n focusable,\n selected: false,\n errorReason: detail.errorReason,\n displayError: detail.errorReason !== null,\n type: 'LEAF_DETAILS',\n };\n }\n\n /**\n * Sets initial selection state for entries based on selectedEntryUids.\n * This allows disabled items to be selected programmatically during initialization.\n */\n private static setInitialSelection(entries: InternalNavSelectorEntry[], selectedEntryUids: string[]): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return {\n ...entry,\n selected: selectedEntryUids.includes(entry.uid),\n };\n } else if (isInternalNavSelectorEntryACategory(entry)) {\n return {\n ...entry,\n children: this.setInitialSelection(entry.children, selectedEntryUids) as (\n | InternalNavSelectorGroup\n | InternalNavSelectorLeaf\n )[],\n };\n } else if (isInternalNavSelectorEntryAGroup(entry)) {\n const children = this.setInitialSelection(entry.children, selectedEntryUids) as InternalNavSelectorLeaf[];\n // A group is selected if all children are either selected or not selectable\n // (disabled children must still be selected to count)\n const selected = children.every(c => c.selected || !c.selectable);\n const undeterminedSelection = !selected && children.some(c => c.selected);\n\n return {\n ...entry,\n children,\n selected,\n undeterminedSelection,\n };\n }\n return entry;\n });\n }\n\n private static isLeafLogicValid(leaf: NavSelectorLeaf, ...excludes: LeafLogics[]): boolean {\n return Object.entries(this.LEAF_LOGICS_PRIORITY)\n .filter(([key]) => !excludes.includes(key as LeafLogics))\n .every(([, logic]) => !logic(leaf));\n }\n}\n","import {\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n InternalNavSelectorLeaf,\n isInternalNavSelectorEntryACategory,\n isInternalNavSelectorEntryAGroup,\n isInternalNavSelectorEntryALeaf,\n isInternalNavSelectorEntryANode,\n} from '../nav-selector';\nimport { isInternalNavSelectorEntryALeafFocusable } from '../utils/leaf.utils';\nimport { NavSelectorAccessibility } from '../utils/nav-selector.accessibility';\n\n/**\n * NavSelectorFilter is a utility class that provides methods to filter entries\n */\nexport class NavSelectorFilter {\n /**\n * Filters the entries based on the search string\n *\n * The search string is normalized and lowercase and trimmed.\n *\n * If a category matches the search string, all its children are unfolded, marked as focusable, and not hidden.\n *\n * If a group matches the search string, the group is unfolded and all its children are unfolded, marked as focusable, and not hidden.\n *\n * If a leaf matches the search string, it is marked as not hidden and focusable.\n *\n * Else the entry marked as hidden and not focusable.\n *\n * It also determines whenever counter and token invalid should be displayed on groups and leaves.\n *\n * @param entries The entries to filter.\n * @param search The search string.\n * @param multipleMode to update the focusable state of leaves correctly.\n * @returns The filtered entries.\n */\n static filter(entries: InternalNavSelectorEntry[], search: string, multipleMode: boolean): InternalNavSelectorEntry[] {\n const formattedSearch = this.cleanValue(search);\n if (!formattedSearch) {\n return this.resetState(entries);\n }\n return this.filterEntries(entries, formattedSearch, multipleMode);\n }\n\n private static filterEntries<T extends InternalNavSelectorEntry>(\n entries: T[],\n formattedSearch: string,\n multipleMode: boolean\n ): InternalNavSelectorEntry[] {\n const newEntries = entries.map(entry => {\n if (this.matches(entry.alias, formattedSearch)) {\n return this.recursivelyUnfoldEntry(entry, multipleMode);\n }\n if (isInternalNavSelectorEntryANode(entry)) {\n const children = this.filterEntries(entry.children, formattedSearch, multipleMode);\n if (children.every(({ hidden }) => hidden)) {\n return {\n ...entry,\n children,\n focusable: false,\n hidden: true,\n };\n }\n return {\n ...entry,\n hidden: false,\n focusable: true,\n displayCounter: false,\n displayTokenInvalid: false,\n folded: false,\n children,\n };\n }\n\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return {\n ...entry,\n focusable: false,\n hidden: true,\n details: entry.details.map(detail => ({\n ...detail,\n focusable: false,\n })),\n };\n }\n\n return {\n ...entry,\n focusable: false,\n hidden: true,\n };\n });\n return NavSelectorAccessibility.resetFocus(newEntries);\n }\n\n private static recursivelyUnfoldEntry(entry: InternalNavSelectorEntry, multipleMode: boolean): InternalNavSelectorEntry {\n if (isInternalNavSelectorEntryAGroup(entry)) {\n const children = entry.children.map(child => this.recursivelyUnfoldEntry(child, multipleMode) as InternalNavSelectorLeaf);\n return {\n ...entry,\n hidden: false,\n folded: false,\n focusable: true,\n children,\n displayCounter: false,\n displayTokenInvalid: false,\n };\n } else if (isInternalNavSelectorEntryALeaf(entry)) {\n const leafFocusable = isInternalNavSelectorEntryALeafFocusable(entry, { parentFolded: false, multipleMode });\n return {\n ...entry,\n hidden: false,\n focusable: leafFocusable,\n displayCounter: entry.folded && entry.counterDisplayable,\n details: entry.details.map(detail => ({\n ...detail,\n focusable: !entry.folded,\n })),\n };\n } else if (isInternalNavSelectorEntryACategory(entry)) {\n const children = entry.children.map(\n child => this.recursivelyUnfoldEntry(child, multipleMode) as InternalNavSelectorGroup | InternalNavSelectorLeaf\n );\n return {\n ...entry,\n focusable: true,\n folded: false,\n hidden: false,\n children,\n };\n }\n return entry;\n }\n\n private static matches(alias: string, formattedSearch: string): boolean {\n return this.cleanValue(alias).includes(formattedSearch);\n }\n\n private static cleanValue(value: string): string {\n return value.trim().normalize('NFKC').toLowerCase();\n }\n\n private static resetState<T extends InternalNavSelectorEntry>(entries: T[], parentFolded: boolean = false): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryANode(entry)) {\n return {\n ...entry,\n hidden: false,\n focusable: !parentFolded,\n children: this.resetState(entry.children, entry.folded),\n };\n }\n return {\n ...entry,\n focusable: !parentFolded,\n hidden: false,\n };\n });\n }\n}\n","import {associateBy} from '..//utils/leaf.utils';\nimport {\n InternalNavSelectorCategory,\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n InternalNavSelectorLeaf,\n isInternalNavSelectorEntryAGroup,\n isInternalNavSelectorEntryALeaf,\n isInternalNavSelectorEntryANode,\n} from '../nav-selector';\n\n/**\n * NavSelectorMerger is a utility class that merges old entries into new entries.\n * It is used to keep some previous properties of the previous state. Ex: folded, selected, focused, etc.\n */\nexport class NavSelectorMerger {\n /**\n * Merges the old entries into the new entries.\n *\n * Modify directly the new entries as new entries are generated from scratch so no need to destructure them to have a new reference.\n *\n * @param newEntries\n * @param oldEntries\n *\n * @returns the new entries with the old entries merged into them\n */\n public static mergeInternalNavSelectorEntries(\n newEntries: InternalNavSelectorEntry[],\n oldEntries: InternalNavSelectorEntry[]\n ): InternalNavSelectorEntry[] {\n const oldEntryByUid = associateBy(oldEntries, 'uid');\n\n for (const newEntry of newEntries) {\n if (!oldEntryByUid[newEntry.uid]) {\n continue;\n }\n this.merge(newEntry, oldEntryByUid[newEntry.uid]);\n }\n\n return newEntries;\n }\n\n private static merge(newEntry: InternalNavSelectorEntry, oldEntry: InternalNavSelectorEntry) {\n if (isInternalNavSelectorEntryALeaf(newEntry) && isInternalNavSelectorEntryALeaf(oldEntry)) {\n this.mergeLeaf(newEntry, oldEntry);\n } else if (isInternalNavSelectorEntryANode(newEntry) && isInternalNavSelectorEntryANode(oldEntry)) {\n this.mergeInternalNavSelectorEntries(newEntry.children, oldEntry.children);\n this.mergeNode(newEntry, oldEntry);\n }\n }\n\n private static mergeNode(\n newNode: InternalNavSelectorGroup | InternalNavSelectorCategory,\n oldNode: InternalNavSelectorGroup | InternalNavSelectorCategory\n ) {\n newNode.folded = oldNode.folded;\n newNode.accessibility.tabIndex = oldNode.accessibility.tabIndex;\n\n if (isInternalNavSelectorEntryAGroup(newNode) && isInternalNavSelectorEntryAGroup(oldNode)) {\n this.mergeGroup(newNode, oldNode);\n }\n }\n\n private static mergeGroup(newGroup: InternalNavSelectorGroup, oldGroup: InternalNavSelectorGroup) {\n newGroup.displayCounter = oldGroup.displayCounter;\n newGroup.displayTokenInvalid = oldGroup.displayTokenInvalid;\n }\n\n private static mergeLeaf(newLeaf: InternalNavSelectorLeaf, oldLeaf: InternalNavSelectorLeaf) {\n if (this.isInternalLeafLogicValid(newLeaf)) {\n newLeaf.viewMoreDisplayable = newLeaf.details.length > newLeaf.viewMoreDetailsDisplayedLimit;\n newLeaf.viewMoreDisplayed = oldLeaf.viewMoreDisplayed;\n\n newLeaf.folded = oldLeaf.folded;\n newLeaf.displayCounter = newLeaf.folded && newLeaf.counterDisplayable;\n // Don't copy selected state - it's set by the builder based on initialSelectedEntryUids\n\n newLeaf.accessibility.tabIndex = oldLeaf.accessibility.tabIndex;\n\n const oldDetailByUId = associateBy(oldLeaf.details, 'uid');\n newLeaf.details.forEach(newDetail => {\n if (!oldDetailByUId[newDetail.uid] || newDetail.errorReason) {\n return;\n }\n // Don't copy selected state - it's set by the builder based on initialSelectedEntryUids\n newDetail.accessibility.tabIndex = oldDetailByUId[newDetail.uid].accessibility.tabIndex;\n });\n } else {\n const oldDetailHasFocused = oldLeaf.details.some(oldDetail => oldDetail.accessibility.tabIndex === 0);\n if (oldDetailHasFocused) {\n newLeaf.accessibility.tabIndex = 0;\n }\n }\n }\n\n private static isInternalLeafLogicValid(leaf: InternalNavSelectorLeaf): boolean {\n return !leaf.disabled && !leaf.displayTokenInvalid && !leaf.displayFeatureLocked;\n }\n}\n","import {\n InternalNavSelectorCategory,\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n isInternalNavSelectorEntryALeafDetails,\n isInternalNavSelectorEntryANode,\n} from '../nav-selector';\nimport { isInternalNavSelectorEntryALeafFocusable } from '../utils/leaf.utils';\n\n/**\n * NavSelectorMinifying is a utility class that provides methods to apply rules on entries when minifying or expanded nav selector.\n */\nexport class NavSelectorMinifying {\n /**\n * When minifying the nav selector, compute the focusable state of the entries.\n *\n * Leaf are not focusable in any error state when minified.\n * Detail are not focusable when minified.\n *\n * @param entries The entries to minify.\n * @param multipleMode to update the focusable state of leaves correctly.\n * @returns The modified entries.\n */\n static minify<T extends InternalNavSelectorEntry>(entries: T[], multipleMode: boolean): InternalNavSelectorEntry[] {\n return this.compute(entries, multipleMode, true);\n }\n\n /**\n * When expanding the nav selector, compute the focusable state of the entries.\n *\n * Leaf are not focusable in disabled state when expanded.\n * Detail are focusable when expanded.\n *\n * @param entries The entries to minify.\n * @param multipleMode to update the focusable state of leaves and details correctly.\n * @returns The modified entries.\n */\n static expand<T extends InternalNavSelectorEntry>(entries: T[], multipleMode: boolean): InternalNavSelectorEntry[] {\n return this.compute(entries, multipleMode, false);\n }\n\n private static compute<T extends InternalNavSelectorEntry>(\n entries: T[],\n multipleMode: boolean,\n minified: boolean,\n parent: InternalNavSelectorGroup | InternalNavSelectorCategory | null = null\n ): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryALeafDetails(entry)) {\n return {\n ...entry,\n focusable: !minified,\n accessibility: { ...entry.accessibility, tabIndex: minified ? -1 : entry.accessibility.tabIndex },\n };\n }\n if (isInternalNavSelectorEntryANode(entry)) {\n return {\n ...entry,\n children: this.compute(entry.children, multipleMode, minified, entry),\n };\n }\n\n return {\n ...entry,\n focusable: isInternalNavSelectorEntryALeafFocusable(entry, {\n parentFolded: parent?.folded === true,\n multipleMode,\n }),\n details: this.compute(entry.details, multipleMode, minified),\n };\n });\n }\n}\n","import {\n InternalNavSelectorCategory,\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n InternalNavSelectorLeaf,\n isInternalNavSelectorEntryACategory,\n isInternalNavSelectorEntryAGroup,\n isInternalNavSelectorEntryALeaf,\n} from '../nav-selector';\n\n/**\n * NavSelectorMultiSelect is a utility class that provides methods to select an entry in multiple mode.\n */\nexport class NavSelectorMultiSelect {\n /**\n * Select an entry in multiple mode.\n *\n * Categories are not selectable.\n *\n * Groups and leaves are selectable.\n *\n * Groups may be in undetermined state if some of their children are selected and some are not.\n * @param entries nav selector entries\n * @param entryUid the entry uid to select\n */\n static selectInMultipleMode(entries: InternalNavSelectorEntry[], entryUid: string): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return this.selectALeafInMultipleMode(entry, entryUid);\n } else if (isInternalNavSelectorEntryAGroup(entry)) {\n return this.selectAGroupInMultipleMode(entry, entryUid);\n } else if (isInternalNavSelectorEntryACategory(entry)) {\n return this.selectACategoryInMultipleMode(entry, entryUid);\n }\n return entry;\n });\n }\n\n /**\n * Select only a leaf in multiple mode.\n *\n * Categories are not selectable.\n *\n * Groups may be in undetermined state if some of their children are selected and some are not.\n * @param entries nav selector entries\n * @param entryUid the entry uid to select\n */\n static selectOnlyALeafInMultipleMode<T extends InternalNavSelectorEntry>(entries: T[], entryUid: string): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return {\n ...entry,\n selected: entry.uid === entryUid,\n };\n } else if (isInternalNavSelectorEntryACategory(entry)) {\n return {\n ...entry,\n children: this.selectOnlyALeafInMultipleMode(entry.children, entryUid),\n };\n } else if (isInternalNavSelectorEntryAGroup(entry)) {\n const children = entry.children.flatMap(\n child => this.selectOnlyALeafInMultipleMode([child], entryUid) as InternalNavSelectorLeaf[]\n );\n const selected = children.every(child => child.selected || (isInternalNavSelectorEntryALeaf(child) && !child.selectable));\n return {\n ...entry,\n children,\n selected,\n undeterminedSelection: !selected && children.some(child => child.selected),\n };\n }\n return entry;\n });\n }\n\n /**\n * Select all entries in multiple mode.\n *\n * Categories are not selectable.\n *\n * Groups and leaves are selectable.\n * @param entries nav selector entries\n */\n static selectAll(entries: InternalNavSelectorEntry[]): InternalNavSelectorEntry[] {\n return this.selectChildren(entries);\n }\n\n /**\n * Unselect all entries in multiple mode.\n *\n * Categories are not selectable.\n *\n * Groups and leaves are selectable.\n * @param entries nav selector entries\n */\n static unselectAll(entries: InternalNavSelectorEntry[]): InternalNavSelectorEntry[] {\n return this.unselectChildren(entries);\n }\n\n private static selectALeafInMultipleMode(leaf: InternalNavSelectorLeaf, entryUid: string): InternalNavSelectorLeaf {\n let selected = leaf.selected;\n\n // Only allow toggle if item is selectable AND not disabled\n // This blocks user interaction on disabled items\n if (leaf.uid === entryUid && leaf.selectable && !leaf.disabled) {\n selected = !leaf.selected;\n }\n\n return {\n ...leaf,\n selected,\n };\n }\n\n private static selectACategoryInMultipleMode(entry: InternalNavSelectorCategory, entryUid: string): InternalNavSelectorCategory {\n return {\n ...entry,\n children: entry.children.map(child => {\n if (isInternalNavSelectorEntryALeaf(child)) {\n return this.selectALeafInMultipleMode(child, entryUid);\n }\n return this.selectAGroupInMultipleMode(child, entryUid);\n }),\n };\n }\n\n private static selectAGroupInMultipleMode(entry: InternalNavSelectorGroup, entryUid: string): InternalNavSelectorGroup {\n if (!entry.selectable) {\n return entry;\n }\n let selected: boolean;\n let children: InternalNavSelectorLeaf[];\n let undeterminedSelection = false;\n if (entry.uid === entryUid) {\n selected = !entry.selected;\n if (selected) {\n children = this.selectLeafs(entry.children);\n } else {\n children = this.unselectLeafs(entry.children);\n }\n // Recalculate selected and undeterminedSelection based on children\n // because disabled items may have retained their selected state.\n // A group is selected if all children are either selected or not selectable\n // (disabled children must still be selected to count)\n selected = children.every(child => child.selected || (isInternalNavSelectorEntryALeaf(child) && !child.selectable));\n undeterminedSelection = !selected && children.some(child => child.selected);\n } else {\n children = entry.children.map(child => this.toggleSelectLeaf(child, entryUid));\n // A group is selected if all children are either selected or not selectable\n // (disabled children must still be selected to count)\n selected = children.every(child => child.selected || (isInternalNavSelectorEntryALeaf(child) && !child.selectable));\n undeterminedSelection = !selected && children.some(child => child.selected);\n }\n\n return {\n ...entry,\n children,\n selected,\n undeterminedSelection,\n };\n }\n\n private static toggleSelectLeaf(leaf: InternalNavSelectorLeaf, uid: string): InternalNavSelectorLeaf {\n if (leaf.uid === uid) {\n return {\n ...leaf,\n selected: !leaf.selected,\n };\n }\n return leaf;\n }\n\n private static selectLeafs(leafs: InternalNavSelectorLeaf[]): InternalNavSelectorLeaf[] {\n return leafs.map(leaf => ({\n ...leaf,\n // Disabled or non-selectable leafs retain their current selected state\n selected: leaf.disabled || !leaf.selectable ? leaf.selected : leaf.selectable,\n }));\n }\n\n private static unselectLeafs(leafs: InternalNavSelectorLeaf[]): InternalNavSelectorLeaf[] {\n return leafs.map(leaf => ({\n ...leaf,\n // Disabled or non-selectable leafs retain their current selected state\n selected: leaf.disabled || !leaf.selectable ? leaf.selected : false,\n }));\n }\n\n private static unselectChildren<T extends InternalNavSelectorEntry>(entry: T[]): InternalNavSelectorEntry[] {\n return entry.map(child => {\n if (isInternalNavSelectorEntryALeaf(child)) {\n return {\n ...child,\n // Disabled or non-selectable leafs retain their current selected state\n selected: child.disabled || !child.selectable ? child.selected : false,\n };\n } else if (isInternalNavSelectorEntryACategory(child)) {\n return {\n ...child,\n children: this.unselectChildren(child.children),\n };\n } else if (isInternalNavSelectorEntryAGroup(child)) {\n const children = this.unselectChildren(child.children) as InternalNavSelectorLeaf[];\n // Recalculate group state based on children\n // A group is selected if all children are either selected or not selectable\n // (disabled children must still be selected to count)\n const selected = children.every(c => c.selected || (isInternalNavSelectorEntryALeaf(c) && !c.selectable));\n const undeterminedSelection = !selected && children.some(c => c.selected);\n return {\n ...child,\n children,\n selected,\n undeterminedSelection,\n };\n }\n return child;\n });\n }\n\n private static selectChildren<T extends InternalNavSelectorEntry>(entry: T[]): InternalNavSelectorEntry[] {\n return entry.map(child => {\n if (isInternalNavSelectorEntryALeaf(child)) {\n return {\n ...child,\n // Disabled or non-selectable leafs retain their current selected state\n selected: child.disabled || !child.selectable ? child.selected : child.selectable,\n };\n } else if (isInternalNavSelectorEntryACategory(child)) {\n return {\n ...child,\n children: this.selectChildren(child.children),\n };\n } else if (isInternalNavSelectorEntryAGroup(child)) {\n const children = this.selectChildren(child.children) as InternalNavSelectorLeaf[];\n // Recalculate group state based on children\n // A group is selected if all children are either selected or not selectable\n // (disabled children must still be selected to count)\n const selected = children.every(c => c.selected || (isInternalNavSelectorEntryALeaf(c) && !c.selectable));\n const undeterminedSelection = !selected && children.some(c => c.selected);\n return {\n ...child,\n children,\n selected,\n undeterminedSelection,\n };\n }\n return child;\n });\n }\n}\n","import { InternalNavSelectorEntry, isInternalNavSelectorEntryALeaf, isInternalNavSelectorEntryANode } from '../nav-selector';\n\n/**\n * Utility class to handle the view more functionality on leaves\n */\nexport class NavSelectorViewMore {\n /**\n * Change the view more details displayed limit on leaves\n * @param entries nav selector entries\n * @param limit the number of details we want to display by default\n */\n static changeViewMoreDetailsDisplayedLimit<T extends InternalNavSelectorEntry>(\n entries: T[],\n limit: number\n ): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryANode(entry)) {\n return {\n ...entry,\n children: this.changeViewMoreDetailsDisplayedLimit(entry.children, limit),\n };\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n const viewMoreDisplayable = entry.details.length > limit;\n return {\n ...entry,\n viewMoreDisplayed: viewMoreDisplayable,\n viewMoreDisplayable,\n viewMoreDetailsDisplayedLimit: limit,\n details: entry.details.map((detail, idx) => ({\n ...detail,\n focusable: entry.focusable && !entry.folded && idx < limit,\n })),\n };\n }\n return entry;\n });\n }\n\n /**\n * We want to display all details of the leaf\n *\n * set viewMoreDisplayed to false and set all details as focusable\n *\n * @param entries nav selector entries\n * @param leafUid the uid of the leaf we want to view all details\n */\n static viewMore<T extends InternalNavSelectorEntry>(entries: T[], leafUid: string): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryANode(entry)) {\n return {\n ...entry,\n children: this.viewMore(entry.children, leafUid),\n };\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n if (entry.uid === leafUid) {\n return {\n ...entry,\n viewMoreDisplayed: false,\n details: entry.details.map(detail => ({\n ...detail,\n focusable: true,\n })),\n };\n }\n }\n return entry;\n });\n }\n\n /**\n * We want to display only the number of details of the leaf corresponding to the viewMoreDetailsDisplayedLimit\n *\n * set viewMoreDisplayed to true and set only the details with an index lower than the limit as focusable\n *\n * @param entries nav selector entries\n * @param uid the uid of the leaf we want to view all details\n */\n static viewLess<T extends InternalNavSelectorEntry>(entries: T[], uid: string): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryANode(entry)) {\n return {\n ...entry,\n children: this.viewLess(entry.children, uid),\n };\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n if (entry.uid === uid) {\n return {\n ...entry,\n viewMoreDisplayed: true,\n details: entry.details.map((detail, idx) => ({\n ...detail,\n focusable: idx < entry.viewMoreDetailsDisplayedLimit,\n })),\n };\n }\n }\n return entry;\n });\n }\n}\n","import { computed, effect, Injectable, Signal, signal, untracked } from '@angular/core';\nimport { isEqual } from 'es-toolkit';\nimport {\n InternalNavSelectorEntry,\n InternalNavSelectorLeaf,\n InternalNavSelectorLeafDetails,\n isInternalNavSelectorEntryALeaf,\n isInternalNavSelectorEntryANode,\n NavSelectorEntry,\n NavSelectorStyle,\n NavSelectorTranslatedTexts,\n} from './nav-selector';\nimport { NavSelectorAccessibility } from './utils/nav-selector.accessibility';\nimport { NavSelectorBuilder } from './utils/nav-selector.builder';\nimport { NavSelectorFilter } from './utils/nav-selector.filter';\nimport { NavSelectorFolding, NavSelectorFoldingOptions } from './utils/nav-selector.folding';\nimport { NavSelectorMerger } from './utils/nav-selector.merger';\nimport { NavSelectorMinifying } from './utils/nav-selector.minifying';\nimport { NavSelectorMultiSelect } from './utils/nav-selector.multi-select';\nimport { NavSelectorSingleSelect } from './utils/nav-selector.single-select';\nimport { NavSelectorViewMore } from './utils/nav-selector.view-more';\n\n/**\n * NavSelectorState is a service that manages the state of the nav selector.\n *\n * It should be provided by the component to ensure that if many nav selectors are used in the same page, they don't share the same state.\n */\n@Injectable()\nexport class NavSelectorState {\n _entries = signal<InternalNavSelectorEntry[]>([]);\n entries = this._entries.asReadonly();\n style!: Signal<NavSelectorStyle>;\n private multipleModeEnabled = signal<boolean>(false);\n private _texts = signal<NavSelectorTranslatedTexts>({\n title: '',\n only: '',\n tokenInvalid: '',\n groupTokenInvalid: '',\n featureLocked: '',\n searchPlaceholder: '',\n noResults: '',\n viewMore: '',\n viewLess: '',\n });\n\n isMultipleModeEnabled = this.multipleModeEnabled;\n search = signal<string>('');\n\n noResults = computed(() => this._entries().every(({ hidden }) => hidden));\n texts = this._texts.asReadonly();\n\n isAllSelected = computed(() => {\n if (!this.multipleModeEnabled()) {\n return false;\n }\n\n const entries = this._entries();\n return this.areAllSelectableItemsSelected(entries);\n });\n\n isSelectAllIndeterminate = computed(() => {\n if (!this.multipleModeEnabled()) {\n return false;\n }\n\n const entries = this._entries();\n const allSelected = this.areAllSelectableItemsSelected(entries);\n\n if (allSelected) {\n return false;\n }\n\n // Check if ANY item is selected (including disabled/mandatory items)\n // This matches the behavior of group checkboxes\n const selectedUids = this.collectSelectedUids(entries);\n return selectedUids.length > 0;\n });\n\n expanded = signal(true);\n\n previousSelectedUids: string[] = [];\n private selectedUidsChangeCallback: ((selectedUids: string[]) => void) | null = null;\n private newSelectedUids = computed(() => this.collectSelectedUids(this._entries()), { equal: isEqual });\n\n constructor() {\n effect(() => {\n const uids = this.newSelectedUids();\n untracked(() => {\n if (this.selectedUidsChangeCallback && !isEqual(this.previousSelectedUids, uids)) {\n this.selectedUidsChangeCallback(uids);\n this.previousSelectedUids = uids;\n }\n });\n });\n\n effect(() => {\n const search = this.search();\n untracked(() => {\n this._entries.update(entries => NavSelectorFilter.filter(entries, search, this.multipleModeEnabled()));\n });\n });\n }\n\n updateMultiModeEnabled(enabled: boolean) {\n this.multipleModeEnabled.set(enabled);\n }\n\n initEntries(entries: NavSelectorEntry[], initialSelectedEntryUids: string[], detailsDisplayedLimit: number) {\n if (this.multipleModeEnabled()) {\n this._entries.set(NavSelectorBuilder.buildInMultipleMode(entries, initialSelectedEntryUids, detailsDisplayedLimit));\n } else {\n this._entries.set(NavSelectorBuilder.build(entries, initialSelectedEntryUids?.[0] ?? null, detailsDisplayedLimit));\n }\n }\n\n updateEntries(entries: NavSelectorEntry[], initialSelectedEntryUids: string[], detailsDisplayedLimit: number) {\n let newEntries: InternalNavSelectorEntry[];\n if (this.multipleModeEnabled()) {\n newEntries = NavSelectorBuilder.buildInMultipleMode(entries, initialSelectedEntryUids, detailsDisplayedLimit);\n } else {\n newEntries = NavSelectorBuilder.build(entries, initialSelectedEntryUids?.[0] ?? null, detailsDisplayedLimit);\n }\n this._entries.update(oldEntries => {\n const mergeEntries = NavSelectorMerger.mergeInternalNavSelectorEntries(newEntries, oldEntries);\n return NavSelectorFilter.filter(mergeEntries, this.search(), this.multipleModeEnabled());\n });\n }\n\n onGroupToggleFolding(group: InternalNavSelectorEntry) {\n this._entries.update(entries => NavSelectorFolding.toggleFolding(entries, group.uid, this.getFoldingOptions()));\n }\n\n onNodeSelect(node: InternalNavSelectorEntry) {\n this._entries.update(entries => NavSelectorMultiSelect.selectInMultipleMode(entries, node.uid));\n }\n\n onLeafClicked(leaf: InternalNavSelectorLeaf) {\n if (!leaf.selectable) {\n return;\n }\n\n // In multiple mode, block clicks on disabled leafs\n // (they can be selected programmatically but not by the user)\n if (this.multipleModeEnabled() && leaf.disabled) {\n return;\n }\n\n this._entries.update(entries => {\n let updatedEntries = entries;\n if (leaf.foldable) {\n const options = this.getFoldingOptions();\n\n const unfoldedLeafUids = this.findUnfoldedLeafUids(entries);\n\n for (const uid of unfoldedLeafUids) {\n updatedEntries = NavSelectorFolding.fold(updatedEntries, uid, options);\n }\n }\n\n if (this.multipleModeEnabled()) {\n return NavSelectorMultiSelect.selectInMultipleMode(updatedEntries, leaf.uid);\n } else {\n return NavSelectorSingleSelect.select(updatedEntries, leaf.uid);\n }\n });\n }\n\n onLeafToggleFolding(leaf: InternalNavSelectorEntry) {\n this._entries.update(entries => {\n const options = this.getFoldingOptions();\n\n // Find all unfolded leaves except the clicked one and fold them first\n let updatedEntries = entries;\n const unfoldedLeafUids = this.findUnfoldedLeafUids(entries).filter(uid => uid !== leaf.uid);\n\n for (const uid of unfoldedLeafUids) {\n updatedEntries = NavSelectorFolding.fold(updatedEntries, uid, options);\n }\n\n // Then toggle the clicked leaf\n return NavSelectorFolding.toggleFolding(updatedEntries, leaf.uid, options);\n });\n }\n\n private findUnfoldedLeafUids(entries: InternalNavSelectorEntry[]): string[] {\n const unfoldedUids: string[] = [];\n\n for (const entry of entries) {\n if (isInternalNavSelectorEntryALeaf(entry) && entry.foldable && !entry.folded) {\n unfoldedUids.push(entry.uid);\n } else if (isInternalNavSelectorEntryANode(entry)) {\n unfoldedUids.push(...this.findUnfoldedLeafUids(entry.children));\n }\n }\n\n return unfoldedUids;\n }\n\n onLeafDetailClicked(leafDetail: InternalNavSelectorLeafDetails) {\n this._entries.update(entries => NavSelectorSingleSelect.select(entries, leafDetail.uid));\n }\n\n updateTexts(texts: NavSelectorTranslatedTexts) {\n this._texts.set(texts);\n }\n\n selectOnlyLeaf(leaf: InternalNavSelectorLeaf) {\n this._entries.update(entries => NavSelectorMultiSelect.selectOnlyALeafInMultipleMode(entries, leaf.uid));\n }\n\n toggleExpanded() {\n this.expanded.update(expanded => !expanded);\n this._entries.update(entries => {\n if (this.expanded()) {\n return NavSelectorMinifying.expand(entries, this.multipleModeEnabled());\n }\n return NavSelectorMinifying.minify(entries, this.multipleModeEnabled());\n });\n }\n\n minify() {\n if (this.expanded()) {\n this.toggleExpanded();\n }\n }\n\n forceMinify() {\n this.expanded.set(false);\n this._entries.update(entries =>\n NavSelectorAccessibility.resetFocus(NavSelectorMinifying.minify(entries, this.multipleModeEnabled()))\n );\n }\n\n forceExpand() {\n this.expanded.set(true);\n this._entries.update(entries =>\n NavSelectorAccessibility.resetFocus(NavSelectorMinifying.expand(entries, this.multipleModeEnabled()))\n );\n }\n\n onSelectionChange(uids: string[]) {\n // Avoid infinite loop if you put unexisting uids as select will generate the same entries but with different reference\n if (isEqual(uids, this.previousSelectedUids)) {\n return;\n }\n\n const selectedUids = this.newSelectedUids();\n const uidToSelect = uids.filter(uid => !selectedUids.includes(uid));\n const uidToUnselect = selectedUids.filter(uid => !uids.includes(uid));\n\n if (!uidToSelect.length && !uidToUnselect.length) {\n return;\n }\n\n let entries = this._entries();\n\n if (this.multipleModeEnabled()) {\n for (const uid of [...uidToSelect, ...uidToUnselect]) {\n entries = NavSelectorMultiSelect.selectInMultipleMode(entries, uid);\n }\n\n for (const uid of uidToSelect) {\n entries = NavSelectorFolding.unfoldParents(entries, uid, {\n multipleMode: true,\n minified: !this.expanded(),\n });\n }\n } else {\n entries = NavSelectorSingleSelect.select(entries, uids[0]);\n entries = NavSelectorFolding.unfoldParents(entries, uids[0], {\n multipleMode: false,\n minified: !this.expanded(),\n });\n }\n\n this._entries.set(entries);\n }\n\n registerOnSelectedUidsChange(callback: (selectedUids: string[]) => void) {\n this.selectedUidsChangeCallback = callback;\n }\n\n onArrowDown() {\n this._entries.update(entries => NavSelectorAccessibility.focusNext(entries));\n }\n\n onArrowUp() {\n this._entries.update(entries => NavSelectorAccessibility.focusPrevious(entries));\n }\n\n private collectSelectedUids(entries: InternalNavSelectorEntry[]): string[] {\n return entries.flatMap(entry => {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n if (entry.detailsDisplayable) {\n return entry.details.flatMap(detail => (detail.selected ? [detail.uid] : []));\n }\n return entry.selected ? [entry.uid] : [];\n } else if (isInternalNavSelectorEntryANode(entry)) {\n return this.collectSelectedUids(entry.children);\n }\n return [];\n });\n }\n\n private getFoldingOptions(): NavSelectorFoldingOptions {\n return {\n multipleMode: this.multipleModeEnabled(),\n minified: !this.expanded(),\n };\n }\n\n fold(entry: InternalNavSelectorEntry) {\n this._entries.update(entries => NavSelectorFolding.fold(entries, entry.uid, this.getFoldingOptions()));\n }\n\n unfold(entry: InternalNavSelectorEntry) {\n this._entries.update(entries => NavSelectorFolding.unfold(entries, entry.uid, this.getFoldingOptions()));\n }\n\n updateDetailsDisplayedLimit(detailsDisplayedLimit: number) {\n this._entries.update(entries => NavSelectorViewMore.changeViewMoreDetailsDisplayedLimit(entries, detailsDisplayedLimit));\n }\n\n viewMore(leaf: InternalNavSelectorLeaf) {\n this._entries.update(entries => NavSelectorViewMore.viewMore(entries, leaf.uid));\n }\n\n viewLess(leaf: InternalNavSelectorLeaf) {\n this._entries.update(entries => NavSelectorViewMore.viewLess(entries, leaf.uid));\n }\n\n resetFocus(): void {\n this._entries.update(entries => NavSelectorAccessibility.resetFocus(entries));\n }\n\n toggleSelectAll(): void {\n if (!this.multipleModeEnabled()) {\n return;\n }\n\n this._entries.update(entries => {\n const allSelected = this.areAllSelectableItemsSelected(entries);\n return allSelected ? NavSelectorMultiSelect.unselectAll(entries) : NavSelectorMultiSelect.selectAll(entries);\n });\n }\n\n private areAllSelectableItemsSelected(entries: InternalNavSelectorEntry[]): boolean {\n const selectableNonDisabledUids = this.collectSelectableNonDisabledUids(entries);\n const selectedUids = this.collectSelectedUids(entries);\n\n if (selectableNonDisabledUids.length === 0) {\n return false;\n }\n\n return selectableNonDisabledUids.every(uid => selectedUids.includes(uid));\n }\n\n private collectSelectableNonDisabledUids(entries: InternalNavSelectorEntry[]): string[] {\n return entries.flatMap(entry => {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n // Only include selectable and non-disabled items (user-interactable)\n return entry.selectable && !entry.disabled ? [entry.uid] : [];\n } else if (isInternalNavSelectorEntryANode(entry)) {\n return this.collectSelectableNonDisabledUids(entry.children);\n }\n return [];\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { InternalNavSelectorLeafDetails } from '../nav-selector';\nimport { NavSelectorState } from '../nav-selector.state';\n\n@Injectable()\nexport class NavSelectorLeafDetailPresenter {\n constructor(private navSelectorState: NavSelectorState) {}\n\n onLeafDetailClicked(detail: InternalNavSelectorLeafDetails) {\n if (!detail.displayError) {\n this.navSelectorState.onLeafDetailClicked(detail);\n }\n }\n}\n","import { CounterComponent } from '@agorapulse/ui-components/counter';\nimport { TooltipDirective } from '@agorapulse/ui-components/tooltip';\nimport { apErrorFill, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { TreeNodeAccessibilityDirective } from '../directives/tree-node-accessibility.directive';\nimport { InternalNavSelectorLeafDetails } from '../nav-selector';\nimport { NavSelectorLeafDetailPresenter } from './nav-selector-leaf-detail.presenter';\n\n@Component({\n selector: 'ap-nav-selector-leaf-detail',\n templateUrl: './nav-selector-leaf-detail.component.html',\n styleUrls: ['./nav-selector-leaf-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CounterComponent, SymbolComponent, TooltipDirective],\n providers: [withSymbols(apErrorFill), NavSelectorLeafDetailPresenter],\n host: {\n '(click)': 'onClick($event)',\n '[class.selected]': 'detail().selected',\n '[class.embedded]': 'embedded()',\n '[class.disabled]': 'detail().displayError',\n '(keydown.enter)': 'onClick($event)',\n '(keydown.space)': 'onClick($event)',\n },\n hostDirectives: [\n {\n directive: TreeNodeAccessibilityDirective,\n // Alias the input of the directive to detail the input detail will be used in the directive and in the component as well\n inputs: ['apTreeNodeAccessibility: detail'],\n },\n ],\n})\nexport class NavSelectorLeafDetailComponent {\n detail = input.required<InternalNavSelectorLeafDetails>();\n\n embedded = input(false);\n\n constructor(public navSelectorLeafDetailPresenter: NavSelectorLeafDetailPresenter) {}\n\n onClick(event: Event) {\n if (!this.embedded()) {\n event.stopImmediatePropagation();\n this.navSelectorLeafDetailPresenter.onLeafDetailClicked(this.detail());\n }\n }\n}\n","<span class=\"caption\">{{ detail().alias }}</span>\n\n@if (detail().displayCounter) {\n <ap-counter\n color=\"orange\"\n size=\"normal\"\n [background]=\"false\">\n {{ detail().counter }}\n </ap-counter>\n}\n@if (detail().displayError) {\n <ap-symbol\n size=\"sm\"\n symbolId=\"error_fill\"\n apTooltipPosition=\"right\"\n [apTooltip]=\"detail().errorReason\" />\n}\n","import { computed, Injectable } from '@angular/core';\nimport { InternalNavSelectorLeaf } from '../nav-selector';\nimport { NavSelectorState } from '../nav-selector.state';\n\n@Injectable()\nexport class NavSelectorLeafDetailsPresenter {\n viewMoreText = computed(() => this.navSelectorState.texts().viewMore);\n viewLessText = computed(() => this.navSelectorState.texts().viewLess);\n\n constructor(private navSelectorState: NavSelectorState) {}\n\n toggleViewMore(leaf: InternalNavSelectorLeaf) {\n if (leaf.viewMoreDisplayed) {\n this.viewMore(leaf);\n } else {\n this.viewLess(leaf);\n }\n }\n\n viewMore(leaf: InternalNavSelectorLeaf) {\n this.navSelectorState.viewMore(leaf);\n }\n\n viewLess(leaf: InternalNavSelectorLeaf) {\n this.navSelectorState.viewLess(leaf);\n }\n}\n","import { animate, keyframes, state, style, transition, trigger } from '@angular/animations';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, computed, effect, ElementRef, input, signal, untracked } from '@angular/core';\nimport { InternalNavSelectorLeaf, InternalNavSelectorLeafDetails } from '../nav-selector';\nimport { NavSelectorLeafDetailComponent } from '../nav-selector-leaf-detail/nav-selector-leaf-detail.component';\nimport { NavSelectorLeafDetailsPresenter } from '../nav-selector-leaf-details/nav-selector-leaf-details.presenter';\n\n@Component({\n selector: 'ap-nav-selector-leaf-details',\n templateUrl: './nav-selector-leaf-details.component.html',\n styleUrls: ['./nav-selector-leaf-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NavSelectorLeafDetailComponent],\n providers: [NavSelectorLeafDetailsPresenter],\n host: {\n '[attr.aria-expanded]': '!leaf().viewMoreDisplayable || leaf().viewMoreDisplayed',\n },\n animations: [\n /**\n * Overflow hidden is put only during the animation and on the collapsed state because if it is put on the expanded state then children’s border will be cut (hover / focus)\n */\n trigger('accordion', [\n state(\n 'collapsed',\n style({\n maxHeight: '0',\n overflow: 'hidden',\n })\n ),\n state(\n 'expanded',\n style({\n maxHeight: 'initial',\n })\n ),\n transition('collapsed => expanded', [\n animate('250ms cubic-bezier(.4, 0, .3, 1)', style({ overflow: 'hidden', maxHeight: '{{maxHeight}}' })),\n ]),\n transition('expanded => collapsed', [\n animate(\n '250ms cubic-bezier(.4, 0, .3, 1)',\n keyframes([style({ overflow: 'hidden', maxHeight: '{{maxHeight}}' }), style({ maxHeight: 0 })])\n ),\n ]),\n ]),\n ],\n})\nexport class NavSelectorLeafDetailsComponent implements AfterViewInit {\n leaf = input.required<InternalNavSelectorLeaf>();\n details = input.required<InternalNavSelectorLeafDetails[]>();\n\n firstDetails = computed(() => this.details().slice(0, this.leaf().viewMoreDetailsDisplayedLimit));\n lastDetails = computed(() => this.details().slice(this.leaf().viewMoreDetailsDisplayedLimit));\n\n viewMoreDelay = signal(false);\n\n animationState = computed(() => (this.leaf().viewMoreDisplayable && this.leaf().viewMoreDisplayed ? 'collapsed' : 'expanded'));\n\n /**\n * The height when details are all displayed\n */\n maxHeight = signal('0px');\n\n constructor(\n private el: ElementRef,\n public navSelectorLeafDetailsPresenter: NavSelectorLeafDetailsPresenter\n ) {\n effect(() => {\n const viewMoreDisplayed = this.leaf().viewMoreDisplayed;\n untracked(() => {\n if (viewMoreDisplayed) {\n setTimeout(() => this.viewMoreDelay.set(false), 150);\n } else {\n this.viewMoreDelay.set(true);\n }\n });\n });\n }\n\n ngAfterViewInit(): void {\n // scrollHeight = leaf + first details displayed when there is a limit\n const height = this.el.nativeElement.scrollHeight;\n // cross multiplication to determine height of remaining details\n this.maxHeight.set(`${(height * this.lastDetails().length) / this.firstDetails().length}px`);\n }\n\n toggleViewMore() {\n this.navSelectorLeafDetailsPresenter.toggleViewMore(this.leaf());\n }\n\n onSpaceOrEnter(event: Event) {\n event.stopImmediatePropagation();\n this.toggleViewMore();\n }\n}\n","@for (detail of firstDetails(); track detail.uid) {\n <div class=\"detail\">\n <div class=\"separator\">\n <div class=\"rectangle\"></div>\n </div>\n <ap-nav-selector-leaf-detail [detail]=\"detail\" />\n </div>\n}\n\n@if (leaf().viewMoreDisplayable) {\n <div\n class=\"details-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight()\n }\n }\">\n @if (viewMoreDelay()) {\n @for (detail of lastDetails(); track detail.uid) {\n <div class=\"detail\">\n <div class=\"separator\">\n <div class=\"rectangle\"></div>\n </div>\n <ap-nav-selector-leaf-detail [detail]=\"detail\" />\n </div>\n }\n }\n </div>\n\n <div class=\"detail\">\n <div class=\"separator\">\n <div class=\"rectangle\"></div>\n </div>\n <a\n tabindex=\"0\"\n role=\"button\"\n class=\"standalone view-more\"\n (keydown.space)=\"onSpaceOrEnter($event)\"\n (keydown.enter)=\"onSpaceOrEnter($event)\"\n (click)=\"toggleViewMore()\">\n @if (leaf().viewMoreDisplayed) {\n {{ navSelectorLeafDetailsPresenter.viewMoreText() }}\n } @else {\n {{ navSelectorLeafDetailsPresenter.viewLessText() }}\n }\n </a>\n </div>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, contentChildren, ElementRef, input, signal, TemplateRef } from '@angular/core';\n\nexport const NavSelectorPopoverPlacement = {\n RIGHT: 'right',\n BOTTOM_START: 'bottom_start',\n} as const;\nexport type NavSelectorPopoverPlacement = (typeof NavSelectorPopoverPlacement)[keyof typeof NavSelectorPopoverPlacement];\n\n@Component({\n selector: 'ap-nav-selector-popover',\n templateUrl: './nav-selector-popover.component.html',\n styleUrls: ['./nav-selector-popover.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[style.top.px]': 'position().top',\n '[style.left.px]': 'position().left',\n '(click)': 'onClick($event)',\n '(window:wheel)': 'onAnyScroll()',\n '(window:focusin)': 'onFocusChanged($event)',\n '(window:click)': 'onAnyClick($event)',\n },\n imports: [NgTemplateOutlet],\n})\nexport class NavSelectorPopoverComponent {\n placement = input<NavSelectorPopoverPlacement>(NavSelectorPopoverPlacement.RIGHT);\n popoverTitle = input<string>();\n offset = input<Partial<{ mainAxis: number; crossAxis: number }>>({ mainAxis: 0, crossAxis: 0 });\n\n items = contentChildren<TemplateRef<unknown>>('item');\n\n displayed = signal(false);\n navSelectorPopoverDisplayed = this.displayed.asReadonly();\n\n position = signal({\n top: 0,\n left: 0,\n });\n parentEl = signal<ElementRef | null>(null);\n\n mainAxisOffset = computed(() => this.offset().mainAxis ?? 0);\n crossAxisOffset = computed(() => this.offset().crossAxis ?? 0);\n\n constructor(private elementRef: ElementRef) {}\n\n display(parentEl: ElementRef): void {\n this.parentEl.set(parentEl);\n this.displayed.set(true);\n this.computePosition(parentEl);\n }\n\n hide() {\n this.displayed.set(false);\n }\n\n toggle(parentEl: ElementRef): void {\n this.parentEl.set(parentEl);\n this.displayed.update(value => !value);\n if (this.displayed()) {\n this.computePosition(parentEl);\n }\n }\n\n onTitleCLicked(event: Event): void {\n // Click on title should not close the popover\n event.stopImmediatePropagation();\n }\n\n onClick(event: Event): void {\n // Prevent click to be caught from element behind the popover (real bug)\n event.stopImmediatePropagation();\n this.displayed.set(false);\n }\n\n private computePosition(parentEl: ElementRef): void {\n // Needed to wait first render and have the total height of the popover\n setTimeout(() => {\n const parentRect = parentEl.nativeElement.getBoundingClientRect();\n if (!parentRect.top && !parentRect.left) {\n this.displayed.set(false);\n } else if (this.placement().startsWith('right')) {\n this.computeRightPosition(parentEl);\n } else if (this.placement().startsWith('bottom')) {\n this.computeBottomPosition(parentEl);\n }\n });\n }\n\n private computeRightPosition(parentEl: ElementRef) {\n const nativeEl = parentEl.nativeElement;\n const rect = nativeEl.getBoundingClientRect();\n let top = rect.top + (rect.height - nativeEl.offsetHeight) / 2 + this.crossAxisOffset();\n const left = rect.left + rect.width + this.mainAxisOffset();\n\n const elementEl = this.elementRef.nativeElement;\n\n const popoverRect = elementEl.getBoundingClientRect();\n if (top + elementEl.clientHeight > window.innerHeight) {\n const popoverEl = document.querySelector('.nav-selector-popover') as Element;\n const paddingBottom = parseInt(getComputedStyle(popoverEl).paddingBottom);\n top = rect.top + rect.height - popoverRect.height + paddingBottom;\n }\n\n this.position.set({\n top: top,\n left: left,\n });\n }\n\n private computeBottomPosition(parentEl: ElementRef) {\n const nativeEl = parentEl.nativeElement;\n const rect = nativeEl.getBoundingClientRect();\n let top = rect.top + rect.height + this.mainAxisOffset();\n let left = rect.left + (rect.width - nativeEl.offsetWidth) / 2 + this.crossAxisOffset();\n\n if (this.placement() === NavSelectorPopoverPlacement.BOTTOM_START) {\n left = rect.left;\n }\n\n const elementEl = this.elementRef.nativeElement;\n\n const popoverRect = elementEl.getBoundingClientRect();\n if (top + elementEl.clientHeight > window.innerHeight) {\n top -= popoverRect.height + rect.height;\n }\n\n this.position.set({\n top: top,\n left: left,\n });\n }\n\n onAnyScroll() {\n const parent = this.parentEl();\n if (parent) {\n this.computePosition(parent);\n }\n }\n\n onFocusChanged(event: FocusEvent) {\n const focusedElementIsChildOfPopover = this.elementRef.nativeElement.contains(event.target as Element);\n const focusedElementIsParentOfPopover = (event.target as Element).contains(this.elementRef.nativeElement);\n if (!focusedElementIsChildOfPopover && !focusedElementIsParentOfPopover) {\n this.displayed.set(false);\n }\n }\n\n onAnyClick(event: Event) {\n if (!this.elementRef.nativeElement.contains(event.target as Element)) {\n this.displayed.set(false);\n }\n }\n}\n","@if (displayed()) {\n <div class=\"nav-selector-popover\">\n @if (popoverTitle()) {\n <div (click)=\"onTitleCLicked($event)\" class=\"nav-selector-popover__title\">{{ popoverTitle() }}</div>\n }\n\n @let itemsNotNull = items();\n\n @if (itemsNotNull?.length) {\n @for (item of itemsNotNull; track item) {\n <ng-container [ngTemplateOutlet]=\"item\"/>\n }\n } @else {\n <ng-content select=\"[item]\"/>\n }\n </div>\n}\n","import { computed, inject, Injectable } from '@angular/core';\nimport { InternalNavSelectorLeaf, InternalNavSelectorLeafDetails, NavSelectorStyle } from '../nav-selector';\nimport { NavSelectorState } from '../nav-selector.state';\n\n@Injectable()\nexport class NavSelectorLeafPresenter {\n private readonly navSelectorState = inject(NavSelectorState);\n\n styleMenu = computed(() => this.navSelectorState.style() === NavSelectorStyle.MENU);\n hideAvatar = this.styleMenu;\n\n expanded = computed(() => this.navSelectorState.expanded());\n texts = computed(() => this.navSelectorState.texts());\n isMultipleModeEnabled = computed(() => this.navSelectorState.isMultipleModeEnabled());\n\n selectLeaf(leaf: InternalNavSelectorLeaf) {\n this.navSelectorState.onLeafClicked(leaf);\n }\n\n onLeafToggleFolding(leaf: InternalNavSelectorLeaf) {\n this.navSelectorState.onLeafToggleFolding(leaf);\n }\n\n selectOnlyLeaf(leaf: InternalNavSelectorLeaf) {\n this.navSelectorState.selectOnlyLeaf(leaf);\n }\n\n fold(leaf: InternalNavSelectorLeaf) {\n this.navSelectorState.fold(leaf);\n }\n\n unfold(leaf: InternalNavSelectorLeaf) {\n this.navSelectorState.unfold(leaf);\n }\n\n onLeafDetailClicked(detail: InternalNavSelectorLeafDetails) {\n this.navSelectorState.onLeafDetailClicked(detail);\n }\n}\n","import { ActionDropdownComponent, ActionDropdownItem, ActionDropdownTriggerDirective } from '@agorapulse/ui-components/action-dropdown';\nimport { AvatarComponent } from '@agorapulse/ui-components/avatar';\nimport { CheckboxComponent } from '@agorapulse/ui-components/checkbox';\nimport { CounterComponent } from '@agorapulse/ui-components/counter';\nimport { UI_COMPONENTS_SYMBOLS } from '@agorapulse/ui-components/providers';\nimport { TooltipDirective } from '@agorapulse/ui-components/tooltip';\nimport {\n apChevronDown,\n apChevronUp,\n apErrorFill,\n apFeatureLock,\n SymbolComponent,\n SymbolRegistry,\n withSymbols,\n} from '@agorapulse/ui-symbol';\nimport { apMore } from '@agorapulse/ui-symbol/icons';\nimport { animate, keyframes, state, style, transition, trigger } from '@angular/animations';\nimport {\n afterEveryRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { NavSelectorPopoverTriggerDirective } from '../directives/nav-selector-popover-trigger.directive';\nimport { TreeNodeAccessibilityDirective } from '../directives/tree-node-accessibility.directive';\nimport { InternalNavSelectorLeaf, InternalNavSelectorLeafDetails, NavSelectorLeafActionClickedEvent } from '../nav-selector';\nimport { NavSelectorLeafDetailComponent } from '../nav-selector-leaf-detail/nav-selector-leaf-detail.component';\nimport { NavSelectorLeafDetailsComponent } from '../nav-selector-leaf-details/nav-selector-leaf-details.component';\nimport { NavSelectorPopoverItemComponent } from '../nav-selector-popover/nav-selector-popover-item.component';\nimport { NavSelectorPopoverComponent } from '../nav-selector-popover/nav-selector-popover.component';\nimport { NavSelectorLeafPresenter } from './nav-selector-leaf.presenter';\n\n@Component({\n selector: 'ap-nav-selector-leaf',\n templateUrl: './nav-selector-leaf.component.html',\n styleUrls: ['./nav-selector-leaf.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ActionDropdownComponent,\n ActionDropdownTriggerDirective,\n AvatarComponent,\n CounterComponent,\n SymbolComponent,\n NavSelectorLeafDetailsComponent,\n CheckboxComponent,\n TooltipDirective,\n NavSelectorLeafDetailComponent,\n NavSelectorLeafDetailComponent,\n TreeNodeAccessibilityDirective,\n NavSelectorPopoverComponent,\n NavSelectorPopoverTriggerDirective,\n NavSelectorPopoverItemComponent,\n ],\n providers: [withSymbols(apErrorFill, apFeatureLock, apChevronDown, apChevronUp, apMore), NavSelectorLeafPresenter],\n host: {\n '[class.minified]': '!navSelectorLeafPresenter.expanded()',\n role: 'treeitem',\n '(keydown.arrowLeft)': 'fold($event)',\n '(keydown.arrowRight)': 'unfold($event)',\n },\n animations: [\n /**\n * Overflow hidden is put only during the animation and on the collapsed state because if it is put on the expanded state then children’s border will be cut (hover / focus)\n */\n trigger('accordion', [\n state(\n 'collapsed',\n style({\n maxHeight: 0,\n overflow: 'hidden',\n })\n ),\n state(\n 'expanded',\n style({\n maxHeight: 'initial',\n })\n ),\n transition('collapsed => expanded', [\n animate('250ms cubic-bezier(.4, 0, .3, 1)', style({ overflow: 'hidden', maxHeight: '{{maxHeight}}' })),\n ]),\n transition('expanded => collapsed', [\n animate(\n '250ms cubic-bezier(.4, 0, .3, 1)',\n keyframes([style({ overflow: 'hidden', maxHeight: '{{maxHeight}}' }), style({ maxHeight: 0 })])\n ),\n ]),\n ]),\n ],\n})\nexport class NavSelectorLeafComponent {\n private readonly symbolRegistry = inject(SymbolRegistry);\n\n leaf = input.required<InternalNavSelectorLeaf>();\n\n actionClicked = output<NavSelectorLeafActionClickedEvent>();\n\n initial = computed(() => this.leaf().alias[0].toUpperCase());\n foldSymbol = computed(() => (this.leaf().folded ? 'chevron-down' : 'chevron-up'));\n\n focused = signal(false);\n\n aliasEl = viewChild<ElementRef>('alias');\n aliasBoundedClientRect = signal<{\n offsetWidth: number;\n offsetHeight: number;\n scrollWidth: number;\n scrollHeight: number;\n }>({\n offsetWidth: 0,\n offsetHeight: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n });\n\n tooltipContent = computed(() => {\n const content = [];\n\n const el = this.aliasBoundedClientRect();\n if (!this.navSelectorLeafPresenter.expanded() || el.offsetWidth < el.scrollWidth || el.offsetHeight < el.scrollHeight) {\n content.push(this.leaf().alias);\n }\n\n const disableReason = this.leaf().disableReason;\n if (disableReason) {\n content.push(disableReason);\n }\n\n if (this.leaf().displayFeatureLocked) {\n content.push(this.navSelectorLeafPresenter.texts().featureLocked);\n }\n\n if (this.leaf().displayTokenInvalid) {\n content.push(this.navSelectorLeafPresenter.texts().tokenInvalid);\n }\n\n return content.join('<br>');\n });\n tooltipDisabled = computed(() => !this.tooltipContent().length || this.leaf().detailsDisplayable);\n\n foldedWithDelay = signal(true);\n\n network = computed(() => (this.leaf().network ? this.leaf().network : undefined));\n\n leafActions = computed<ActionDropdownItem[]>(() => {\n return this.leaf().actions.map(action => ({\n id: action.id,\n label: action.label,\n startSymbolId: action.icon ?? undefined,\n disabled: action.status === 'disabled',\n featureLockEnabled: action.status === 'locked',\n dividerEnabled: action.dividerEnabled ?? false,\n }));\n });\n\n constructor(\n private el: ElementRef,\n public navSelectorLeafPresenter: NavSelectorLeafPresenter\n ) {\n this.symbolRegistry.withSymbols(...(inject(UI_COMPONENTS_SYMBOLS, { optional: true })?.flat() ?? []));\n\n afterEveryRender(() =>\n untracked(() => {\n const newMaxHeight = this.computeMaxHeight();\n if (this.maxHeight() !== newMaxHeight) {\n this.maxHeight.set(newMaxHeight);\n }\n this.updateAliasBoundedClientRect();\n })\n );\n\n effect(() => {\n const folded = this.leaf().folded;\n untracked(() => {\n if (folded) {\n setTimeout(() => this.foldedWithDelay.set(true), 150);\n } else {\n this.foldedWithDelay.set(false);\n }\n });\n });\n }\n\n animationState = computed(() => (this.leaf().folded ? 'collapsed' : 'expanded'));\n\n maxHeight = signal('0px');\n\n onClick(event: Event) {\n event.stopImmediatePropagation();\n this.navSelectorLeafPresenter.selectLeaf(this.leaf());\n }\n\n toggleFolding(event: Event) {\n event.stopImmediatePropagation();\n this.navSelectorLeafPresenter.onLeafToggleFolding(this.leaf());\n }\n\n clickOnToggleFolding(event: Event) {\n event.stopImmediatePropagation();\n // Remove the focus from the toggle folding so we do not have the :focus-within style on the leaf\n if (event.currentTarget && 'blur' in event.currentTarget && typeof event.currentTarget.blur === 'function') {\n event.currentTarget.blur();\n }\n this.navSelectorLeafPresenter.onLeafToggleFolding(this.leaf());\n }\n\n selectOnly(event: Event) {\n event.stopImmediatePropagation();\n // (event.target as Element).blur();\n this.navSelectorLeafPresenter.selectOnlyLeaf(this.leaf());\n }\n\n clickOnSelectOnly(event: Event) {\n event.stopImmediatePropagation();\n // Remove the focus from the select only so we do not have the :focus-within style on the leaf\n if (event.currentTarget && 'blur' in event.currentTarget && typeof event.currentTarget.blur === 'function') {\n event.currentTarget.blur();\n }\n this.navSelectorLeafPresenter.selectOnlyLeaf(this.leaf());\n }\n\n /**\n * For checkboxes, as they do not stop event propagation, we need to stop it manually\n */\n eventStopper(event: Event) {\n event.stopImmediatePropagation();\n }\n\n onCheckboxToggle() {\n this.navSelectorLeafPresenter.selectLeaf(this.leaf());\n }\n\n onSpaceOrEnterPressed(event: Event) {\n event.stopImmediatePropagation();\n if (document.activeElement === this.el.nativeElement.querySelector('.nav-selector-leaf')) {\n if (this.leaf().foldable) {\n this.toggleFolding(event);\n } else {\n this.navSelectorLeafPresenter.selectLeaf(this.leaf());\n }\n }\n }\n\n fold(event: Event) {\n event.stopImmediatePropagation();\n this.navSelectorLeafPresenter.fold(this.leaf());\n }\n\n unfold(event: Event) {\n event.stopImmediatePropagation();\n this.navSelectorLeafPresenter.unfold(this.leaf());\n }\n\n onDetailClicked(event: Event, detail: InternalNavSelectorLeafDetails) {\n event.stopImmediatePropagation();\n this.navSelectorLeafPresenter.onLeafDetailClicked(detail);\n }\n\n onActionClicked(action: ActionDropdownItem) {\n this.actionClicked.emit({\n leafUid: this.leaf().uid,\n actionName: action.id ?? '',\n });\n }\n\n private computeMaxHeight() {\n let maxHeight = this.el.nativeElement.clientHeight;\n if (this.leaf().folded) {\n maxHeight = this.el.nativeElement.clientHeight * this.leaf().details.length;\n }\n return `${maxHeight}px`;\n }\n\n private updateAliasBoundedClientRect() {\n const el = this.aliasEl()?.nativeElement;\n if (el) {\n const boundedClientRect = {\n offsetWidth: el.offsetWidth,\n offsetHeight: el.offsetHeight,\n scrollWidth: el.scrollWidth,\n scrollHeight: el.scrollHeight,\n };\n if (JSON.stringify(this.aliasBoundedClientRect()) !== JSON.stringify(boundedClientRect)) {\n this.aliasBoundedClientRect.set(boundedClientRect);\n }\n }\n }\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n@if (navSelectorLeafPresenter.expanded()) {\n <div\n class=\"nav-selector-leaf\"\n apTooltipPosition=\"right\"\n [attr.aria-selected]=\"leaf().selected\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [class.multiple-mode]=\"navSelectorLeafPresenter.isMultipleModeEnabled()\"\n [class.feature-locked]=\"leaf().displayFeatureLocked\"\n [class.selected]=\"leaf().selected\"\n [class.token-error]=\"leaf().displayTokenInvalid\"\n [class.disabled]=\"leaf().disabled\"\n [class.detail-selected]=\"leaf().detailSelected\"\n [class.actions-displayable]=\"leaf().actionsDisplayable\"\n [class.details-displayable]=\"leaf().detailsDisplayable\"\n [class.style-menu]=\"navSelectorLeafPresenter.styleMenu()\"\n [apTreeNodeAccessibility]=\"leaf()\"\n (keydown.space)=\"onSpaceOrEnterPressed($event)\"\n (keydown.enter)=\"onSpaceOrEnterPressed($event)\"\n (focusin)=\"focused.set(true)\"\n (focusout)=\"focused.set(false)\"\n (click)=\"onClick($event)\">\n @if (navSelectorLeafPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"leaf().uid\"\n [checked]=\"leaf().selected\"\n [aria-label]=\"leaf().alias\"\n [disabled]=\"leaf().disabled || !leaf().selectable\"\n (click)=\"eventStopper($event)\"\n (change)=\"onCheckboxToggle()\" />\n }\n @if (!navSelectorLeafPresenter.hideAvatar()) {\n <ap-avatar\n size=\"24\"\n [profilePicture]=\"leaf().pictureUrl ?? undefined\"\n [network]=\"$any(leaf().network)\"\n [showInitials]=\"initial()\" />\n }\n\n @if (leaf().startSymbolId || leaf().startDotColor) {\n <div class=\"start-elements\">\n @if (leaf().startSymbolId) {\n <ap-symbol\n size=\"sm\"\n color=\"grey-blue\"\n [symbolId]=\"leaf().startSymbolId\" />\n }\n @if (leaf().startDotColor) {\n <div class=\"start-dot-wrapper\">\n <div\n class=\"start-dot\"\n [style.background-color]=\"leaf().startDotColor\"></div>\n </div>\n }\n </div>\n }\n\n <span\n #alias\n class=\"caption\">\n {{ leaf().alias }}\n </span>\n\n <a\n class=\"standalone only-button\"\n role=\"button\"\n [attr.aria-label]=\"'Select only ' + leaf().alias\"\n [attr.tabindex]=\"leaf().accessibility.tabIndex\"\n (keydown.space)=\"selectOnly($event)\"\n (keydown.enter)=\"selectOnly($event)\"\n (click)=\"clickOnSelectOnly($event)\">\n {{ navSelectorLeafPresenter.texts().only }}\n </a>\n\n <div class=\"end-actions\">\n @if (leaf().actionsDisplayable) {\n <ap-symbol\n class=\"actions-menu\"\n size=\"sm\"\n symbolId=\"more\"\n color=\"basic-grey\"\n [id]=\"leaf().uid + '_ActionMenuTrackingClick'\"\n [apActionDropdownTrigger]=\"actionDropdown\"\n [tabindex]=\"leaf().accessibility.tabIndex\"\n [attr.aria-label]=\"'Action menu ' + leaf().alias\" />\n <ap-action-dropdown\n #actionDropdown\n [items]=\"leafActions()\"\n (itemClick)=\"onActionClicked($event)\" />\n }\n\n @if (leaf().foldable) {\n <ap-symbol\n class=\"folding-button\"\n size=\"sm\"\n role=\"button\"\n [tabindex]=\"leaf().accessibility.tabIndex\"\n [attr.aria-label]=\"'Toggle ' + leaf().alias\"\n [symbolId]=\"foldSymbol()\"\n (click)=\"clickOnToggleFolding($event)\"\n (keydown.space)=\"toggleFolding($event)\"\n (keydown.enter)=\"toggleFolding($event)\" />\n }\n </div>\n\n @if (leaf().displayCounter) {\n <ap-counter\n color=\"orange\"\n size=\"normal\"\n [background]=\"false\">\n {{ leaf().counter }}\n </ap-counter>\n }\n @if (leaf().displayTokenInvalid) {\n <ap-symbol\n size=\"sm\"\n symbolId=\"error_fill\" />\n }\n @if (leaf().displayFeatureLocked) {\n <ap-symbol\n size=\"sm\"\n symbolId=\"feature-lock\" />\n }\n </div>\n\n <div\n class=\"details-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <ap-nav-selector-leaf-details\n [details]=\"leaf().details\"\n [leaf]=\"leaf()\" />\n }\n </div>\n} @else {\n <div\n #minified\n class=\"nav-selector-leaf\"\n apTooltipPosition=\"right\"\n [apNavSelectorPopoverTrigger]=\"minifiedPopover\"\n [apNavSelectorPopoverDisabled]=\"!leaf().detailsDisplayable\"\n [apNavSelectorPopoverTriggerMode]=\"{ click: false, hover: true }\"\n [class.feature-locked]=\"leaf().displayFeatureLocked\"\n [class.selected]=\"leaf().selected || leaf().detailSelected\"\n [class.token-error]=\"leaf().displayTokenInvalid\"\n [class.multiple-mode]=\"navSelectorLeafPresenter.isMultipleModeEnabled()\"\n [class.disabled]=\"leaf().disabled\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"leaf()\"\n (keydown.space)=\"onSpaceOrEnterPressed($event)\"\n (keydown.enter)=\"onSpaceOrEnterPressed($event)\"\n (click)=\"onClick($event)\">\n @if (navSelectorLeafPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"leaf().uid\"\n [checked]=\"leaf().selected\"\n [disabled]=\"leaf().disabled || !leaf().selectable\" />\n }\n\n <div class=\"avatar-container\">\n <ap-avatar\n size=\"24\"\n [profilePicture]=\"leaf().pictureUrl ?? undefined\"\n [network]=\"$any(leaf().network)\"\n [showInitials]=\"initial()\" />\n\n <div class=\"status\">\n @if (leaf().displayCounter) {\n <ap-counter\n class=\"counter-override\"\n color=\"orange\"\n size=\"normal\"\n [notif]=\"true\"\n [background]=\"true\">\n {{ leaf().counter }}\n </ap-counter>\n }\n @if (leaf().displayTokenInvalid) {\n <ap-symbol\n size=\"sm\"\n symbolId=\"error_fill\" />\n }\n @if (leaf().displayFeatureLocked) {\n <ap-symbol\n size=\"sm\"\n symbolId=\"feature-lock\" />\n }\n </div>\n </div>\n\n <ap-nav-selector-popover\n #minifiedPopover\n placement=\"right\"\n [popoverTitle]=\"leaf().alias\"\n [offset]=\"{ mainAxis: 0, crossAxis: -36.5 }\">\n @for (detail of leaf().details; track detail.uid) {\n <ap-nav-selector-popover-item\n item\n [selected]=\"detail.selected\"\n [disabled]=\"detail.displayError\"\n [name]=\"detail.alias\"\n (click)=\"onDetailClicked($event, detail)\">\n <ap-nav-selector-leaf-detail\n [embedded]=\"true\"\n [detail]=\"detail\" />\n </ap-nav-selector-popover-item>\n }\n </ap-nav-selector-popover>\n </div>\n}\n","import { computed, Injectable } from '@angular/core';\nimport { InternalNavSelectorGroup } from '../nav-selector';\nimport { NavSelectorState } from '../nav-selector.state';\n\n@Injectable()\nexport class NavSelectorGroupPresenter {\n expanded = computed(() => this.navSelectorState.expanded());\n texts = computed(() => this.navSelectorState.texts());\n isMultipleModeEnabled = computed(() => this.navSelectorState.isMultipleModeEnabled());\n\n constructor(private navSelectorState: NavSelectorState) {}\n\n onGroupSelected(group: InternalNavSelectorGroup) {\n this.navSelectorState.onNodeSelect(group);\n }\n\n onGroupToggleFolding(group: InternalNavSelectorGroup) {\n this.navSelectorState.onGroupToggleFolding(group);\n }\n\n fold(group: InternalNavSelectorGroup) {\n this.navSelectorState.fold(group);\n }\n\n unfold(group: InternalNavSelectorGroup) {\n this.navSelectorState.unfold(group);\n }\n}\n","import { AvatarComponent } from '@agorapulse/ui-components/avatar';\nimport { CheckboxComponent } from '@agorapulse/ui-components/checkbox';\nimport { CounterComponent } from '@agorapulse/ui-components/counter';\nimport { TooltipDirective } from '@agorapulse/ui-components/tooltip';\nimport { apChevronDown, apChevronUp, apErrorFill, apFolder, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport { animate, keyframes, state, style, transition, trigger } from '@angular/animations';\nimport {\n afterEveryRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { TreeNodeAccessibilityDirective } from '../directives/tree-node-accessibility.directive';\nimport { InternalNavSelectorGroup, NavSelectorLeafActionClickedEvent } from '../nav-selector';\nimport { NavSelectorLeafComponent } from '../nav-selector-leaf/nav-selector-leaf.component';\nimport { computeNumberOfDisplayableChildrenOnUnfold } from '../utils/leaf.utils';\nimport { NavSelectorGroupPresenter } from './nav-selector-group.presenter';\n\n@Component({\n selector: 'ap-nav-selector-group',\n templateUrl: './nav-selector-group.component.html',\n styleUrls: ['./nav-selector-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [withSymbols(apFolder, apErrorFill, apChevronDown, apChevronUp), NavSelectorGroupPresenter],\n imports: [\n SymbolComponent,\n CounterComponent,\n NavSelectorLeafComponent,\n CheckboxComponent,\n AvatarComponent,\n TooltipDirective,\n TreeNodeAccessibilityDirective,\n ],\n host: {\n '[class.minified]': '!navSelectorGroupPresenter.expanded()',\n '(keydown.arrowLeft)': 'fold($event)',\n '(keydown.arrowRight)': 'unfold($event)',\n },\n animations: [\n /**\n * Overflow hidden is put only during the animation and on the collapsed state because if it is put on the expanded state then children’s border will be cut (hover / focus)\n */\n trigger('accordion', [\n state(\n 'collapsed',\n style({\n maxHeight: 0,\n overflow: 'hidden',\n })\n ),\n state(\n 'expanded',\n style({\n maxHeight: 'initial',\n })\n ),\n transition('collapsed => expanded', [\n animate('250ms cubic-bezier(.4, 0, .3, 1)', style({ maxHeight: '{{maxHeight}}', overflow: 'hidden' })),\n ]),\n transition('expanded => collapsed', [\n animate(\n '250ms cubic-bezier(.4, 0, .3, 1)',\n keyframes([style({ maxHeight: '{{maxHeight}}', overflow: 'hidden' }), style({ maxHeight: 0, overflow: 'hidden' })])\n ),\n ]),\n ]),\n ],\n})\nexport class NavSelectorGroupComponent {\n group = input.required<InternalNavSelectorGroup>();\n actionClicked = output<NavSelectorLeafActionClickedEvent>();\n\n foldSymbol = computed(() => (this.group().folded ? 'chevron-down' : 'chevron-up'));\n\n aliasEl = viewChild<ElementRef>('alias');\n aliasBoundedClientRect = signal<{\n offsetWidth: number;\n offsetHeight: number;\n scrollWidth: number;\n scrollHeight: number;\n }>({\n offsetWidth: 0,\n offsetHeight: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n });\n\n tooltipContent = computed(() => {\n const content = [];\n\n const el = this.aliasBoundedClientRect();\n if (!this.navSelectorGroupPresenter.expanded() || el.offsetWidth < el.scrollWidth || el.offsetHeight < el.scrollHeight) {\n content.push(this.group().alias);\n }\n\n if (this.group().displayTokenInvalid) {\n content.push(this.navSelectorGroupPresenter.texts().groupTokenInvalid);\n }\n\n return content.join('<br>');\n });\n tooltipDisabled = computed(() => !this.tooltipContent().length);\n\n foldedWithDelay = signal(true);\n\n animationState = computed(() => (this.group().folded ? 'collapsed' : 'expanded'));\n\n constructor(\n private el: ElementRef,\n public navSelectorGroupPresenter: NavSelectorGroupPresenter\n ) {\n afterEveryRender(() =>\n untracked(() => {\n const maxHeight = this.computeMaxHeight();\n if (this.maxHeight() !== maxHeight) {\n this.maxHeight.set(maxHeight);\n }\n this.updateAliasBoundedClientRect();\n })\n );\n\n effect(() => {\n const folded = this.group().folded;\n untracked(() => {\n if (folded) {\n setTimeout(() => this.foldedWithDelay.set(true), 150);\n } else {\n this.foldedWithDelay.set(false);\n }\n });\n });\n }\n\n maxHeight = signal('0px');\n\n onKeydownSpaceOrEnter(event: Event) {\n event.stopImmediatePropagation();\n // Prevent to toggle folding when focus is on the checkbox\n if (document.activeElement === this.el.nativeElement.querySelector('.content')) {\n this.toggleFolding(event);\n } else {\n this.navSelectorGroupPresenter.onGroupSelected(this.group());\n }\n }\n\n onGroupSelected() {\n this.navSelectorGroupPresenter.onGroupSelected(this.group());\n }\n\n /**\n * For checkboxes, as they do not stop event propagation, we need to stop it manually\n */\n eventStopper(event: Event) {\n event.stopImmediatePropagation();\n }\n\n toggleFolding(event: Event) {\n event.stopImmediatePropagation();\n this.navSelectorGroupPresenter.onGroupToggleFolding(this.group());\n }\n\n fold(event: Event) {\n event.stopImmediatePropagation();\n this.navSelectorGroupPresenter.fold(this.group());\n }\n\n unfold(event: Event) {\n event.stopImmediatePropagation();\n this.navSelectorGroupPresenter.unfold(this.group());\n }\n\n private computeMaxHeight() {\n let maxHeight = this.el.nativeElement.clientHeight;\n if (this.group().folded) {\n const numberOfDisplayableChildren = computeNumberOfDisplayableChildrenOnUnfold(this.group());\n maxHeight = this.el.nativeElement.clientHeight * numberOfDisplayableChildren;\n }\n return `${maxHeight}px`;\n }\n\n private updateAliasBoundedClientRect() {\n const el = this.aliasEl()?.nativeElement;\n if (el) {\n const boundedClientRect = {\n offsetWidth: el.offsetWidth,\n offsetHeight: el.offsetHeight,\n scrollWidth: el.scrollWidth,\n scrollHeight: el.scrollHeight,\n };\n if (JSON.stringify(this.aliasBoundedClientRect()) !== JSON.stringify(boundedClientRect)) {\n this.aliasBoundedClientRect.set(boundedClientRect);\n }\n }\n }\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n@if (navSelectorGroupPresenter.expanded()) {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"group()\"\n (keydown.space)=\"onKeydownSpaceOrEnter($event)\"\n (keydown.enter)=\"onKeydownSpaceOrEnter($event)\"\n (click)=\"toggleFolding($event)\">\n @if (navSelectorGroupPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"group().uid\"\n [checked]=\"group().selected\"\n [disabled]=\"!group().selectable\"\n [indeterminate]=\"group().undeterminedSelection\"\n (click)=\"eventStopper($event)\"\n (change)=\"onGroupSelected()\" />\n }\n\n <ap-symbol\n symbolId=\"folder\"\n size=\"sm\" />\n\n <span\n #alias\n class=\"caption\"\n [title]=\"group().alias\">\n {{ group().alias }}\n </span>\n\n @if (group().displayTokenInvalid) {\n <ap-symbol\n symbolId=\"error_fill\"\n size=\"sm\" />\n }\n\n @if (group().displayCounter) {\n <ap-counter\n color=\"orange\"\n size=\"normal\"\n [background]=\"false\">\n {{ group().counter }}\n </ap-counter>\n }\n\n <ap-symbol\n size=\"sm\"\n class=\"folding-button\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @for (child of group().children; track child.uid) {\n @if (!child.hidden) {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n }\n </div>\n }\n </div>\n} @else {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [class.token-invalid]=\"group().displayTokenInvalid\"\n [class.multiple-mode]=\"navSelectorGroupPresenter.isMultipleModeEnabled()\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"group()\"\n (click)=\"toggleFolding($event)\"\n (keydown.space)=\"onKeydownSpaceOrEnter($event)\"\n (keydown.enter)=\"onKeydownSpaceOrEnter($event)\">\n @if (navSelectorGroupPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"group().uid\"\n [checked]=\"group().selected\"\n [disabled]=\"!group().selectable\"\n [indeterminate]=\"group().undeterminedSelection\"\n (click)=\"eventStopper($event)\"\n (change)=\"onGroupSelected()\" />\n }\n\n <div class=\"picture-url-sample-container\">\n <div class=\"picture-url-sample\">\n <div class=\"avatars\">\n @for (pictureUrlSample of group().childrenPictureUrlSample; track pictureUrlSample) {\n <ap-avatar\n class=\"avatar-sample\"\n [size]=\"24\"\n [profilePicture]=\"pictureUrlSample.url ?? undefined\"\n [showInitials]=\"pictureUrlSample.initial\" />\n }\n </div>\n\n <div class=\"status\">\n @if (group().displayCounter) {\n <ap-counter\n class=\"counter-override\"\n color=\"orange\"\n size=\"normal\"\n [notif]=\"true\"\n [background]=\"true\">\n {{ group().counter }}\n </ap-counter>\n }\n </div>\n </div>\n\n <div class=\"toggle\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n </div>\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @for (child of group().children; track child.uid) {\n @if (!child.hidden) {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n }\n </div>\n }\n </div>\n}\n","import { computed, Injectable } from '@angular/core';\nimport { InternalNavSelectorCategory } from '../nav-selector';\nimport { NavSelectorState } from '../nav-selector.state';\n\n@Injectable()\nexport class NavSelectorCategoryPresenter {\n expanded = computed(() => this.navSelectorState.expanded());\n\n constructor(private navSelectorState: NavSelectorState) {}\n\n toggleFolding(event: Event, category: InternalNavSelectorCategory) {\n event.stopImmediatePropagation();\n this.navSelectorState.onGroupToggleFolding(category);\n }\n\n fold(event: Event, category: InternalNavSelectorCategory) {\n event.stopImmediatePropagation();\n this.navSelectorState.fold(category);\n }\n\n unfold(event: Event, category: InternalNavSelectorCategory) {\n event.stopImmediatePropagation();\n this.navSelectorState.unfold(category);\n }\n}\n","import { AvatarComponent } from '@agorapulse/ui-components/avatar';\nimport { TooltipDirective } from '@agorapulse/ui-components/tooltip';\nimport { apChevronDown, apChevronUp, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport { apFeatureLock, apPlus } from '@agorapulse/ui-symbol/icons';\nimport { animate, keyframes, state, style, transition, trigger } from '@angular/animations';\nimport {\n afterEveryRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { TreeNodeAccessibilityDirective } from '../directives/tree-node-accessibility.directive';\nimport { InternalNavSelectorCategory, NavSelectorCategoryEmptyStateActionEvent, NavSelectorLeafActionClickedEvent } from '../nav-selector';\nimport { NavSelectorGroupComponent } from '../nav-selector-group/nav-selector-group.component';\nimport { NavSelectorLeafComponent } from '../nav-selector-leaf/nav-selector-leaf.component';\nimport { computeNumberOfDisplayableChildrenOnUnfold } from '../utils/leaf.utils';\nimport { NavSelectorCategoryPresenter } from './nav-selector-category.presenter';\n\n@Component({\n selector: 'ap-nav-selector-category',\n templateUrl: './nav-selector-category.component.html',\n styleUrls: ['./nav-selector-category.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NavSelectorLeafComponent,\n SymbolComponent,\n NavSelectorGroupComponent,\n TreeNodeAccessibilityDirective,\n TooltipDirective,\n AvatarComponent,\n ],\n providers: [withSymbols(apChevronDown, apChevronUp, apFeatureLock, apPlus), NavSelectorCategoryPresenter],\n host: {\n '[class.minified]': '!navSelectorCategoryPresenter.expanded()',\n '(keydown.arrowLeft)': 'navSelectorCategoryPresenter.fold($event, this.category())',\n '(keydown.arrowRight)': 'navSelectorCategoryPresenter.unfold($event, this.category())',\n },\n animations: [\n /**\n * Overflow hidden is put only during the animation and on the collapsed state because if it is put on the expanded state then children’s border will be cut (hover / focus)\n */\n trigger('accordion', [\n state(\n 'collapsed',\n style({\n maxHeight: 0,\n overflow: 'hidden',\n })\n ),\n state(\n 'expanded',\n style({\n maxHeight: 'initial',\n })\n ),\n transition('collapsed => expanded', [\n animate('250ms cubic-bezier(.4, 0, .3, 1)', style({ overflow: 'hidden', maxHeight: '{{maxHeight}}' })),\n ]),\n transition('expanded => collapsed', [\n animate(\n '250ms cubic-bezier(.4, 0, .3, 1)',\n keyframes([style({ maxHeight: '{{maxHeight}}' }), style({ overflow: 'hidden', maxHeight: 0 })])\n ),\n ]),\n ]),\n ],\n})\nexport class NavSelectorCategoryComponent {\n category = input.required<InternalNavSelectorCategory>();\n emptyStateActionClicked = output<NavSelectorCategoryEmptyStateActionEvent>();\n actionClicked = output<NavSelectorLeafActionClickedEvent>();\n\n foldSymbol = computed(() => (this.category().folded ? 'chevron-down' : 'chevron-up'));\n\n foldedWithDelay = signal(true);\n\n animationState = computed(() => (this.category().folded ? 'collapsed' : 'expanded'));\n\n aliasEl = viewChild<ElementRef>('alias');\n aliasBoundedClientRect = signal<{\n offsetWidth: number;\n offsetHeight: number;\n scrollWidth: number;\n scrollHeight: number;\n }>({\n offsetWidth: 0,\n offsetHeight: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n });\n\n tooltipContent = computed(() => {\n const el = this.aliasBoundedClientRect();\n if (!this.navSelectorCategoryPresenter.expanded() || el.offsetWidth < el.scrollWidth || el.offsetHeight < el.scrollHeight) {\n return this.category().alias;\n }\n\n return '';\n });\n tooltipDisabled = computed(() => !this.tooltipContent().length);\n\n constructor(\n private el: ElementRef,\n public navSelectorCategoryPresenter: NavSelectorCategoryPresenter\n ) {\n afterEveryRender(() =>\n untracked(() => {\n const maxHeight = this.computeMaxHeight();\n if (this.maxHeight() !== maxHeight) {\n this.maxHeight.set(maxHeight);\n }\n this.updateAliasBoundedClientRect();\n })\n );\n\n effect(() => {\n const folded = this.category().folded;\n untracked(() => {\n if (folded) {\n setTimeout(() => this.foldedWithDelay.set(true), 150);\n } else {\n this.foldedWithDelay.set(false);\n }\n });\n });\n }\n\n maxHeight = signal('0px');\n\n protected onEmptyStateActionClick(name: string) {\n this.emptyStateActionClicked.emit({ actionName: name });\n }\n\n private computeMaxHeight() {\n let maxHeight = this.el.nativeElement.clientHeight;\n if (this.category().folded) {\n const numberOfDisplayableChildren = computeNumberOfDisplayableChildrenOnUnfold(this.category());\n maxHeight = this.el.nativeElement.clientHeight * numberOfDisplayableChildren;\n }\n return `${maxHeight}px`;\n }\n\n private updateAliasBoundedClientRect() {\n const el = this.aliasEl()?.nativeElement;\n if (el) {\n const boundedClientRect = {\n offsetWidth: el.offsetWidth,\n offsetHeight: el.offsetHeight,\n scrollWidth: el.scrollWidth,\n scrollHeight: el.scrollHeight,\n };\n if (JSON.stringify(this.aliasBoundedClientRect()) !== JSON.stringify(boundedClientRect)) {\n this.aliasBoundedClientRect.set(boundedClientRect);\n }\n }\n }\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n@if (navSelectorCategoryPresenter.expanded()) {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"category()\"\n (keydown.space)=\"navSelectorCategoryPresenter.toggleFolding($event, category())\"\n (keydown.enter)=\"navSelectorCategoryPresenter.toggleFolding($event, category())\"\n (click)=\"navSelectorCategoryPresenter.toggleFolding($event, category())\">\n @if (category().avatarDisplayed) {\n @if (category().avatarPictureUrlDisplayed) {\n <ap-avatar\n size=\"16\"\n [showInitials]=\"true\"\n [username]=\"category().alias\"\n [profilePicture]=\"category().avatarPictureUrl\"\n [rounded]=\"category().avatarRounded\" />\n } @else {\n <ap-symbol\n size=\"sm\"\n color=\"grey-blue\"\n [symbolId]=\"category().avatarSymbolId\" />\n }\n }\n\n <span\n #alias\n class=\"caption\">\n {{ category().alias }}\n </span>\n\n <ap-symbol\n class=\"folding-button\"\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @if (category().children.length === 0) {\n <div class=\"empty-state\">\n @if (category().emptyStateTitle) {\n <div class=\"empty-state__title\">\n {{ category().emptyStateTitle }}\n </div>\n }\n @if (category().emptyStateAction; as emptyStateAction) {\n <a\n class=\"standalone\"\n [attr.id]=\"emptyStateAction?.id\"\n (click)=\"onEmptyStateActionClick(emptyStateAction.name)\">\n @if (emptyStateAction?.symbolId; as symbolId) {\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"symbolId\" />\n }\n {{ emptyStateAction.title }}\n @if (emptyStateAction?.featureLocked) {\n <ap-symbol\n size=\"sm\"\n color=\"purple\"\n symbolId=\"feature-lock\" />\n }\n </a>\n }\n </div>\n } @else {\n @for (child of category().children; track child.uid) {\n @if (!child.hidden) {\n <div\n class=\"entry\"\n [class.folder]=\"child.type === 'GROUP'\">\n @if (child.type === 'LEAF') {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (child.type === 'GROUP') {\n <ap-nav-selector-group\n [group]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n </div>\n }\n }\n }\n </div>\n }\n </div>\n} @else {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTreeNodeAccessibility]=\"category()\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n (click)=\"navSelectorCategoryPresenter.toggleFolding($event, category())\"\n (keydown.space)=\"navSelectorCategoryPresenter.toggleFolding($event, category())\"\n (keydown.enter)=\"navSelectorCategoryPresenter.toggleFolding($event, category())\">\n <div class=\"name-container\">\n <span class=\"caption\">{{ category().alias }}</span>\n </div>\n\n <div class=\"toggle\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @for (child of category().children; track child.uid) {\n @if (!child.hidden) {\n <div\n class=\"entry\"\n [class.folder]=\"child.type === 'GROUP'\">\n @if (child.type === 'LEAF') {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (child.type === 'GROUP') {\n <ap-nav-selector-group\n [group]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n </div>\n }\n }\n </div>\n }\n </div>\n}\n","import { IconButtonComponent } from '@agorapulse/ui-components/icon-button';\nimport { InputSearchComponent } from '@agorapulse/ui-components/input-search';\nimport { apArrowExpand, apArrowReduce, apSearch, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport { animate, keyframes, style, transition, trigger } from '@angular/animations';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n effect,\n ElementRef,\n inject,\n input,\n model,\n OnInit,\n output,\n signal,\n TemplateRef,\n untracked,\n} from '@angular/core';\nimport { outputFromObservable, toObservable } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { isEqual } from 'es-toolkit';\nimport { map } from 'rxjs';\nimport {\n NavSelectorCategoryEmptyStateActionEvent,\n NavSelectorEntry,\n NavSelectorLeafActionClickedEvent,\n NavSelectorStyle,\n NavSelectorTranslatedTexts,\n} from './nav-selector';\nimport { NavSelectorCategoryComponent } from './nav-selector-category/nav-selector-category.component';\nimport { NavSelectorGroupComponent } from './nav-selector-group/nav-selector-group.component';\nimport { NavSelectorLeafComponent } from './nav-selector-leaf/nav-selector-leaf.component';\nimport { NavSelectorState } from './nav-selector.state';\nimport { computeSelectableUids, computeVisibleUids } from './utils/leaf.utils';\n\nconst AUTO_MINIFIED_STATE_WIDTH_BREAKPOINT = 1280;\nconst EXPAND_ANIMATION_TIMINGS = '250ms cubic-bezier(.4, 0, .3, 1)';\nconst EXPANDED_STATE_WIDTH = '224px';\nconst MINIFIED_STATE_WIDTH = '64px';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'ap-nav-selector',\n templateUrl: './nav-selector.component.html',\n styleUrls: ['./nav-selector.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NavSelectorLeafComponent,\n NavSelectorGroupComponent,\n NavSelectorCategoryComponent,\n InputSearchComponent,\n FormsModule,\n SymbolComponent,\n IconButtonComponent,\n NgTemplateOutlet,\n ],\n providers: [NavSelectorState, withSymbols(apArrowExpand, apArrowReduce, apSearch)],\n host: {\n '[class.minified]': '!navSelectorState.expanded()',\n '[class.embedded]': 'embedded()',\n '[@expand]': 'expansionState()',\n role: 'tree',\n '(keydown.arrowDown)': 'onArrowDown($event)',\n '(keydown.arrowUp)': 'onArrowUp($event)',\n '(window:resize)': 'onWindowResize()',\n },\n animations: [\n trigger('expand', [\n transition(\n 'expanded => minified',\n animate(\n EXPAND_ANIMATION_TIMINGS,\n keyframes([style({ width: EXPANDED_STATE_WIDTH }), style({ width: '100px' }), style({ width: MINIFIED_STATE_WIDTH })])\n )\n ),\n transition(\n 'minified => expanded',\n animate(\n EXPAND_ANIMATION_TIMINGS,\n keyframes([style({ width: MINIFIED_STATE_WIDTH }), style({ width: '50%' }), style({ width: '100%' })])\n )\n ),\n ]),\n ],\n})\nexport class NavSelectorComponent implements OnInit {\n navSelectorEntries = input.required<NavSelectorEntry[]>();\n translatedTexts = input.required<NavSelectorTranslatedTexts>();\n multipleModeEnabled = input<boolean>(false);\n\n style = input<NavSelectorStyle>(NavSelectorStyle.DEFAULT);\n\n detailsDisplayedLimit = input<number>(Number.MAX_SAFE_INTEGER);\n embedded = input<boolean>(false);\n\n /**\n * If true, the nav selector will be expanded by default. Even if the width of the screen is smaller than 1280px.\n */\n forceExpanded = input<boolean>(false);\n expandedStateLocalStorageKey = input<string>();\n\n selectedEntryUids = model.required<string[]>();\n\n actionClicked = output<NavSelectorLeafActionClickedEvent>();\n emptyStateActionClicked = output<NavSelectorCategoryEmptyStateActionEvent>();\n\n headerProjection = contentChild<TemplateRef<unknown>>('header');\n contentHeaderProjection = contentChild<TemplateRef<unknown>>('contentHeader');\n footerProjection = contentChild<TemplateRef<unknown>>('footer');\n\n displayFooter = computed(() => this.footerProjection() !== undefined);\n\n expansionState = computed(() => (this.expanded() ? 'expanded' : 'minified'));\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onExpansionStateChange = output<{ expanded: boolean }>();\n\n public navSelectorState = inject(NavSelectorState);\n private el = inject(ElementRef);\n\n componentUid = `nav-selector-${nextUniqueId++}`;\n\n ready = signal(false);\n\n private stableNavSelectorEntries = computed(() => this.navSelectorEntries(), { equal: isEqual });\n private expanded = this.navSelectorState.expanded.asReadonly();\n private entries = computed(() => this.navSelectorState.entries(), { equal: isEqual });\n private selectableEntryUids = computed(() => computeSelectableUids(this.entries()), { equal: isEqual });\n private visibleEntryUids = computed(() => computeVisibleUids(this.entries()), { equal: isEqual });\n\n visibleAccountsChange = outputFromObservable(\n toObservable(this.visibleEntryUids).pipe(map(visibleAccountUids => ({ visibleAccountUids })))\n );\n\n constructor() {\n this.navSelectorState.style = this.style;\n\n this.navSelectorState.registerOnSelectedUidsChange(selectedUids => {\n const isInit = !!this.entries().length;\n if (isInit) {\n this.selectedEntryUids.update(state => {\n if (isEqual(state, selectedUids)) {\n return state;\n }\n return selectedUids;\n });\n }\n });\n\n afterNextRender(() => {\n this.ready.set(true);\n });\n\n effect(() => {\n const expanded = this.expanded();\n untracked(() => this.onExpansionStateChange.emit({ expanded }));\n });\n\n // When inputs change, rebuild entries with current selected uids\n effect(() => {\n const multipleModeEnabled = this.multipleModeEnabled();\n const newEntries = this.stableNavSelectorEntries();\n const selectedUids = this.selectedEntryUids();\n\n untracked(() => {\n this.navSelectorState.updateMultiModeEnabled(multipleModeEnabled);\n const limit = this.detailsDisplayedLimit();\n\n if (!this.entries().length) {\n this.navSelectorState.initEntries(newEntries, selectedUids, limit);\n } else {\n // Save scroll position before updating\n const scrollContainer = this.el.nativeElement.querySelector('.nav-selector__content');\n const scrollTop = scrollContainer?.scrollTop ?? 0;\n\n this.navSelectorState.updateEntries(newEntries, selectedUids, limit);\n\n // Restore scroll position after Angular updates the DOM\n setTimeout(() => {\n if (scrollContainer) {\n scrollContainer.scrollTop = scrollTop;\n }\n });\n }\n });\n });\n\n effect(() => {\n const detailsDisplayedLimit = this.detailsDisplayedLimit();\n untracked(() => this.navSelectorState.updateDetailsDisplayedLimit(detailsDisplayedLimit));\n });\n\n // Note: No longer need of a separate effect for selectedEntryUids changes\n // The effect above (line 166) now watches selectedEntryUids and calls updateEntries\n // which properly handles disabled items through the builder\n\n effect(() => {\n const translatedTexts = this.translatedTexts();\n untracked(() => this.navSelectorState.updateTexts(translatedTexts));\n });\n }\n\n ngOnInit() {\n this.initializeExpandedState();\n }\n\n onMinifiedSearchClicked() {\n this.navSelectorState.toggleExpanded();\n setTimeout(() => this.el.nativeElement.querySelector('input').focus());\n }\n\n onArrowDown(event: Event) {\n if (this.el.nativeElement.querySelector('.nav-selector__content').contains(document.activeElement)) {\n event.stopImmediatePropagation();\n this.navSelectorState.onArrowDown();\n setTimeout(() => {\n try {\n this.el.nativeElement.querySelector('[role=\"treeitem\"][tabindex=\"0\"]').focus();\n } catch (e) {\n // If the focus fails it mean we do not have an entry with tabindex 0, so we will not be able to focus any entry anymore.\n // Force reset in this case by rebuilding the entries and resetting the focus.\n console.error('[Nav selector] Failed to focus the next entry, resetting...', e);\n this.navSelectorState.updateEntries(this.navSelectorEntries(), this.selectedEntryUids(), this.detailsDisplayedLimit());\n this.navSelectorState.resetFocus();\n }\n });\n }\n }\n\n onArrowUp(event: Event) {\n if (this.el.nativeElement.querySelector('.nav-selector__content').contains(document.activeElement)) {\n event.stopImmediatePropagation();\n this.navSelectorState.onArrowUp();\n setTimeout(() => {\n try {\n this.el.nativeElement.querySelector('[role=\"treeitem\"][tabindex=\"0\"]').focus();\n } catch (e) {\n // If the focus fails it mean we do not have an entry with tabindex 0, so we will not be able to focus any entry anymore.\n // Force reset in this case by rebuilding the entries and resetting the focus.\n console.error('[Nav selector] Failed to focus the previous entry, resetting...', e);\n this.navSelectorState.updateEntries(this.navSelectorEntries(), this.selectedEntryUids(), this.detailsDisplayedLimit());\n this.navSelectorState.resetFocus();\n }\n });\n }\n }\n\n onWindowResize() {\n if (!this.embedded() && !this.forceExpanded()) {\n if (this.expanded() && window.innerWidth < AUTO_MINIFIED_STATE_WIDTH_BREAKPOINT) {\n this.navSelectorState.forceMinify();\n } else if (!this.expanded() && window.innerWidth >= AUTO_MINIFIED_STATE_WIDTH_BREAKPOINT) {\n const expandedStateLocalStorageKey = this.expandedStateLocalStorageKey();\n if (!expandedStateLocalStorageKey || !localStorage.getItem(expandedStateLocalStorageKey)) {\n this.navSelectorState.forceExpand();\n }\n }\n }\n }\n\n private initializeExpandedState() {\n if (!this.embedded() && !this.forceExpanded()) {\n // If the expanded state is stored in local storage, we need to initialize the expanded state accordingly\n const expandedStateLocalStorageKey = this.expandedStateLocalStorageKey();\n if (expandedStateLocalStorageKey && localStorage.getItem(expandedStateLocalStorageKey)) {\n if (localStorage.getItem(expandedStateLocalStorageKey) === 'true') {\n this.navSelectorState.forceExpand();\n } else {\n this.navSelectorState.forceMinify();\n }\n } else {\n this.onWindowResize();\n }\n }\n }\n\n clickExpandButton() {\n this.navSelectorState.toggleExpanded();\n const expandedStateLocalStorageKey = this.expandedStateLocalStorageKey();\n if (expandedStateLocalStorageKey) {\n localStorage.setItem(expandedStateLocalStorageKey, this.expanded().toString());\n }\n }\n}\n","<nav [class.embedded]=\"embedded()\">\n @let headerProjectionNotNull = headerProjection();\n @let contentHeaderProjectionNotNull = contentHeaderProjection();\n @let footerProjectionNotNull = footerProjection();\n\n <div class=\"nav-selector__header\">\n @if (!embedded()) {\n @if (navSelectorState.expanded()) {\n <span class=\"h3\">{{ translatedTexts().title }}</span>\n }\n\n <button\n type=\"button\"\n class=\"expand-button\"\n [class.expanded]=\"navSelectorState.expanded()\"\n (click)=\"clickExpandButton()\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"navSelectorState.expanded() ? 'arrow-reduce' : 'arrow-expand'\" />\n </button>\n }\n\n @if (headerProjectionNotNull) {\n <ng-container\n [ngTemplateOutlet]=\"headerProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n }\n\n @if (navSelectorState.expanded()) {\n <ap-input-search\n [id]=\"componentUid + '_search'\"\n [placeholder]=\"translatedTexts().searchPlaceholder\"\n [ngModel]=\"navSelectorState.search()\"\n (ngModelChange)=\"navSelectorState.search.set($event ?? '')\" />\n } @else {\n <ap-icon-button\n type=\"stroked\"\n role=\"search\"\n (onClick)=\"onMinifiedSearchClicked()\">\n <ap-symbol symbolId=\"search\" />\n </ap-icon-button>\n }\n\n @if (contentHeaderProjectionNotNull) {\n <ng-container\n [ngTemplateOutlet]=\"contentHeaderProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n }\n </div>\n\n <div\n class=\"nav-selector__content\"\n role=\"tree\"\n [attr.aria-multiselectable]=\"navSelectorState.isMultipleModeEnabled()\">\n @for (entry of navSelectorState.entries(); track entry.uid) {\n @if (!entry.hidden) {\n <div\n class=\"entry\"\n [class.folder]=\"entry.type === 'GROUP' || entry.type === 'CATEGORY'\">\n @if (entry.type === 'LEAF') {\n <ap-nav-selector-leaf\n [leaf]=\"entry\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (entry.type === 'GROUP') {\n <ap-nav-selector-group\n [group]=\"entry\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (entry.type === 'CATEGORY') {\n <ap-nav-selector-category\n [category]=\"$any(entry)\"\n (actionClicked)=\"actionClicked.emit($event)\"\n (emptyStateActionClicked)=\"emptyStateActionClicked.emit($event)\"/>\n }\n </div>\n }\n }\n @if (navSelectorState.expanded() && navSelectorState.noResults()) {\n <div class=\"no-result\">{{ translatedTexts().noResults }}</div>\n }\n </div>\n\n @if (displayFooter() && footerProjectionNotNull) {\n <div class=\"nav-selector__footer\">\n <ng-container\n [ngTemplateOutlet]=\"footerProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n </div>\n }\n</nav>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.NavSelectorState","i1.NavSelectorLeafDetailPresenter","i2.TreeNodeAccessibilityDirective","i1.NavSelectorLeafDetailsPresenter","i1.NavSelectorLeafPresenter","i1.NavSelectorGroupPresenter","i1.NavSelectorCategoryPresenter","apFeatureLock","i1"],"mappings":";;;;;;;;;;;;;;;;;;;;;;MAqCa,+BAA+B,CAAA;AACxC,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;AACvB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;AACvB,IAAA,MAAM,GAAG,KAAK,CAAC,KAAK,kDAAC;AACrB,IAAA,EAAE,GAAG,KAAK,CAAgB,EAAE,8CAAC;AAC7B,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAU;AAC/B,IAAA,SAAS,GAAG,KAAK,CAAqB,SAAS,qDAAC;IAEvC,mBAAmB,GAAwB,MAAM,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;uGARtF,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,i7BAF7B,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5B7B;;;;;;;;;;;;;;;;;;;;AAoBT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4rCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAOS,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGhB,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAjC3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAAA,cAAA,EACxB,CAAC,mBAAmB,CAAC,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;KAoBT,EAAA,IAAA,EAEK;AACF,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,gBAAgB,EAAE,UAAU;qBAC/B,EAAA,OAAA,EACQ,CAAC,eAAe,CAAC,EAAA,SAAA,EACf,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,EAAA,MAAA,EAAA,CAAA,4rCAAA,CAAA,EAAA;;;AChCpC,MAAM,gBAAgB,GAAG;AAC5B,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,IAAI,EAAE,MAAM;CACN;AAiKH,MAAM,uBAAuB,GAAG,CAAC,KAAuB,KAA+B,KAAK,CAAC,IAAI,KAAK,MAAM;AAE5G,MAAM,wBAAwB,GAAG,CAAC,KAAuB,KAAgC,KAAK,CAAC,IAAI,KAAK,OAAO;AAE/G,MAAM,2BAA2B,GAAG,CAAC,KAAuB,KAAmC,KAAK,CAAC,IAAI,KAAK,UAAU;AA4KxH,MAAM,+BAA+B,GAAG,CAAC,KAA+B,KAAuC,KAAK,CAAC,IAAI,KAAK,MAAM;AAEpI,MAAM,+BAA+B,GAAG,CAC3C,KAA+B,KACmC,CAAA,QAAA,CAAU,IAAI,KAAK;AAElF,MAAM,mCAAmC,GAAG,CAAC,KAA+B,KAC/E,KAAK,CAAC,IAAI,KAAK,UAAU;AAEtB,MAAM,gCAAgC,GAAG,CAAC,KAA+B,KAC5E,KAAK,CAAC,IAAI,KAAK,OAAO;AAEnB,MAAM,sCAAsC,GAAG,CAAC,KAA+B,KAClF,KAAK,CAAC,IAAI,KAAK,cAAc;;MC7VpB,8BAA8B,CAAA;AACvC,IAAA,uBAAuB,GAAG,KAAK,CAAC,QAAQ,kEAA4B;IAEpE,WAAA,CAAY,EAAc,EAAE,QAAmB,EAAA;QAC3C,gBAAgB,CAAC,MAAK;AAClB,YAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,aAAa;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,EAAE;AAC5C,YAAA,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAA,EAAG,KAAK,CAAC,aAAa,CAAC,SAAS,CAAA,CAAE,CAAC;AACjF,YAAA,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,CAAA,EAAG,KAAK,CAAC,aAAa,CAAC,WAAW,CAAA,CAAE,CAAC;AACrF,YAAA,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAA,EAAG,KAAK,CAAC,aAAa,CAAC,YAAY,CAAA,CAAE,CAAC;AACvF,YAAA,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAA,EAAG,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAA,CAAE,CAAC;AAC9E,YAAA,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAE,CAAC;AAC/D,YAAA,IAAI,QAAQ,IAAI,KAAK,EAAE;AACnB,gBAAA,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAA,EAAG,KAAK,CAAC,MAAM,CAAA,CAAE,CAAC;YACvE;YACA,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC;AACvD,QAAA,CAAC,CAAC;IACN;uGAjBS,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA;;;MCcY,kCAAkC,CAAA;AAa/B,IAAA,EAAA;AACA,IAAA,QAAA;AAbZ,IAAA,2BAA2B,GAAG,KAAK,CAAC,QAAQ,sEAA+B;IAC3E,+BAA+B,GAAG,KAAK,CAAyC;AAC5E,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,KAAK,EAAE,KAAK;AACf,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iCAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACF,IAAA,4BAA4B,GAAG,KAAK,CAAU,KAAK,wEAAC;IAEnC,YAAY,GAAG,sCAAsC;IAEtE,WAAA,CACY,EAAc,EACd,QAAmB,EAAA;QADnB,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAEhB,MAAM,CAAC,MAAK;YACR,MAAM,SAAS,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC,2BAA2B,EAAE;YAClF,SAAS,CAAC,MAAK;gBACX,IAAI,SAAS,EAAE;AACX,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC;gBACpE;qBAAO;AACH,oBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC;gBACvE;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,OAAO,CAAC,KAAY,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,4BAA4B,EAAE,EAAE;YACtF;QACJ;QACA,KAAK,CAAC,wBAAwB,EAAE;QAChC,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;QAC1B,IAAI,IAAI,CAAC,+BAA+B,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE;YAC/G,IAAI,CAAC,aAAa,EAAE;QACxB;IACJ;IAEA,YAAY,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,+BAA+B,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE;YACtF,IAAI,CAAC,2BAA2B,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD;IACJ;IAEA,YAAY,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,+BAA+B,EAAE,CAAC,KAAK,EAAE;AAC9C,YAAA,IAAI,CAAC,2BAA2B,EAAE,CAAC,IAAI,EAAE;QAC7C;IACJ;IAEQ,aAAa,GAAA;QACjB,IAAI,CAAC,2BAA2B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACtD;uGAxDS,kCAAkC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlC,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,2BAAA,EAAA,EAAA,iBAAA,EAAA,6BAAA,EAAA,UAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,+BAAA,EAAA,EAAA,iBAAA,EAAA,iCAAA,EAAA,UAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,4BAAA,EAAA,EAAA,iBAAA,EAAA,8BAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAV9C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACF,wBAAA,SAAS,EAAE,iBAAiB;AAC5B,wBAAA,WAAW,EAAE,mBAAmB;AAChC,wBAAA,cAAc,EAAE,gBAAgB;AAChC,wBAAA,cAAc,EAAE,gBAAgB;AACnC,qBAAA;AACJ,iBAAA;;;ACRD;;AAEG;MACU,wBAAwB,CAAA;AACjC;;;AAGG;IACH,OAAO,UAAU,CAAC,OAAmC,EAAA;QACjD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAE5C,IAAI,cAAc,GAAG,KAAK;AAE1B,QAAA,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE;YAChC,IAAI,cAAc,EAAE;AAChB,gBAAA,KAAK,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrC;AAAO,iBAAA,IAAI,KAAK,CAAC,SAAS,EAAE;gBACxB,cAAc,GAAG,IAAI;AACrB,gBAAA,KAAK,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC;YACpC;iBAAO;AACH,gBAAA,KAAK,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrC;QACJ;AAEA,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;IACzC;AAEA;;;;AAIG;AACH,IAAA,OAAO,KAAK,CAAqC,OAAY,EAAE,GAAW,EAAA;AACtE,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;YACvB,IAAI,gCAAgC,CAAC,KAAK,CAAC,IAAI,mCAAmC,CAAC,KAAK,CAAC,EAAE;gBACvF,OAAO;AACH,oBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC;oBAChC,QAAQ,EAAE,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC;iBACpC;YACjC;AACA,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,OAAO;AACH,oBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC;AAChC,oBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;iBAC5C;YAChC;YACA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC;AACxC,QAAA,CAAC,CAAC;IACN;AAEA;;;;AAIG;AACH,IAAA,OAAO,OAAO,CAAC,OAAmC,EAAE,GAAW,EAAA;AAC3D,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;YACvB,IAAI,gCAAgC,CAAC,KAAK,CAAC,IAAI,mCAAmC,CAAC,KAAK,CAAC,EAAE;gBACvF,OAAO;AACH,oBAAA,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC;oBAClC,QAAQ,EAAE,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC;iBACtC;YACjC;AACA,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,OAAO;AACH,oBAAA,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC;AAClC,oBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;iBAC9C;YAChC;YACA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC;AAC1C,QAAA,CAAC,CAAC;IACN;AAEA;;;;;;AAMG;IACH,OAAO,aAAa,CAAqC,OAAY,EAAA;QACjE,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AAE5C,QAAA,MAAM,YAAY,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,aAAa,CAAC,QAAQ,KAAK,CAAC,CAAC;AAElG,QAAA,IAAI,YAAY,KAAK,CAAC,IAAI,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,YAAY,CAAC,EAAE;AACnF,YAAA,OAAO,OAAO;QAClB;AAEA,QAAA,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC;AACjD,QAAA,YAAY,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;AAExC,QAAA,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC;AAC/B,YAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACjB,gBAAA,KAAK,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC;gBAChC;YACJ;QACJ;AAEA,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;IACzC;AAEA;;;;;;AAMG;IACH,OAAO,SAAS,CAAqC,OAAY,EAAA;QAC7D,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AAE5C,QAAA,MAAM,uBAAuB,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC;AAE/E,QAAA,MAAM,YAAY,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,aAAa,CAAC,QAAQ,KAAK,CAAC,CAAC;QAE3G,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,EAAE;AACpD,YAAA,OAAO,OAAO;QAClB;QAEA,uBAAuB,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;QAEjE,uBAAuB,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC;AAEpE,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;IACzC;AAEQ,IAAA,OAAO,wBAAwB,CAAC,cAA0C,EAAE,YAAoB,EAAA;AACpG,QAAA,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC;AAC/B,YAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACjB,gBAAA,OAAO,KAAK;YAChB;QACJ;AAEA,QAAA,OAAO,IAAI;IACf;AAEQ,IAAA,OAAO,YAAY,CAAC,KAA+B,EAAE,GAAW,EAAA;AACpE,QAAA,OAAO,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,EAAE,GAAG,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE;IACxG;AAEQ,IAAA,OAAO,cAAc,CAAC,KAA+B,EAAE,GAAW,EAAA;AACtE,QAAA,OAAO,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,EAAE,GAAG,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE;IACnI;AAEA;;;AAGG;IACK,OAAO,OAAO,CAAC,OAAmC,EAAA;AACtD,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,IAAG;YAC3B,IAAI,gCAAgC,CAAC,KAAK,CAAC,IAAI,mCAAmC,CAAC,KAAK,CAAC,EAAE;gBACvF,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACxE;AACA,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;YACvF;AACA,YAAA,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;AACzB,QAAA,CAAC,CAAC;IACN;AAEA;;;AAGG;IACK,OAAO,SAAS,CAAqC,OAAY,EAAA;QACrE,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AACtC,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBACb,OAAO,CAAC,KAAK,CAAC;YAClB;AACA,YAAA,IAAI,KAAK,CAAC,aAAa,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE;AAChE,gBAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;oBACxC,OAAO;AACH,wBAAA;AACI,4BAAA,GAAG,KAAK;AACR,4BAAA,OAAO,EAAE;iCACJ,MAAM,CAAC,EAAE,IAAI,sCAAsC,CAAC,EAAE,CAAC;;iCAEvD,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAqC;AAClE,yBAAA;AACD,wBAAA,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,sCAAsC,CAAC,EAAE,CAAC,CAAC;qBACnE;gBACL;qBAAO,IAAI,gCAAgC,CAAC,KAAK,CAAC,IAAI,mCAAmC,CAAC,KAAK,CAAC,EAAE;oBAC9F,OAAO;AACH,wBAAA;AACI,4BAAA,GAAG,KAAK;4BACR,QAAQ,EAAE,GAAG,CAAC,MAAM,CAChB,CAAC,EAAE,aAAa,EAAE,KAAK,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,SAAS,CACpD;AACjC,yBAAA;wBACD,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,aAAa,CAAC,SAAS,IAAI,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC;qBACjG;gBACL;YACJ;AACA,YAAA,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC;QAC1B,CAAC,EAAE,EAAgC,CAAC;IACxC;AACH;;ACnMD;;;;AAIG;AACI,MAAM,WAAW,GAAG,CAAI,KAAU,EAAE,GAAwB,KAC/D,KAAK,CAAC,MAAM,CACR,CAAC,aAAa,EAAE,YAAY,KAAI;IAC5B,aAAa,CAAC,CAAA,EAAG,YAAY,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC,GAAG,YAAY;AACpD,IAAA,OAAO,aAAa;AACxB,CAAC,EACD,EAAuB,CAC1B;AAEE,MAAM,wCAAwC,GAAG,CACpD,IAA6B,EAC7B,EAAE,YAAY,EAAE,YAAY,EAAoD,KACvE;IACT,IAAI,YAAY,EAAE;AACd,QAAA,OAAO,KAAK;IAChB;IACA,IAAI,YAAY,EAAE;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,oBAAoB;IACpF;AACA,IAAA,OAAO,CAAC,IAAI,CAAC,QAAQ;AACzB,CAAC;AAEM,MAAM,aAAa,GAAG,CACzB,KAA6D,EAC7D,QAAoC,KAC3B;;AAET,IAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACf,QAAA,OAAO,KAAK;IAChB;IACA,OAAO,CAAC,QAAQ,CAAC,IAAI,CACjB,KAAK,IACD,CAAC,+BAA+B,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;SAC3E,+BAA+B,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;SACxD,gCAAgC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAC/E;AACL,CAAC;AAEM,MAAM,0CAA0C,GAAG,CAAC,KAA+B,KAAY;AAClG,IAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AACxC,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM;AACxC,QAAA,MAAM,oCAAoC,GAAG,KAAK,CAAC;aAC9C,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;AAC7B,aAAA,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AACnB,YAAA,OAAO,GAAG,GAAG,0CAA0C,CAAC,KAAK,CAAC;QAClE,CAAC,EAAE,CAAC,CAAC;QACT,OAAO,oCAAoC,GAAG,UAAU;IAC5D;AACA,IAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AACxC,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM;IAC/B;AACA,IAAA,OAAO,CAAC;AACZ,CAAC;AAEM,MAAM,qBAAqB,GAAG,CAAC,OAAmC,KAAc;AACnF,IAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAC;AACxE,CAAC;AAEM,MAAM,4BAA4B,GAAG,CAAC,KAA+B,KAAc;AACtF,IAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;;AAExC,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IACnG;AACA,IAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;QACxC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/F;AACA,IAAA,OAAO,EAAE;AACb,CAAC;AAEM,MAAM,kBAAkB,GAAG,CAAC,OAAmC,KAAc;AAChF,IAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,yBAAyB,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAEM,MAAM,yBAAyB,GAAG,CAAC,KAA+B,KAAc;AACnF,IAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AACd,QAAA,OAAO,EAAE;IACb;AACA,IAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AACxC,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IACnG;AACA,IAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AACxC,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAC5E;;AAEA,IAAA,OAAO,EAAE;AACb,CAAC;;ACpFD;;AAEG;MACU,kBAAkB,CAAA;AAC3B;;;;;AAKG;AACH,IAAA,OAAO,aAAa,CAChB,OAAY,EACZ,QAAgB,EAChB,OAAkC,EAAA;AAElC,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO;IACxE;AAEA;;;;;;;;AAQG;AACH,IAAA,OAAO,aAAa,CAChB,OAAY,EACZ,QAAgB,EAChB,OAAkC,EAAA;QAElC,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;IAC9D;AAEA;;;;;;;;;AASG;AACH,IAAA,OAAO,IAAI,CACP,OAAY,EACZ,QAAgB,EAChB,OAAkC,EAAA;QAElC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;IACrD;AAEA;;;;;;;;;AASG;AACH,IAAA,OAAO,MAAM,CACT,OAAY,EACZ,QAAgB,EAChB,OAAkC,EAAA;QAElC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;IACvD;IAEQ,OAAO,kBAAkB,CAC7B,OAAY,EACZ,QAAgB,EAChB,OAAkC,EAClC,YAAY,GAAG,KAAK,EAAA;AAEpB,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;AACvB,YAAA,IAAI,mCAAmC,CAAC,KAAK,CAAC,EAAE;AAC5C,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AACxB,oBAAA,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM;oBAC5B,IAAI,MAAM,EAAE;wBACR,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;oBAC5C;yBAAO;wBACH,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC;oBAC9C;gBACJ;gBACA,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;iBACrF;YACL;AACA,YAAA,IAAI,gCAAgC,CAAC,KAAK,CAAC,EAAE;AACzC,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AACxB,oBAAA,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM;oBAC5B,IAAI,MAAM,EAAE;wBACR,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;oBACzC;yBAAO;wBACH,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;oBAC3C;gBACJ;gBACA,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC;iBACrG;YACL;AACA,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AACxB,oBAAA,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM;oBAC5B,IAAI,MAAM,EAAE;wBACR,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;oBACjD;yBAAO;wBACH,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;oBACnD;gBACJ;gBACA,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,SAAS,EAAE,wCAAwC,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;iBACnH;YACL;YACA,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC,YAAY,EAAE;AACjD,QAAA,CAAC,CAAC;IACN;IAEQ,OAAO,SAAS,CACpB,OAAY,EACZ,QAAgB,EAChB,OAAkC,EAClC,YAAY,GAAG,KAAK,EAAA;AAEpB,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;AACvB,YAAA,IAAI,mCAAmC,CAAC,KAAK,CAAC,EAAE;AAC5C,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;oBACxB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;gBAC5C;gBACA,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;iBAC5E;YACL;AACA,YAAA,IAAI,gCAAgC,CAAC,KAAK,CAAC,EAAE;AACzC,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;oBACxB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;gBACzC;gBACA,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,SAAS,EAAE,CAAC,YAAY;AACxB,oBAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC;iBAC5F;YACL;AACA,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;oBACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;gBACjD;gBACA,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,SAAS,EAAE,wCAAwC,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;iBACnH;YACL;YACA,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC,YAAY,EAAE;AACjD,QAAA,CAAC,CAAC;IACN;IAEQ,OAAO,WAAW,CACtB,OAAY,EACZ,QAAgB,EAChB,OAAkC,EAClC,YAAY,GAAG,KAAK,EAAA;AAEpB,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;AACvB,YAAA,IAAI,mCAAmC,CAAC,KAAK,CAAC,EAAE;AAC5C,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;oBACxB,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC;gBAC9C;gBACA,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;iBAC9E;YACL;AACA,YAAA,IAAI,gCAAgC,CAAC,KAAK,CAAC,EAAE;AACzC,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;oBACxB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;gBAC3C;gBACA,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC;oBAC3F,SAAS,EAAE,CAAC,YAAY;iBAC3B;YACL;AACA,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;oBACxB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;gBACnD;gBACA,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,SAAS,EAAE,wCAAwC,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;iBACnH;YACL;YACA,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC,YAAY,EAAE;AACjD,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,OAAO,YAAY,CAAC,QAAqC,EAAE,OAAkC,EAAA;QACjG,OAAO;AACH,YAAA,GAAG,QAAQ;AACX,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAGpE;SACN;IACL;AAEQ,IAAA,OAAO,cAAc,CAAC,QAAqC,EAAE,OAAkC,EAAA;QACnG,OAAO;AACH,YAAA,GAAG,QAAQ;AACX,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAGvE;SACN;IACL;AAEQ,IAAA,OAAO,SAAS,CAAC,KAA+B,EAAE,OAAkC,EAAA;QACxF,OAAO;AACH,YAAA,GAAG,KAAK;AACR,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAA8B;AAC/F,YAAA,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO;AAC/B,YAAA,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,CAAC;SAC7F;IACL;AAEQ,IAAA,OAAO,WAAW,CAAC,KAA+B,EAAE,OAAkC,EAAA;QAC1F,OAAO;AACH,YAAA,GAAG,KAAK;AACR,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAA8B;AAClG,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,mBAAmB,EAAE,KAAK;SAC7B;IACL;AAEQ,IAAA,OAAO,QAAQ,CAAC,IAA6B,EAAE,QAAiB,EAAA;AACpE,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;AAC5B,YAAA,OAAO,IAAI;QACf;QACA,OAAO;AACH,YAAA,GAAG,IAAI;YACP,cAAc,EAAE,IAAI,CAAC,kBAAkB;AACvC,YAAA,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;SACzE;IACL;AAEQ,IAAA,OAAO,UAAU,CAAC,IAA6B,EAAE,QAAiB,EAAA;AACtE,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;AAC5B,YAAA,OAAO,IAAI;QACf;QACA,OAAO;AACH,YAAA,GAAG,IAAI;AACP,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM;AACxC,gBAAA,GAAG,MAAM;gBACT,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,6BAA6B,IAAI,CAAC,MAAM,CAAC,YAAY;AAC9E,aAAA,CAAC,CAAC;SACN;IACL;AAEA;;;;;AAKG;AACH,IAAA,OAAO,oBAAoB,CACvB,OAAY,EACZ,QAAgB,EAChB,OAAkC,EAAA;QAElC,IAAI,KAAK,GAAG,KAAK;QACjB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;AACnC,YAAA,IAAI,mCAAmC,CAAC,KAAK,CAAC,EAAE;AAC5C,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,QAAQ,CAAC;gBACrE,IAAI,UAAU,EAAE;oBACZ,KAAK,GAAG,IAAI;oBACZ,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC;gBAC9C;AACA,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC3E,gBAAA,KAAK,KAAK,MAAM,CAAC,KAAK;AACtB,gBAAA,IAAI,MAAM,CAAC,KAAK,EAAE;oBACd,OAAO;AACH,wBAAA,GAAG,KAAK;wBACR,QAAQ,EAAE,MAAM,CAAC,OAAO;AACxB,wBAAA,MAAM,EAAE,KAAK;AACb,wBAAA,SAAS,EAAE,IAAI;qBAClB;gBACL;YACJ;AAAO,iBAAA,IAAI,gCAAgC,CAAC,KAAK,CAAC,EAAE;AAChD,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,QAAQ,CAAC;gBACrE,IAAI,UAAU,EAAE;oBACZ,KAAK,GAAG,IAAI;AACZ,oBAAA,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE;gBACnE;AACA,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC3E,gBAAA,KAAK,KAAK,MAAM,CAAC,KAAK;AACtB,gBAAA,IAAI,MAAM,CAAC,KAAK,EAAE;oBACd,OAAO;AACH,wBAAA,GAAG,KAAK;wBACR,QAAQ,EAAE,MAAM,CAAC,OAAO;AACxB,wBAAA,MAAM,EAAE,KAAK;AACb,wBAAA,cAAc,EAAE,KAAK;AACrB,wBAAA,mBAAmB,EAAE,KAAK;AAC1B,wBAAA,SAAS,EAAE,IAAI;qBAClB;gBACL;YACJ;AAAO,iBAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AAC/C,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,QAAQ,CAAC;gBACpE,IAAI,UAAU,EAAE;oBACZ,KAAK,GAAG,IAAI;AACZ,oBAAA,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE;gBAC3E;YACJ;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE;IACzC;AACH;;ACtVD;;AAEG;MACU,uBAAuB,CAAA;AAChC;;;;AAIG;AACH,IAAA,OAAO,MAAM,CAAqC,OAAY,EAAE,QAAgB,EAAA;AAC5E,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;AACvB,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC;YAC5C;AAAO,iBAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBAC/C,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;iBAC5E;YACL;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,OAAO,WAAW,CAAC,IAA6B,EAAE,QAAgB,EAAA;QACtE,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACvB,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC;QACtD;QACA,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,QAAQ,CAAC;IACzD;AAEQ,IAAA,OAAO,sBAAsB,CAAC,IAA6B,EAAE,QAAgB,EAAA;AACjF,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC1B,gBAAA,OAAO,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC;YACzD;AAEA,YAAA,OAAO,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC;QACvD;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAG;AACtC,YAAA,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY;YACtE,OAAO;AACH,gBAAA,GAAG,MAAM;AACT,gBAAA,QAAQ,EAAE,cAAc;AACxB,gBAAA,aAAa,EAAE;oBACX,GAAG,MAAM,CAAC,aAAa;oBACvB,QAAQ,EAAE,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AACpC,iBAAA;aACJ;AACL,QAAA,CAAC,CAAC;QAEF,OAAO;AACH,YAAA,GAAG,IAAI;AACP,YAAA,aAAa,EAAE;gBACX,GAAG,IAAI,CAAC,aAAa;gBACrB,QAAQ,EAAE,CAAC,CAAC;AACf,aAAA;AACD,YAAA,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AACxE,YAAA,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC;YACvD,OAAO;SACV;IACL;IAEQ,OAAO,mCAAmC,CAAC,IAA6B,EAAA;AAC5E,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU;QAChC,OAAO;AACH,YAAA,GAAG,IAAI;YACP,QAAQ;AACR,YAAA,aAAa,EAAE;gBACX,GAAG,IAAI,CAAC,aAAa;gBACrB,QAAQ,EAAE,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9B,aAAA;AACD,YAAA,MAAM,EAAE,CAAC,IAAI,CAAC,kBAAkB;SACnC;IACL;IAEQ,OAAO,iCAAiC,CAAC,IAA6B,EAAA;AAC1E,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAC/B,CAAC,EAAE,sBAAsB,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,KAAI;AACjD,YAAA,MAAM,cAAc,GAChB,CAAC,sBAAsB,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC3H,OAAO,CAAC,IAAI,CAAC;AACT,gBAAA,GAAG,MAAM;AACT,gBAAA,QAAQ,EAAE,cAAc;AACxB,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,aAAa,EAAE;oBACX,GAAG,MAAM,CAAC,aAAa;oBACvB,QAAQ,EAAE,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AACpC,iBAAA;AACJ,aAAA,CAAC;YACF,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,IAAI,cAAc,EAAE,OAAO,EAAE;AACxF,QAAA,CAAC,EACD,EAAE,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAsC,EAAE,CACrF,CAAC,OAAO;QACT,OAAO;AACH,YAAA,GAAG,IAAI;AACP,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,aAAa,EAAE;gBACX,GAAG,IAAI,CAAC,aAAa;gBACrB,QAAQ,EAAE,CAAC,CAAC;AACf,aAAA;AACD,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,MAAM,EAAE,CAAC,IAAI,CAAC,kBAAkB;AAChC,YAAA,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC;YACvD,OAAO;SACV;IACL;AAEQ,IAAA,OAAO,yBAAyB,CAAC,IAA6B,EAAE,QAAgB,EAAA;QACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ;QACzD,OAAO;AACH,YAAA,GAAG,IAAI;YACP,QAAQ;AACR,YAAA,aAAa,EAAE;gBACX,GAAG,IAAI,CAAC,aAAa;gBACrB,QAAQ,EAAE,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9B,aAAA;AACD,YAAA,MAAM,EAAE,IAAI;SACf;IACL;AACH;;ACxGD,MAAM,UAAU,GAAG;AACf,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,cAAc,EAAE,gBAAgB;AAChC,IAAA,aAAa,EAAE,eAAe;AAC9B,IAAA,OAAO,EAAE,SAAS;CACZ;AAGV;;;AAGG;MACU,kBAAkB,CAAA;;IAEnB,OAAO,oBAAoB,GAA0D;AACzF,QAAA,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,IAAqB,KAAK,IAAI,CAAC,aAAa,KAAK,IAAI;AAC7E,QAAA,CAAC,UAAU,CAAC,cAAc,GAAG,CAAC,IAAqB,KAAK,IAAI,CAAC,aAAa;AAC1E,QAAA,CAAC,UAAU,CAAC,aAAa,GAAG,CAAC,IAAqB,KAAK,IAAI,CAAC,YAAY;AACxE,QAAA,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,IAAqB,KAAK,IAAI,CAAC,OAAO,KAAK,IAAI;KACzE;AAED;;;;;AAKG;AACH,IAAA,OAAO,KAAK,CAAC,OAA2B,EAAE,gBAA+B,EAAE,qBAA6B,EAAA;AACpG,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC9B,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,qBAAqB,CAAC;QAC9E,IAAI,gBAAgB,EAAE;YAClB,YAAY,GAAG,uBAAuB,CAAC,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;AAC7E,YAAA,YAAY,GAAG,kBAAkB,CAAC,aAAa,CAAC,YAAY,EAAE,gBAAgB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC7H;AACA,QAAA,OAAO,YAAY;IACvB;AAEA;;;;;AAKG;AACH,IAAA,OAAO,mBAAmB,CACtB,OAA2B,EAC3B,iBAAkC,EAClC,qBAA6B,EAAA;AAE7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC;AACpC,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,qBAAqB,CAAC;QAC7E,IAAI,iBAAiB,EAAE;;AAEnB,YAAA,MAAM,cAAc,GAAG,qBAAqB,CAAC,YAAY,CAAC;AAC1D,YAAA,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;;YAGvF,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,iBAAiB,CAAC;;AAGxE,YAAA,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE;AAC9C,gBAAA,YAAY,GAAG,kBAAkB,CAAC,aAAa,CAAC,YAAY,EAAE,gBAAgB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC7H;QACJ;AACA,QAAA,OAAO,YAAY;IACvB;AAEQ,IAAA,OAAO,gBAAgB,CAAC,OAA2B,EAAE,mBAAmB,GAAG,KAAK,EAAA;AACpF,QAAA,OAAO,CAAC,OAAO,CAAC,KAAK,IAAG;YACpB,IAAI,wBAAwB,CAAC,KAAK,CAAC,IAAI,2BAA2B,CAAC,KAAK,CAAC,EAAE;gBACvE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,mBAAmB,CAAC;YAC9D;AAAO,iBAAA,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE;gBACvC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,mBAAmB,EAAE;oBAC7C,OAAO,CAAC,KAAK,CAAC,CAAA,yBAAA,EAA4B,KAAK,CAAC,GAAG,CAAA,6CAAA,CAA+C,CAAC;gBACvG;YACJ;AACJ,QAAA,CAAC,CAAC;IACN;IAEQ,OAAO,YAAY,CACvB,OAA2B,EAC3B,mBAA4B,EAC5B,KAAK,GAAG,CAAC,EACT,qBAA6B,EAAA;QAE7B,MAAM,UAAU,GAAG;AACd,aAAA,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KACZ,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,GAAG,EAAE,kBAAkB,EAAE,OAAO,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC;aAEzH,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;AAC9B,QAAA,OAAO,wBAAwB,CAAC,UAAU,CAAC,UAAU,CAAC;IAC1D;AAEQ,IAAA,OAAO,UAAU,CACrB,KAAuB,EACvB,EACI,mBAAmB,EACnB,KAAK,EACL,GAAG,EACH,kBAAkB,EAClB,qBAAqB,GACiG,EAAA;AAE1H,QAAA,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;gBACzB,mBAAmB;gBACnB,KAAK;gBACL,GAAG;AACH,gBAAA,iBAAiB,EAAE,kBAAkB;AACrC,gBAAA,SAAS,EAAE,IAAI;gBACf,qBAAqB;AACxB,aAAA,CAAC;QACN;AAAO,aAAA,IAAI,2BAA2B,CAAC,KAAK,CAAC,EAAE;AAC3C,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;gBAC7B,mBAAmB;gBACnB,KAAK;gBACL,GAAG;AACH,gBAAA,qBAAqB,EAAE,kBAAkB;gBACzC,qBAAqB;AACxB,aAAA,CAAC;QACN;aAAO;AACH,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;gBAC1B,mBAAmB;gBACnB,KAAK;gBACL,GAAG;AACH,gBAAA,mBAAmB,EAAE,kBAAkB;AACvC,gBAAA,SAAS,EAAE,IAAI;gBACf,qBAAqB;AACxB,aAAA,CAAC;QACN;IACJ;AAEQ,IAAA,OAAO,qBAAqB,CAChC,KAA0B,EAC1B,EACI,SAAS,EACT,mBAAmB,EACnB,aAAa,EACb,qBAAqB,GAMxB,EAAA;QAED,OAAO,KAAK,CAAC;AACR,aAAA,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AAChB,YAAA,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE;AAChC,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;oBACzB,SAAS;oBACT,mBAAmB;oBACnB,KAAK,EAAE,aAAa,GAAG,CAAC;oBACxB,GAAG;AACH,oBAAA,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;oBACxC,qBAAqB;AACxB,iBAAA,CAAC;YACN;iBAAO;AACH,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;oBAC1B,SAAS;oBACT,mBAAmB;oBACnB,KAAK,EAAE,aAAa,GAAG,CAAC;oBACxB,GAAG;AACH,oBAAA,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;oBAC1C,qBAAqB;AACxB,iBAAA,CAAC;YACN;AACJ,QAAA,CAAC;aACA,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAClC;AAEQ,IAAA,OAAO,aAAa,CACxB,IAAyB,EACzB,EACI,mBAAmB,EACnB,KAAK,EACL,GAAG,EACH,qBAAqB,EACrB,qBAAqB,GAOxB,EAAA;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE;AAC9C,YAAA,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM;YACvB,mBAAmB;AACnB,YAAA,aAAa,EAAE,KAAK;YACpB,qBAAqB;AACxB,SAAA,CAAC;QAEF,OAAO;YACH,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ;AACR,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,aAAa,EAAE;gBACX,QAAQ,EAAE,CAAC,CAAC;AACZ,gBAAA,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,GAAG,GAAG,CAAC;AACrB,gBAAA,WAAW,EAAE,qBAAqB;AACrC,aAAA;YACD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACvC,YAAA,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;YACxC,IAAI,EAAE,IAAI,CAAC,IAAI;SAClB;IACL;IAEQ,OAAO,mBAAmB,CAC9B,cAAqD,EAAA;QAKrD,IAAI,CAAC,cAAc,EAAE;YACjB,OAAO;AACH,gBAAA,eAAe,EAAE,KAAK;AACtB,gBAAA,cAAc,EAAE,IAAI;AACpB,gBAAA,gBAAgB,EAAE,SAAS;AAC3B,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,yBAAyB,EAAE,KAAK;aACnC;QACL;AAEA,QAAA,IAAI,YAAY,IAAI,cAAc,EAAE;YAChC,OAAO;AACH,gBAAA,eAAe,EAAE,IAAI;AACrB,gBAAA,cAAc,EAAE,IAAI;AACpB,gBAAA,gBAAgB,EAAE,cAAc,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,GAAG,SAAS;gBACnF,aAAa,EAAE,cAAc,CAAC,OAAO;AACrC,gBAAA,yBAAyB,EAAE,IAAI;aAClC;QACL;QAEA,OAAO;AACH,YAAA,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,cAAc,CAAC,QAAQ;AACvC,YAAA,gBAAgB,EAAE,SAAS;AAC3B,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,yBAAyB,EAAE,KAAK;SACnC;IACL;AAEQ,IAAA,OAAO,kBAAkB,CAC7B,KAAuB,EACvB,EACI,mBAAmB,EACnB,UAAU,EACV,SAAS,EACT,qBAAqB,GACiF,EAAA;QAE1G,OAAO,KAAK,CAAC;AACR,aAAA,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KACZ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YAClB,mBAAmB;YACnB,KAAK,EAAE,UAAU,GAAG,CAAC;YACrB,GAAG;AACH,YAAA,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;AACxC,YAAA,SAAS,EAAE,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM;YACrC,qBAAqB;AACxB,SAAA,CAAC;aAEL,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAClC;AAEQ,IAAA,OAAO,UAAU,CACrB,IAAsB,EACtB,EACI,SAAS,EACT,mBAAmB,EACnB,KAAK,EACL,GAAG,EACH,mBAAmB,EACnB,qBAAqB,GAQxB,EAAA;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,mBAAmB,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;AAE5H,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAClB,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,CAAC;AAE3F,QAAA,MAAM,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,QAAQ,CAAC,CAAC,MAAM;;;AAGhF,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;QAEjE,OAAO;YACH,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ;AACR,YAAA,wBAAwB,EAAE;AACrB,iBAAA,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KACZ,+BAA+B,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;iBAEhH,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;AAC9B,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,aAAa,EAAE;gBACX,QAAQ,EAAE,CAAC,CAAC;gBACZ,YAAY,EAAE,GAAG,GAAG,CAAC;AACrB,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,WAAW,EAAE,mBAAmB;AACnC,aAAA;YACD,SAAS;YACT,cAAc,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,+BAA+B,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC;AACpH,YAAA,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,GAAG,GAAG,OAAO,EAAE,CAAC,CAAC;YAChE,mBAAmB;YACnB,QAAQ;AACR,YAAA,UAAU,EAAE,mBAAmB,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC9F,YAAA,qBAAqB,EAAE,CAAC,QAAQ,IAAI,qBAAqB,GAAG,CAAC;YAC7D,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;SAClB;IACL;AAEQ,IAAA,OAAO,SAAS,CACpB,IAAqB,EACrB,EACI,SAAS,EACT,mBAAmB,EACnB,KAAK,EACL,GAAG,EACH,iBAAiB,EACjB,qBAAqB,GAQxB,EAAA;AAED,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,OAAO,IAAI;QACf;QAEA,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;QACnG,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,kBAAkB;QAC5D,MAAM,MAAM,GAAG,IAAI;AACnB,QAAA,MAAM,OAAO,GACT,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9G,IAAI,CAAC,OAAO;AAChB,YAAA,CAAC;AACL,QAAA,MAAM,kBAAkB,GAAG,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC;AAE3F,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,KAAK,IAAI;QAE5C,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,qBAAqB;QAEvE,OAAO;YACH,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC;YAC5F,QAAQ;YACR,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,SAAS,EACL,SAAS;iBACR,CAAC,mBAAmB,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrH,YAAA,aAAa,EAAE;gBACX,QAAQ,EAAE,CAAC,CAAC;gBACZ,YAAY,EAAE,GAAG,GAAG,CAAC;AACrB,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,WAAW,EAAE,iBAAiB;AACjC,aAAA;YACD,QAAQ;YACR,MAAM;YACN,cAAc,EAAE,MAAM,IAAI,kBAAkB;YAC5C,kBAAkB;YAClB,OAAO;YACP,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,mBAAmB,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,OAAO,CAAC;YACnH,oBAAoB,EAChB,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,OAAO,CAAC;YAC9H,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,YAAA,QAAQ,EAAE,KAAK;;;AAGf,YAAA,UAAU,EAAE;AACR,kBAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO;AACrE,kBAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,OAAO,CAAC;YAC1G,kBAAkB;YAClB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC;AAClG,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,IAAI,EAAE,MAAM;YACZ,mBAAmB;AACnB,YAAA,iBAAiB,EAAE,mBAAmB;AACtC,YAAA,6BAA6B,EAAE,qBAAqB;SACvD;IACL;AAEQ,IAAA,OAAO,eAAe,CAAC,MAA8B,EAAE,KAAa,EAAE,SAAkB,EAAA;QAC5F,OAAO;YACH,GAAG,EAAE,MAAM,CAAC,GAAG;AACf,YAAA,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC;AAC5B,YAAA,cAAc,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI;YACvC,KAAK,EAAE,MAAM,CAAC,IAAI;AAClB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,aAAa,EAAE;gBACX,QAAQ,EAAE,CAAC,CAAC;AACZ,gBAAA,YAAY,EAAE,CAAC;AACf,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,WAAW,EAAE,CAAC;AACjB,aAAA;YACD,SAAS;AACT,YAAA,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,MAAM,CAAC,WAAW;AAC/B,YAAA,YAAY,EAAE,MAAM,CAAC,WAAW,KAAK,IAAI;AACzC,YAAA,IAAI,EAAE,cAAc;SACvB;IACL;AAEA;;;AAGG;AACK,IAAA,OAAO,mBAAmB,CAAC,OAAmC,EAAE,iBAA2B,EAAA;AAC/F,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;AACvB,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;iBAClD;YACL;AAAO,iBAAA,IAAI,mCAAmC,CAAC,KAAK,CAAC,EAAE;gBACnD,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,iBAAiB,CAGjE;iBACN;YACL;AAAO,iBAAA,IAAI,gCAAgC,CAAC,KAAK,CAAC,EAAE;AAChD,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,iBAAiB,CAA8B;;;AAGzG,gBAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AACjE,gBAAA,MAAM,qBAAqB,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;gBAEzE,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,QAAQ;oBACR,QAAQ;oBACR,qBAAqB;iBACxB;YACL;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,OAAO,gBAAgB,CAAC,IAAqB,EAAE,GAAG,QAAsB,EAAA;AAC5E,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB;AAC1C,aAAA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAiB,CAAC;AACvD,aAAA,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C;;;ACpeJ;;AAEG;MACU,iBAAiB,CAAA;AAC1B;;;;;;;;;;;;;;;;;;;AAmBG;AACH,IAAA,OAAO,MAAM,CAAC,OAAmC,EAAE,MAAc,EAAE,YAAqB,EAAA;QACpF,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAC/C,IAAI,CAAC,eAAe,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACnC;QACA,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,CAAC;IACrE;AAEQ,IAAA,OAAO,aAAa,CACxB,OAAY,EACZ,eAAuB,EACvB,YAAqB,EAAA;QAErB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;YACnC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE;gBAC5C,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC;YAC3D;AACA,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,YAAY,CAAC;AAClF,gBAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,EAAE;oBACxC,OAAO;AACH,wBAAA,GAAG,KAAK;wBACR,QAAQ;AACR,wBAAA,SAAS,EAAE,KAAK;AAChB,wBAAA,MAAM,EAAE,IAAI;qBACf;gBACL;gBACA,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,cAAc,EAAE,KAAK;AACrB,oBAAA,mBAAmB,EAAE,KAAK;AAC1B,oBAAA,MAAM,EAAE,KAAK;oBACb,QAAQ;iBACX;YACL;AAEA,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,SAAS,EAAE,KAAK;AAChB,oBAAA,MAAM,EAAE,IAAI;oBACZ,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK;AAClC,wBAAA,GAAG,MAAM;AACT,wBAAA,SAAS,EAAE,KAAK;AACnB,qBAAA,CAAC,CAAC;iBACN;YACL;YAEA,OAAO;AACH,gBAAA,GAAG,KAAK;AACR,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,MAAM,EAAE,IAAI;aACf;AACL,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,wBAAwB,CAAC,UAAU,CAAC,UAAU,CAAC;IAC1D;AAEQ,IAAA,OAAO,sBAAsB,CAAC,KAA+B,EAAE,YAAqB,EAAA;AACxF,QAAA,IAAI,gCAAgC,CAAC,KAAK,CAAC,EAAE;YACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAA4B,CAAC;YACzH,OAAO;AACH,gBAAA,GAAG,KAAK;AACR,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,SAAS,EAAE,IAAI;gBACf,QAAQ;AACR,gBAAA,cAAc,EAAE,KAAK;AACrB,gBAAA,mBAAmB,EAAE,KAAK;aAC7B;QACL;AAAO,aAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AAC/C,YAAA,MAAM,aAAa,GAAG,wCAAwC,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YAC5G,OAAO;AACH,gBAAA,GAAG,KAAK;AACR,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,SAAS,EAAE,aAAa;AACxB,gBAAA,cAAc,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,kBAAkB;gBACxD,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK;AAClC,oBAAA,GAAG,MAAM;AACT,oBAAA,SAAS,EAAE,CAAC,KAAK,CAAC,MAAM;AAC3B,iBAAA,CAAC,CAAC;aACN;QACL;AAAO,aAAA,IAAI,mCAAmC,CAAC,KAAK,CAAC,EAAE;YACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAC/B,KAAK,IAAI,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAuD,CAClH;YACD,OAAO;AACH,gBAAA,GAAG,KAAK;AACR,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,MAAM,EAAE,KAAK;gBACb,QAAQ;aACX;QACL;AACA,QAAA,OAAO,KAAK;IAChB;AAEQ,IAAA,OAAO,OAAO,CAAC,KAAa,EAAE,eAAuB,EAAA;QACzD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;IAC3D;IAEQ,OAAO,UAAU,CAAC,KAAa,EAAA;AACnC,QAAA,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;IACvD;AAEQ,IAAA,OAAO,UAAU,CAAqC,OAAY,EAAE,eAAwB,KAAK,EAAA;AACrG,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;AACvB,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,MAAM,EAAE,KAAK;oBACb,SAAS,EAAE,CAAC,YAAY;AACxB,oBAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;iBAC1D;YACL;YACA,OAAO;AACH,gBAAA,GAAG,KAAK;gBACR,SAAS,EAAE,CAAC,YAAY;AACxB,gBAAA,MAAM,EAAE,KAAK;aAChB;AACL,QAAA,CAAC,CAAC;IACN;AACH;;ACpJD;;;AAGG;MACU,iBAAiB,CAAA;AAC1B;;;;;;;;;AASG;AACI,IAAA,OAAO,+BAA+B,CACzC,UAAsC,EACtC,UAAsC,EAAA;QAEtC,MAAM,aAAa,GAAG,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC;AAEpD,QAAA,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;YAC/B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAC9B;YACJ;AACA,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACrD;AAEA,QAAA,OAAO,UAAU;IACrB;AAEQ,IAAA,OAAO,KAAK,CAAC,QAAkC,EAAE,QAAkC,EAAA;QACvF,IAAI,+BAA+B,CAAC,QAAQ,CAAC,IAAI,+BAA+B,CAAC,QAAQ,CAAC,EAAE;AACxF,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACtC;aAAO,IAAI,+BAA+B,CAAC,QAAQ,CAAC,IAAI,+BAA+B,CAAC,QAAQ,CAAC,EAAE;YAC/F,IAAI,CAAC,+BAA+B,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;AAC1E,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACtC;IACJ;AAEQ,IAAA,OAAO,SAAS,CACpB,OAA+D,EAC/D,OAA+D,EAAA;AAE/D,QAAA,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;QAC/B,OAAO,CAAC,aAAa,CAAC,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ;QAE/D,IAAI,gCAAgC,CAAC,OAAO,CAAC,IAAI,gCAAgC,CAAC,OAAO,CAAC,EAAE;AACxF,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;QACrC;IACJ;AAEQ,IAAA,OAAO,UAAU,CAAC,QAAkC,EAAE,QAAkC,EAAA;AAC5F,QAAA,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc;AACjD,QAAA,QAAQ,CAAC,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB;IAC/D;AAEQ,IAAA,OAAO,SAAS,CAAC,OAAgC,EAAE,OAAgC,EAAA;AACvF,QAAA,IAAI,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE;AACxC,YAAA,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,6BAA6B;AAC5F,YAAA,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB;AAErD,YAAA,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;YAC/B,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,kBAAkB;;YAGrE,OAAO,CAAC,aAAa,CAAC,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ;YAE/D,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;AAC1D,YAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAG;AAChC,gBAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,WAAW,EAAE;oBACzD;gBACJ;;AAEA,gBAAA,SAAS,CAAC,aAAa,CAAC,QAAQ,GAAG,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ;AAC3F,YAAA,CAAC,CAAC;QACN;aAAO;YACH,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,aAAa,CAAC,QAAQ,KAAK,CAAC,CAAC;YACrG,IAAI,mBAAmB,EAAE;AACrB,gBAAA,OAAO,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC;YACtC;QACJ;IACJ;IAEQ,OAAO,wBAAwB,CAAC,IAA6B,EAAA;AACjE,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,oBAAoB;IACpF;AACH;;ACzFD;;AAEG;MACU,oBAAoB,CAAA;AAC7B;;;;;;;;;AASG;AACH,IAAA,OAAO,MAAM,CAAqC,OAAY,EAAE,YAAqB,EAAA;QACjF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC;IACpD;AAEA;;;;;;;;;AASG;AACH,IAAA,OAAO,MAAM,CAAqC,OAAY,EAAE,YAAqB,EAAA;QACjF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC;IACrD;IAEQ,OAAO,OAAO,CAClB,OAAY,EACZ,YAAqB,EACrB,QAAiB,EACjB,MAAA,GAAwE,IAAI,EAAA;AAE5E,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;AACvB,YAAA,IAAI,sCAAsC,CAAC,KAAK,CAAC,EAAE;gBAC/C,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,SAAS,EAAE,CAAC,QAAQ;oBACpB,aAAa,EAAE,EAAE,GAAG,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;iBACpG;YACL;AACA,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC;iBACxE;YACL;YAEA,OAAO;AACH,gBAAA,GAAG,KAAK;AACR,gBAAA,SAAS,EAAE,wCAAwC,CAAC,KAAK,EAAE;AACvD,oBAAA,YAAY,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI;oBACrC,YAAY;iBACf,CAAC;AACF,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC;aAC/D;AACL,QAAA,CAAC,CAAC;IACN;AACH;;AC9DD;;AAEG;MACU,sBAAsB,CAAA;AAC/B;;;;;;;;;;AAUG;AACH,IAAA,OAAO,oBAAoB,CAAC,OAAmC,EAAE,QAAgB,EAAA;AAC7E,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;AACvB,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC;YAC1D;AAAO,iBAAA,IAAI,gCAAgC,CAAC,KAAK,CAAC,EAAE;gBAChD,OAAO,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC;YAC3D;AAAO,iBAAA,IAAI,mCAAmC,CAAC,KAAK,CAAC,EAAE;gBACnD,OAAO,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,QAAQ,CAAC;YAC9D;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;AAEA;;;;;;;;AAQG;AACH,IAAA,OAAO,6BAA6B,CAAqC,OAAY,EAAE,QAAgB,EAAA;AACnG,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;AACvB,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,QAAQ,EAAE,KAAK,CAAC,GAAG,KAAK,QAAQ;iBACnC;YACL;AAAO,iBAAA,IAAI,mCAAmC,CAAC,KAAK,CAAC,EAAE;gBACnD,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,QAAQ,EAAE,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;iBACzE;YACL;AAAO,iBAAA,IAAI,gCAAgC,CAAC,KAAK,CAAC,EAAE;gBAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CACnC,KAAK,IAAI,IAAI,CAAC,6BAA6B,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,CAA8B,CAC9F;gBACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,+BAA+B,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACzH,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,QAAQ;oBACR,QAAQ;AACR,oBAAA,qBAAqB,EAAE,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;iBAC7E;YACL;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;AAEA;;;;;;;AAOG;IACH,OAAO,SAAS,CAAC,OAAmC,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;IACvC;AAEA;;;;;;;AAOG;IACH,OAAO,WAAW,CAAC,OAAmC,EAAA;AAClD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;IACzC;AAEQ,IAAA,OAAO,yBAAyB,CAAC,IAA6B,EAAE,QAAgB,EAAA;AACpF,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ;;;AAI5B,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC5D,YAAA,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;QAC7B;QAEA,OAAO;AACH,YAAA,GAAG,IAAI;YACP,QAAQ;SACX;IACL;AAEQ,IAAA,OAAO,6BAA6B,CAAC,KAAkC,EAAE,QAAgB,EAAA;QAC7F,OAAO;AACH,YAAA,GAAG,KAAK;YACR,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAG;AACjC,gBAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;oBACxC,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAC1D;gBACA,OAAO,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC3D,YAAA,CAAC,CAAC;SACL;IACL;AAEQ,IAAA,OAAO,0BAA0B,CAAC,KAA+B,EAAE,QAAgB,EAAA;AACvF,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AACnB,YAAA,OAAO,KAAK;QAChB;AACA,QAAA,IAAI,QAAiB;AACrB,QAAA,IAAI,QAAmC;QACvC,IAAI,qBAAqB,GAAG,KAAK;AACjC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AACxB,YAAA,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ;YAC1B,IAAI,QAAQ,EAAE;gBACV,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC/C;iBAAO;gBACH,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;YACjD;;;;;YAKA,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,+BAA+B,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACnH,YAAA,qBAAqB,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;QAC/E;aAAO;YACH,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;;;YAG9E,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,+BAA+B,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACnH,YAAA,qBAAqB,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;QAC/E;QAEA,OAAO;AACH,YAAA,GAAG,KAAK;YACR,QAAQ;YACR,QAAQ;YACR,qBAAqB;SACxB;IACL;AAEQ,IAAA,OAAO,gBAAgB,CAAC,IAA6B,EAAE,GAAW,EAAA;AACtE,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE;YAClB,OAAO;AACH,gBAAA,GAAG,IAAI;AACP,gBAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ;aAC3B;QACL;AACA,QAAA,OAAO,IAAI;IACf;IAEQ,OAAO,WAAW,CAAC,KAAgC,EAAA;QACvD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK;AACtB,YAAA,GAAG,IAAI;;YAEP,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU;AAChF,SAAA,CAAC,CAAC;IACP;IAEQ,OAAO,aAAa,CAAC,KAAgC,EAAA;QACzD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK;AACtB,YAAA,GAAG,IAAI;;AAEP,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK;AACtE,SAAA,CAAC,CAAC;IACP;IAEQ,OAAO,gBAAgB,CAAqC,KAAU,EAAA;AAC1E,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,IAAG;AACrB,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,OAAO;AACH,oBAAA,GAAG,KAAK;;AAER,oBAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK;iBACzE;YACL;AAAO,iBAAA,IAAI,mCAAmC,CAAC,KAAK,CAAC,EAAE;gBACnD,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC;iBAClD;YACL;AAAO,iBAAA,IAAI,gCAAgC,CAAC,KAAK,CAAC,EAAE;gBAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAA8B;;;;gBAInF,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,+BAA+B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACzG,gBAAA,MAAM,qBAAqB,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;gBACzE,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,QAAQ;oBACR,QAAQ;oBACR,qBAAqB;iBACxB;YACL;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;IAEQ,OAAO,cAAc,CAAqC,KAAU,EAAA;AACxE,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,IAAG;AACrB,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,OAAO;AACH,oBAAA,GAAG,KAAK;;oBAER,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU;iBACpF;YACL;AAAO,iBAAA,IAAI,mCAAmC,CAAC,KAAK,CAAC,EAAE;gBACnD,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC;iBAChD;YACL;AAAO,iBAAA,IAAI,gCAAgC,CAAC,KAAK,CAAC,EAAE;gBAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAA8B;;;;gBAIjF,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,+BAA+B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACzG,gBAAA,MAAM,qBAAqB,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;gBACzE,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,QAAQ;oBACR,QAAQ;oBACR,qBAAqB;iBACxB;YACL;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;AACH;;ACvPD;;AAEG;MACU,mBAAmB,CAAA;AAC5B;;;;AAIG;AACH,IAAA,OAAO,mCAAmC,CACtC,OAAY,EACZ,KAAa,EAAA;AAEb,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;AACvB,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,QAAQ,EAAE,IAAI,CAAC,mCAAmC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;iBAC5E;YACL;AACA,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK;gBACxD,OAAO;AACH,oBAAA,GAAG,KAAK;AACR,oBAAA,iBAAiB,EAAE,mBAAmB;oBACtC,mBAAmB;AACnB,oBAAA,6BAA6B,EAAE,KAAK;AACpC,oBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM;AACzC,wBAAA,GAAG,MAAM;AACT,wBAAA,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,GAAG,KAAK;AAC7D,qBAAA,CAAC,CAAC;iBACN;YACL;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;AAEA;;;;;;;AAOG;AACH,IAAA,OAAO,QAAQ,CAAqC,OAAY,EAAE,OAAe,EAAA;AAC7E,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;AACvB,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;iBACnD;YACL;AACA,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;oBACvB,OAAO;AACH,wBAAA,GAAG,KAAK;AACR,wBAAA,iBAAiB,EAAE,KAAK;wBACxB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK;AAClC,4BAAA,GAAG,MAAM;AACT,4BAAA,SAAS,EAAE,IAAI;AAClB,yBAAA,CAAC,CAAC;qBACN;gBACL;YACJ;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;AAEA;;;;;;;AAOG;AACH,IAAA,OAAO,QAAQ,CAAqC,OAAY,EAAE,GAAW,EAAA;AACzE,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAG;AACvB,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBACxC,OAAO;AACH,oBAAA,GAAG,KAAK;oBACR,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC;iBAC/C;YACL;AACA,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;oBACnB,OAAO;AACH,wBAAA,GAAG,KAAK;AACR,wBAAA,iBAAiB,EAAE,IAAI;AACvB,wBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM;AACzC,4BAAA,GAAG,MAAM;AACT,4BAAA,SAAS,EAAE,GAAG,GAAG,KAAK,CAAC,6BAA6B;AACvD,yBAAA,CAAC,CAAC;qBACN;gBACL;YACJ;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;AACH;;AChFD;;;;AAIG;MAEU,gBAAgB,CAAA;AACzB,IAAA,QAAQ,GAAG,MAAM,CAA6B,EAAE,oDAAC;AACjD,IAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AACpC,IAAA,KAAK;AACG,IAAA,mBAAmB,GAAG,MAAM,CAAU,KAAK,+DAAC;IAC5C,MAAM,GAAG,MAAM,CAA6B;AAChD,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,iBAAiB,EAAE,EAAE;AACrB,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,iBAAiB,EAAE,EAAE;AACrB,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,QAAQ,EAAE,EAAE;AACf,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEF,IAAA,qBAAqB,GAAG,IAAI,CAAC,mBAAmB;AAChD,IAAA,MAAM,GAAG,MAAM,CAAS,EAAE,kDAAC;IAE3B,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACzE,IAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAEhC,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC7B,YAAA,OAAO,KAAK;QAChB;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/B,QAAA,OAAO,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC;AACtD,IAAA,CAAC,yDAAC;AAEF,IAAA,wBAAwB,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC7B,YAAA,OAAO,KAAK;QAChB;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC;QAE/D,IAAI,WAAW,EAAE;AACb,YAAA,OAAO,KAAK;QAChB;;;QAIA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AACtD,QAAA,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC;AAClC,IAAA,CAAC,oEAAC;AAEF,IAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,oDAAC;IAEvB,oBAAoB,GAAa,EAAE;IAC3B,0BAA0B,GAA8C,IAAI;IAC5E,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAI,KAAK,EAAE,OAAO,EAAA,CAAA,GAAA,CAAhB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA,CAAA,CAAC;AAEvG,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;YACnC,SAAS,CAAC,MAAK;AACX,gBAAA,IAAI,IAAI,CAAC,0BAA0B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE;AAC9E,oBAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;AACrC,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;gBACpC;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAC5B,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1G,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,sBAAsB,CAAC,OAAgB,EAAA;AACnC,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;IACzC;AAEA,IAAA,WAAW,CAAC,OAA2B,EAAE,wBAAkC,EAAE,qBAA6B,EAAA;AACtG,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,CAAC,CAAC;QACvH;aAAO;YACH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,wBAAwB,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,qBAAqB,CAAC,CAAC;QACtH;IACJ;AAEA,IAAA,aAAa,CAAC,OAA2B,EAAE,wBAAkC,EAAE,qBAA6B,EAAA;AACxG,QAAA,IAAI,UAAsC;AAC1C,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;YAC5B,UAAU,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,CAAC;QACjH;aAAO;AACH,YAAA,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,wBAAwB,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,qBAAqB,CAAC;QAChH;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,IAAG;YAC9B,MAAM,YAAY,GAAG,iBAAiB,CAAC,+BAA+B,CAAC,UAAU,EAAE,UAAU,CAAC;AAC9F,YAAA,OAAO,iBAAiB,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5F,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,oBAAoB,CAAC,KAA+B,EAAA;QAChD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,kBAAkB,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACnH;AAEA,IAAA,YAAY,CAAC,IAA8B,EAAA;QACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,sBAAsB,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACnG;AAEA,IAAA,aAAa,CAAC,IAA6B,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB;QACJ;;;QAIA,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC7C;QACJ;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAG;YAC3B,IAAI,cAAc,GAAG,OAAO;AAC5B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;gBAExC,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAE3D,gBAAA,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE;oBAChC,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,OAAO,CAAC;gBAC1E;YACJ;AAEA,YAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;gBAC5B,OAAO,sBAAsB,CAAC,oBAAoB,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC;YAChF;iBAAO;gBACH,OAAO,uBAAuB,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC;YACnE;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,mBAAmB,CAAC,IAA8B,EAAA;AAC9C,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAG;AAC3B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;;YAGxC,IAAI,cAAc,GAAG,OAAO;YAC5B,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;AAE3F,YAAA,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE;gBAChC,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,OAAO,CAAC;YAC1E;;AAGA,YAAA,OAAO,kBAAkB,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC;AAC9E,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,oBAAoB,CAAC,OAAmC,EAAA;QAC5D,MAAM,YAAY,GAAa,EAAE;AAEjC,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AACzB,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC3E,gBAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAChC;AAAO,iBAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AAC/C,gBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnE;QACJ;AAEA,QAAA,OAAO,YAAY;IACvB;AAEA,IAAA,mBAAmB,CAAC,UAA0C,EAAA;QAC1D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,uBAAuB,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5F;AAEA,IAAA,WAAW,CAAC,KAAiC,EAAA;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;AAEA,IAAA,cAAc,CAAC,IAA6B,EAAA;QACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,sBAAsB,CAAC,6BAA6B,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5G;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC;AAC3C,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAG;AAC3B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;gBACjB,OAAO,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3E;YACA,OAAO,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3E,QAAA,CAAC,CAAC;IACN;IAEA,MAAM,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB,IAAI,CAAC,cAAc,EAAE;QACzB;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IACxB,wBAAwB,CAAC,UAAU,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CACxG;IACL;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IACxB,wBAAwB,CAAC,UAAU,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CACxG;IACL;AAEA,IAAA,iBAAiB,CAAC,IAAc,EAAA;;QAE5B,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAAE;YAC1C;QACJ;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;AAC3C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACnE,QAAA,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAErE,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAC9C;QACJ;AAEA,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAE7B,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;YAC5B,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,WAAW,EAAE,GAAG,aAAa,CAAC,EAAE;gBAClD,OAAO,GAAG,sBAAsB,CAAC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC;YACvE;AAEA,YAAA,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE;gBAC3B,OAAO,GAAG,kBAAkB,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE;AACrD,oBAAA,YAAY,EAAE,IAAI;AAClB,oBAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC7B,iBAAA,CAAC;YACN;QACJ;aAAO;AACH,YAAA,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,GAAG,kBAAkB,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;AACzD,gBAAA,YAAY,EAAE,KAAK;AACnB,gBAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC7B,aAAA,CAAC;QACN;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;IAC9B;AAEA,IAAA,4BAA4B,CAAC,QAA0C,EAAA;AACnE,QAAA,IAAI,CAAC,0BAA0B,GAAG,QAAQ;IAC9C;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,wBAAwB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAChF;IAEA,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,wBAAwB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACpF;AAEQ,IAAA,mBAAmB,CAAC,OAAmC,EAAA;AAC3D,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,IAAG;AAC3B,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,IAAI,KAAK,CAAC,kBAAkB,EAAE;AAC1B,oBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBACjF;AACA,gBAAA,OAAO,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAC5C;AAAO,iBAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBAC/C,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC;YACnD;AACA,YAAA,OAAO,EAAE;AACb,QAAA,CAAC,CAAC;IACN;IAEQ,iBAAiB,GAAA;QACrB,OAAO;AACH,YAAA,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE;AACxC,YAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;SAC7B;IACL;AAEA,IAAA,IAAI,CAAC,KAA+B,EAAA;QAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC1G;AAEA,IAAA,MAAM,CAAC,KAA+B,EAAA;QAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC5G;AAEA,IAAA,2BAA2B,CAAC,qBAA6B,EAAA;AACrD,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,mBAAmB,CAAC,mCAAmC,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAC5H;AAEA,IAAA,QAAQ,CAAC,IAA6B,EAAA;QAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,mBAAmB,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACpF;AAEA,IAAA,QAAQ,CAAC,IAA6B,EAAA;QAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,mBAAmB,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACpF;IAEA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,wBAAwB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACjF;IAEA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;YAC7B;QACJ;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAG;YAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC;AAC/D,YAAA,OAAO,WAAW,GAAG,sBAAsB,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,sBAAsB,CAAC,SAAS,CAAC,OAAO,CAAC;AAChH,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,6BAA6B,CAAC,OAAmC,EAAA;QACrE,MAAM,yBAAyB,GAAG,IAAI,CAAC,gCAAgC,CAAC,OAAO,CAAC;QAChF,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAEtD,QAAA,IAAI,yBAAyB,CAAC,MAAM,KAAK,CAAC,EAAE;AACxC,YAAA,OAAO,KAAK;QAChB;AAEA,QAAA,OAAO,yBAAyB,CAAC,KAAK,CAAC,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7E;AAEQ,IAAA,gCAAgC,CAAC,OAAmC,EAAA;AACxE,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,IAAG;AAC3B,YAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;;gBAExC,OAAO,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YACjE;AAAO,iBAAA,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;gBAC/C,OAAO,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,QAAQ,CAAC;YAChE;AACA,YAAA,OAAO,EAAE;AACb,QAAA,CAAC,CAAC;IACN;uGAnVS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAhB,gBAAgB,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;MCtBY,8BAA8B,CAAA;AACnB,IAAA,gBAAA;AAApB,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;IAAqB;AAEzD,IAAA,mBAAmB,CAAC,MAAsC,EAAA;AACtD,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,MAAM,CAAC;QACrD;IACJ;uGAPS,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAA9B,8BAA8B,EAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAD1C;;;MC2BY,8BAA8B,CAAA;AAKpB,IAAA,8BAAA;AAJnB,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAAkC;AAEzD,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;AAEvB,IAAA,WAAA,CAAmB,8BAA8D,EAAA;QAA9D,IAAA,CAAA,8BAA8B,GAA9B,8BAA8B;IAAmC;AAEpF,IAAA,OAAO,CAAC,KAAY,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YAClB,KAAK,CAAC,wBAAwB,EAAE;YAChC,IAAI,CAAC,8BAA8B,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1E;IACJ;uGAZS,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,8BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,glBAjB5B,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,8BAA8B,CAAC,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAC,8BAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdzE,mbAiBA,EAAA,MAAA,EAAA,CAAA,45DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDJc,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,sHAAE,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkBpD,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAvB1C,SAAS;+BACI,6BAA6B,EAAA,eAAA,EAGtB,uBAAuB,CAAC,MAAM,WACtC,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,CAAC,EAAA,SAAA,EACnD,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,8BAA8B,CAAC,EAAA,IAAA,EAC/D;AACF,wBAAA,SAAS,EAAE,iBAAiB;AAC5B,wBAAA,kBAAkB,EAAE,mBAAmB;AACvC,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,kBAAkB,EAAE,uBAAuB;AAC3C,wBAAA,iBAAiB,EAAE,iBAAiB;AACpC,wBAAA,iBAAiB,EAAE,iBAAiB;qBACvC,EAAA,cAAA,EACe;AACZ,wBAAA;AACI,4BAAA,SAAS,EAAE,8BAA8B;;4BAEzC,MAAM,EAAE,CAAC,iCAAiC,CAAC;AAC9C,yBAAA;AACJ,qBAAA,EAAA,QAAA,EAAA,mbAAA,EAAA,MAAA,EAAA,CAAA,45DAAA,CAAA,EAAA;;;MExBQ,+BAA+B,CAAA;AAIpB,IAAA,gBAAA;AAHpB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,QAAQ,wDAAC;AACrE,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,QAAQ,wDAAC;AAErE,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;IAAqB;AAEzD,IAAA,cAAc,CAAC,IAA6B,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACvB;aAAO;AACH,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACvB;IACJ;AAEA,IAAA,QAAQ,CAAC,IAA6B,EAAA;AAClC,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;IACxC;AAEA,IAAA,QAAQ,CAAC,IAA6B,EAAA;AAClC,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;IACxC;uGApBS,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAA/B,+BAA+B,EAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAD3C;;;MC0CY,+BAA+B,CAAA;AAiB5B,IAAA,EAAA;AACD,IAAA,+BAAA;AAjBX,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAA2B;AAChD,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAoC;IAE5D,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,6BAA6B,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACjG,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,6BAA6B,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAE7F,IAAA,aAAa,GAAG,MAAM,CAAC,KAAK,yDAAC;AAE7B,IAAA,cAAc,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,iBAAiB,GAAG,WAAW,GAAG,UAAU,CAAC,0DAAC;AAE9H;;AAEG;AACH,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;IAEzB,WAAA,CACY,EAAc,EACf,+BAAgE,EAAA;QAD/D,IAAA,CAAA,EAAE,GAAF,EAAE;QACH,IAAA,CAAA,+BAA+B,GAA/B,+BAA+B;QAEtC,MAAM,CAAC,MAAK;YACR,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,iBAAiB;YACvD,SAAS,CAAC,MAAK;gBACX,IAAI,iBAAiB,EAAE;AACnB,oBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;gBACxD;qBAAO;AACH,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;gBAChC;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;IAEA,eAAe,GAAA;;QAEX,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY;;QAEjD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAA,EAAA,CAAI,CAAC;IAChG;IAEA,cAAc,GAAA;QACV,IAAI,CAAC,+BAA+B,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACpE;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;QACvB,KAAK,CAAC,wBAAwB,EAAE;QAChC,IAAI,CAAC,cAAc,EAAE;IACzB;uGA9CS,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,+BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,yDAAA,EAAA,EAAA,EAAA,SAAA,EAlC7B,CAAC,+BAA+B,CAAC,0BCZhD,2gDAiDA,EAAA,MAAA,EAAA,CAAA,wnBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtCc,8BAA8B,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAK5B;AACR;;AAEG;YACH,OAAO,CAAC,WAAW,EAAE;AACjB,gBAAA,KAAK,CACD,WAAW,EACX,KAAK,CAAC;AACF,oBAAA,SAAS,EAAE,GAAG;AACd,oBAAA,QAAQ,EAAE,QAAQ;AACrB,iBAAA,CAAC,CACL;AACD,gBAAA,KAAK,CACD,UAAU,EACV,KAAK,CAAC;AACF,oBAAA,SAAS,EAAE,SAAS;AACvB,iBAAA,CAAC,CACL;gBACD,UAAU,CAAC,uBAAuB,EAAE;AAChC,oBAAA,OAAO,CAAC,kCAAkC,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;iBACzG,CAAC;gBACF,UAAU,CAAC,uBAAuB,EAAE;AAChC,oBAAA,OAAO,CACH,kCAAkC,EAClC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAClG;iBACJ,CAAC;aACL,CAAC;AACL,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEQ,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAxC3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAAA,eAAA,EAGvB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,8BAA8B,CAAC,EAAA,SAAA,EAC9B,CAAC,+BAA+B,CAAC,EAAA,IAAA,EACtC;AACF,wBAAA,sBAAsB,EAAE,yDAAyD;qBACpF,EAAA,UAAA,EACW;AACR;;AAEG;wBACH,OAAO,CAAC,WAAW,EAAE;AACjB,4BAAA,KAAK,CACD,WAAW,EACX,KAAK,CAAC;AACF,gCAAA,SAAS,EAAE,GAAG;AACd,gCAAA,QAAQ,EAAE,QAAQ;AACrB,6BAAA,CAAC,CACL;AACD,4BAAA,KAAK,CACD,UAAU,EACV,KAAK,CAAC;AACF,gCAAA,SAAS,EAAE,SAAS;AACvB,6BAAA,CAAC,CACL;4BACD,UAAU,CAAC,uBAAuB,EAAE;AAChC,gCAAA,OAAO,CAAC,kCAAkC,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;6BACzG,CAAC;4BACF,UAAU,CAAC,uBAAuB,EAAE;AAChC,gCAAA,OAAO,CACH,kCAAkC,EAClC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAClG;6BACJ,CAAC;yBACL,CAAC;AACL,qBAAA,EAAA,QAAA,EAAA,2gDAAA,EAAA,MAAA,EAAA,CAAA,wnBAAA,CAAA,EAAA;;;AEzCE,MAAM,2BAA2B,GAAG;AACvC,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,YAAY,EAAE,cAAc;CACtB;MAkBG,2BAA2B,CAAA;AAmBhB,IAAA,UAAA;AAlBpB,IAAA,SAAS,GAAG,KAAK,CAA8B,2BAA2B,CAAC,KAAK,qDAAC;IACjF,YAAY,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAC9B,IAAA,MAAM,GAAG,KAAK,CAAmD,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,kDAAC;AAE/F,IAAA,KAAK,GAAG,eAAe,CAAuB,MAAM,iDAAC;AAErD,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AACzB,IAAA,2BAA2B,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;IAEzD,QAAQ,GAAG,MAAM,CAAC;AACd,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,CAAC;AACV,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACF,IAAA,QAAQ,GAAG,MAAM,CAAoB,IAAI,oDAAC;AAE1C,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,IAAI,CAAC,0DAAC;AAC5D,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,IAAI,CAAC,2DAAC;AAE9D,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAA,CAAA,UAAU,GAAV,UAAU;IAAe;AAE7C,IAAA,OAAO,CAAC,QAAoB,EAAA;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;IAClC;IAEA,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;AAEA,IAAA,MAAM,CAAC,QAAoB,EAAA;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAClC;IACJ;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;;QAEvB,KAAK,CAAC,wBAAwB,EAAE;IACpC;AAEA,IAAA,OAAO,CAAC,KAAY,EAAA;;QAEhB,KAAK,CAAC,wBAAwB,EAAE;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;AAEQ,IAAA,eAAe,CAAC,QAAoB,EAAA;;QAExC,UAAU,CAAC,MAAK;YACZ,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAqB,EAAE;YACjE,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACrC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAC7B;iBAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AAC7C,gBAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;YACvC;iBAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC9C,gBAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;YACxC;AACJ,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,oBAAoB,CAAC,QAAoB,EAAA;AAC7C,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa;AACvC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,qBAAqB,EAAE;QAC7C,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,YAAY,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE;AACvF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;AAE3D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAE/C,QAAA,MAAM,WAAW,GAAG,SAAS,CAAC,qBAAqB,EAAE;QACrD,IAAI,GAAG,GAAG,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,EAAE;YACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAY;YAC5E,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC;AACzE,YAAA,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,aAAa;QACrE;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AACd,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,IAAI,EAAE,IAAI;AACb,SAAA,CAAC;IACN;AAEQ,IAAA,qBAAqB,CAAC,QAAoB,EAAA;AAC9C,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa;AACvC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,qBAAqB,EAAE;AAC7C,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;QACxD,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,WAAW,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE;QAEvF,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,2BAA2B,CAAC,YAAY,EAAE;AAC/D,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI;QACpB;AAEA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAE/C,QAAA,MAAM,WAAW,GAAG,SAAS,CAAC,qBAAqB,EAAE;QACrD,IAAI,GAAG,GAAG,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,EAAE;YACnD,GAAG,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAC3C;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AACd,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,IAAI,EAAE,IAAI;AACb,SAAA,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC9B,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QAChC;IACJ;AAEA,IAAA,cAAc,CAAC,KAAiB,EAAA;AAC5B,QAAA,MAAM,8BAA8B,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAiB,CAAC;AACtG,QAAA,MAAM,+BAA+B,GAAI,KAAK,CAAC,MAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AACzG,QAAA,IAAI,CAAC,8BAA8B,IAAI,CAAC,+BAA+B,EAAE;AACrE,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B;IACJ;AAEA,IAAA,UAAU,CAAC,KAAY,EAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAiB,CAAC,EAAE;AAClE,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B;IACJ;uGA/HS,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBxC,+gBAiBA,EAAA,MAAA,EAAA,CAAA,mfAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDKc,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEjB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAfvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,eAAA,EAGlB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACF,wBAAA,gBAAgB,EAAE,gBAAgB;AAClC,wBAAA,iBAAiB,EAAE,iBAAiB;AACpC,wBAAA,SAAS,EAAE,iBAAiB;AAC5B,wBAAA,gBAAgB,EAAE,eAAe;AACjC,wBAAA,kBAAkB,EAAE,wBAAwB;AAC5C,wBAAA,gBAAgB,EAAE,oBAAoB;qBACzC,EAAA,OAAA,EACQ,CAAC,gBAAgB,CAAC,EAAA,QAAA,EAAA,+gBAAA,EAAA,MAAA,EAAA,CAAA,mfAAA,CAAA,EAAA;;;MEjBlB,wBAAwB,CAAA;AAChB,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5D,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,gBAAgB,CAAC,IAAI,qDAAC;AACnF,IAAA,UAAU,GAAG,IAAI,CAAC,SAAS;AAE3B,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,oDAAC;AAC3D,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,iDAAC;AACrD,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,iEAAC;AAErF,IAAA,UAAU,CAAC,IAA6B,EAAA;AACpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC;IAC7C;AAEA,IAAA,mBAAmB,CAAC,IAA6B,EAAA;AAC7C,QAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC;IACnD;AAEA,IAAA,cAAc,CAAC,IAA6B,EAAA;AACxC,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC;IAC9C;AAEA,IAAA,IAAI,CAAC,IAA6B,EAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACpC;AAEA,IAAA,MAAM,CAAC,IAA6B,EAAA;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC;IACtC;AAEA,IAAA,mBAAmB,CAAC,MAAsC,EAAA;AACtD,QAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,MAAM,CAAC;IACrD;uGAhCS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAxB,wBAAwB,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;MC8FY,wBAAwB,CAAA;AAkErB,IAAA,EAAA;AACD,IAAA,wBAAA;AAlEM,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAExD,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAA2B;IAEhD,aAAa,GAAG,MAAM,EAAqC;AAE3D,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,mDAAC;IAC5D,UAAU,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,cAAc,GAAG,YAAY,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEjF,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AAEvB,IAAA,OAAO,GAAG,SAAS,CAAa,OAAO,mDAAC;IACxC,sBAAsB,GAAG,MAAM,CAK5B;AACC,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,YAAY,EAAE,CAAC;AACf,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,YAAY,EAAE,CAAC;AAClB,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEF,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;QAC3B,MAAM,OAAO,GAAG,EAAE;AAElB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE;QACxC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,EAAE;YACnH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QACnC;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,aAAa;QAC/C,IAAI,aAAa,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;QAC/B;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,oBAAoB,EAAE;AAClC,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC;QACrE;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,mBAAmB,EAAE;AACjC,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC;QACpE;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/B,IAAA,CAAC,0DAAC;IACF,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,kBAAkB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEjG,IAAA,eAAe,GAAG,MAAM,CAAC,IAAI,2DAAC;AAE9B,IAAA,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,GAAG,SAAS,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEjF,IAAA,WAAW,GAAG,QAAQ,CAAuB,MAAK;AAC9C,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK;YACtC,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,YAAA,aAAa,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS;AACvC,YAAA,QAAQ,EAAE,MAAM,CAAC,MAAM,KAAK,UAAU;AACtC,YAAA,kBAAkB,EAAE,MAAM,CAAC,MAAM,KAAK,QAAQ;AAC9C,YAAA,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,KAAK;AACjD,SAAA,CAAC,CAAC;AACP,IAAA,CAAC,uDAAC;IAEF,WAAA,CACY,EAAc,EACf,wBAAkD,EAAA;QADjD,IAAA,CAAA,EAAE,GAAF,EAAE;QACH,IAAA,CAAA,wBAAwB,GAAxB,wBAAwB;QAE/B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAErG,QAAA,gBAAgB,CAAC,MACb,SAAS,CAAC,MAAK;AACX,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC5C,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,YAAY,EAAE;AACnC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;YACpC;YACA,IAAI,CAAC,4BAA4B,EAAE;QACvC,CAAC,CAAC,CACL;QAED,MAAM,CAAC,MAAK;YACR,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM;YACjC,SAAS,CAAC,MAAK;gBACX,IAAI,MAAM,EAAE;AACR,oBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;gBACzD;qBAAO;AACH,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;gBACnC;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;IAEA,cAAc,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEhF,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AAEzB,IAAA,OAAO,CAAC,KAAY,EAAA;QAChB,KAAK,CAAC,wBAAwB,EAAE;QAChC,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACzD;AAEA,IAAA,aAAa,CAAC,KAAY,EAAA;QACtB,KAAK,CAAC,wBAAwB,EAAE;QAChC,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAClE;AAEA,IAAA,oBAAoB,CAAC,KAAY,EAAA;QAC7B,KAAK,CAAC,wBAAwB,EAAE;;AAEhC,QAAA,IAAI,KAAK,CAAC,aAAa,IAAI,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,UAAU,EAAE;AACxG,YAAA,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE;QAC9B;QACA,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAClE;AAEA,IAAA,UAAU,CAAC,KAAY,EAAA;QACnB,KAAK,CAAC,wBAAwB,EAAE;;QAEhC,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC7D;AAEA,IAAA,iBAAiB,CAAC,KAAY,EAAA;QAC1B,KAAK,CAAC,wBAAwB,EAAE;;AAEhC,QAAA,IAAI,KAAK,CAAC,aAAa,IAAI,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,UAAU,EAAE;AACxG,YAAA,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE;QAC9B;QACA,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC7D;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,KAAY,EAAA;QACrB,KAAK,CAAC,wBAAwB,EAAE;IACpC;IAEA,gBAAgB,GAAA;QACZ,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACzD;AAEA,IAAA,qBAAqB,CAAC,KAAY,EAAA;QAC9B,KAAK,CAAC,wBAAwB,EAAE;AAChC,QAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE;AACtF,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;AACtB,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAC7B;iBAAO;gBACH,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACzD;QACJ;IACJ;AAEA,IAAA,IAAI,CAAC,KAAY,EAAA;QACb,KAAK,CAAC,wBAAwB,EAAE;QAChC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACnD;AAEA,IAAA,MAAM,CAAC,KAAY,EAAA;QACf,KAAK,CAAC,wBAAwB,EAAE;QAChC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrD;IAEA,eAAe,CAAC,KAAY,EAAE,MAAsC,EAAA;QAChE,KAAK,CAAC,wBAAwB,EAAE;AAChC,QAAA,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,MAAM,CAAC;IAC7D;AAEA,IAAA,eAAe,CAAC,MAA0B,EAAA;AACtC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACpB,YAAA,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG;AACxB,YAAA,UAAU,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE;AAC9B,SAAA,CAAC;IACN;IAEQ,gBAAgB,GAAA;QACpB,IAAI,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY;AAClD,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AACpB,YAAA,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM;QAC/E;QACA,OAAO,CAAA,EAAG,SAAS,CAAA,EAAA,CAAI;IAC3B;IAEQ,4BAA4B,GAAA;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa;QACxC,IAAI,EAAE,EAAE;AACJ,YAAA,MAAM,iBAAiB,GAAG;gBACtB,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,YAAY,EAAE,EAAE,CAAC,YAAY;gBAC7B,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,YAAY,EAAE,EAAE,CAAC,YAAY;aAChC;AACD,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE;AACrF,gBAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACtD;QACJ;IACJ;uGApMS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,SAAA,EArCtB,CAAC,WAAW,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,wBAAwB,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7DtH,k6QAyNA,49VD3KQ,uBAAuB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,8BAA8B,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC9B,eAAe,6MACf,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,+BAA+B,sGAC/B,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,8BAA8B,wGAE9B,8BAA8B,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC9B,2BAA2B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,kCAAkC,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,6BAAA,EAAA,iCAAA,EAAA,8BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClC,+BAA+B,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EASvB;AACR;;AAEG;YACH,OAAO,CAAC,WAAW,EAAE;AACjB,gBAAA,KAAK,CACD,WAAW,EACX,KAAK,CAAC;AACF,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,QAAQ,EAAE,QAAQ;AACrB,iBAAA,CAAC,CACL;AACD,gBAAA,KAAK,CACD,UAAU,EACV,KAAK,CAAC;AACF,oBAAA,SAAS,EAAE,SAAS;AACvB,iBAAA,CAAC,CACL;gBACD,UAAU,CAAC,uBAAuB,EAAE;AAChC,oBAAA,OAAO,CAAC,kCAAkC,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;iBACzG,CAAC;gBACF,UAAU,CAAC,uBAAuB,EAAE;AAChC,oBAAA,OAAO,CACH,kCAAkC,EAClC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAClG;iBACJ,CAAC;aACL,CAAC;AACL,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEQ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA1DpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,eAAA,EAGf,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACL,uBAAuB;wBACvB,8BAA8B;wBAC9B,eAAe;wBACf,gBAAgB;wBAChB,eAAe;wBACf,+BAA+B;wBAC/B,iBAAiB;wBACjB,gBAAgB;wBAChB,8BAA8B;wBAC9B,8BAA8B;wBAC9B,8BAA8B;wBAC9B,2BAA2B;wBAC3B,kCAAkC;wBAClC,+BAA+B;AAClC,qBAAA,EAAA,SAAA,EACU,CAAC,WAAW,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,wBAAwB,CAAC,EAAA,IAAA,EAC5G;AACF,wBAAA,kBAAkB,EAAE,sCAAsC;AAC1D,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,qBAAqB,EAAE,cAAc;AACrC,wBAAA,sBAAsB,EAAE,gBAAgB;qBAC3C,EAAA,UAAA,EACW;AACR;;AAEG;wBACH,OAAO,CAAC,WAAW,EAAE;AACjB,4BAAA,KAAK,CACD,WAAW,EACX,KAAK,CAAC;AACF,gCAAA,SAAS,EAAE,CAAC;AACZ,gCAAA,QAAQ,EAAE,QAAQ;AACrB,6BAAA,CAAC,CACL;AACD,4BAAA,KAAK,CACD,UAAU,EACV,KAAK,CAAC;AACF,gCAAA,SAAS,EAAE,SAAS;AACvB,6BAAA,CAAC,CACL;4BACD,UAAU,CAAC,uBAAuB,EAAE;AAChC,gCAAA,OAAO,CAAC,kCAAkC,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;6BACzG,CAAC;4BACF,UAAU,CAAC,uBAAuB,EAAE;AAChC,gCAAA,OAAO,CACH,kCAAkC,EAClC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAClG;6BACJ,CAAC;yBACL,CAAC;AACL,qBAAA,EAAA,QAAA,EAAA,k6QAAA,EAAA,MAAA,EAAA,CAAA,o6VAAA,CAAA,EAAA;;;ME3FQ,yBAAyB,CAAA;AAKd,IAAA,gBAAA;AAJpB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,oDAAC;AAC3D,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,iDAAC;AACrD,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,iEAAC;AAErF,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;IAAqB;AAEzD,IAAA,eAAe,CAAC,KAA+B,EAAA;AAC3C,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC;IAC7C;AAEA,IAAA,oBAAoB,CAAC,KAA+B,EAAA;AAChD,QAAA,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,KAAK,CAAC;IACrD;AAEA,IAAA,IAAI,CAAC,KAA+B,EAAA;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;IACrC;AAEA,IAAA,MAAM,CAAC,KAA+B,EAAA;AAClC,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;IACvC;uGArBS,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAzB,yBAAyB,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC;;;MCuEY,yBAAyB,CAAA;AAwCtB,IAAA,EAAA;AACD,IAAA,yBAAA;AAxCX,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAA4B;IAClD,aAAa,GAAG,MAAM,EAAqC;IAE3D,UAAU,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,cAAc,GAAG,YAAY,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAElF,IAAA,OAAO,GAAG,SAAS,CAAa,OAAO,mDAAC;IACxC,sBAAsB,GAAG,MAAM,CAK5B;AACC,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,YAAY,EAAE,CAAC;AACf,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,YAAY,EAAE,CAAC;AAClB,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEF,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;QAC3B,MAAM,OAAO,GAAG,EAAE;AAElB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE;QACxC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,EAAE;YACpH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;QACpC;AAEA,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,mBAAmB,EAAE;AAClC,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC,iBAAiB,CAAC;QAC1E;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/B,IAAA,CAAC,0DAAC;AACF,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,2DAAC;AAE/D,IAAA,eAAe,GAAG,MAAM,CAAC,IAAI,2DAAC;IAE9B,cAAc,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAEjF,WAAA,CACY,EAAc,EACf,yBAAoD,EAAA;QADnD,IAAA,CAAA,EAAE,GAAF,EAAE;QACH,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;AAEhC,QAAA,gBAAgB,CAAC,MACb,SAAS,CAAC,MAAK;AACX,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACzC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,EAAE;AAChC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;YACjC;YACA,IAAI,CAAC,4BAA4B,EAAE;QACvC,CAAC,CAAC,CACL;QAED,MAAM,CAAC,MAAK;YACR,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM;YAClC,SAAS,CAAC,MAAK;gBACX,IAAI,MAAM,EAAE;AACR,oBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;gBACzD;qBAAO;AACH,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;gBACnC;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AAEzB,IAAA,qBAAqB,CAAC,KAAY,EAAA;QAC9B,KAAK,CAAC,wBAAwB,EAAE;;AAEhC,QAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;AAC5E,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC7B;aAAO;YACH,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChE;IACJ;IAEA,eAAe,GAAA;QACX,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAChE;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,KAAY,EAAA;QACrB,KAAK,CAAC,wBAAwB,EAAE;IACpC;AAEA,IAAA,aAAa,CAAC,KAAY,EAAA;QACtB,KAAK,CAAC,wBAAwB,EAAE;QAChC,IAAI,CAAC,yBAAyB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACrE;AAEA,IAAA,IAAI,CAAC,KAAY,EAAA;QACb,KAAK,CAAC,wBAAwB,EAAE;QAChC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACrD;AAEA,IAAA,MAAM,CAAC,KAAY,EAAA;QACf,KAAK,CAAC,wBAAwB,EAAE;QAChC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACvD;IAEQ,gBAAgB,GAAA;QACpB,IAAI,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY;AAClD,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;YACrB,MAAM,2BAA2B,GAAG,0CAA0C,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5F,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,GAAG,2BAA2B;QAChF;QACA,OAAO,CAAA,EAAG,SAAS,CAAA,EAAA,CAAI;IAC3B;IAEQ,4BAA4B,GAAA;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa;QACxC,IAAI,EAAE,EAAE;AACJ,YAAA,MAAM,iBAAiB,GAAG;gBACtB,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,YAAY,EAAE,EAAE,CAAC,YAAY;gBAC7B,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,YAAY,EAAE,EAAE,CAAC,YAAY;aAChC;AACD,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE;AACrF,gBAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACtD;QACJ;IACJ;uGA7HS,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAK,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,uCAAA,EAAA,EAAA,EAAA,SAAA,EA7CvB,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,yBAAyB,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9B1G,6pKAsJA,EAAA,MAAA,EAAA,CAAA,usFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtHQ,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,gBAAgB,iHAChB,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,KAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,YAAA,EAAA,WAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,8BAA8B,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAOtB;AACR;;AAEG;YACH,OAAO,CAAC,WAAW,EAAE;AACjB,gBAAA,KAAK,CACD,WAAW,EACX,KAAK,CAAC;AACF,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,QAAQ,EAAE,QAAQ;AACrB,iBAAA,CAAC,CACL;AACD,gBAAA,KAAK,CACD,UAAU,EACV,KAAK,CAAC;AACF,oBAAA,SAAS,EAAE,SAAS;AACvB,iBAAA,CAAC,CACL;gBACD,UAAU,CAAC,uBAAuB,EAAE;AAChC,oBAAA,OAAO,CAAC,kCAAkC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;iBACzG,CAAC;gBACF,UAAU,CAAC,uBAAuB,EAAE;AAChC,oBAAA,OAAO,CACH,kCAAkC,EAClC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CACtH;iBACJ,CAAC;aACL,CAAC;AACL,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEQ,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAlDrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,mBAGhB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,yBAAyB,CAAC,EAAA,OAAA,EAC7F;wBACL,eAAe;wBACf,gBAAgB;wBAChB,wBAAwB;wBACxB,iBAAiB;wBACjB,eAAe;wBACf,gBAAgB;wBAChB,8BAA8B;qBACjC,EAAA,IAAA,EACK;AACF,wBAAA,kBAAkB,EAAE,uCAAuC;AAC3D,wBAAA,qBAAqB,EAAE,cAAc;AACrC,wBAAA,sBAAsB,EAAE,gBAAgB;qBAC3C,EAAA,UAAA,EACW;AACR;;AAEG;wBACH,OAAO,CAAC,WAAW,EAAE;AACjB,4BAAA,KAAK,CACD,WAAW,EACX,KAAK,CAAC;AACF,gCAAA,SAAS,EAAE,CAAC;AACZ,gCAAA,QAAQ,EAAE,QAAQ;AACrB,6BAAA,CAAC,CACL;AACD,4BAAA,KAAK,CACD,UAAU,EACV,KAAK,CAAC;AACF,gCAAA,SAAS,EAAE,SAAS;AACvB,6BAAA,CAAC,CACL;4BACD,UAAU,CAAC,uBAAuB,EAAE;AAChC,gCAAA,OAAO,CAAC,kCAAkC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;6BACzG,CAAC;4BACF,UAAU,CAAC,uBAAuB,EAAE;AAChC,gCAAA,OAAO,CACH,kCAAkC,EAClC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CACtH;6BACJ,CAAC;yBACL,CAAC;AACL,qBAAA,EAAA,QAAA,EAAA,6pKAAA,EAAA,MAAA,EAAA,CAAA,usFAAA,CAAA,EAAA;;;MEpEQ,4BAA4B,CAAA;AAGjB,IAAA,gBAAA;AAFpB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,oDAAC;AAE3D,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;IAAqB;IAEzD,aAAa,CAAC,KAAY,EAAE,QAAqC,EAAA;QAC7D,KAAK,CAAC,wBAAwB,EAAE;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,QAAQ,CAAC;IACxD;IAEA,IAAI,CAAC,KAAY,EAAE,QAAqC,EAAA;QACpD,KAAK,CAAC,wBAAwB,EAAE;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;IACxC;IAEA,MAAM,CAAC,KAAY,EAAE,QAAqC,EAAA;QACtD,KAAK,CAAC,wBAAwB,EAAE;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC1C;uGAlBS,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAA5B,4BAA4B,EAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC;;;MCsEY,4BAA4B,CAAA;AAmCzB,IAAA,EAAA;AACD,IAAA,4BAAA;AAnCX,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAA+B;IACxD,uBAAuB,GAAG,MAAM,EAA4C;IAC5E,aAAa,GAAG,MAAM,EAAqC;IAE3D,UAAU,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,cAAc,GAAG,YAAY,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAErF,IAAA,eAAe,GAAG,MAAM,CAAC,IAAI,2DAAC;IAE9B,cAAc,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEpF,IAAA,OAAO,GAAG,SAAS,CAAa,OAAO,mDAAC;IACxC,sBAAsB,GAAG,MAAM,CAK5B;AACC,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,YAAY,EAAE,CAAC;AACf,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,YAAY,EAAE,CAAC;AAClB,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEF,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE;QACxC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,EAAE;AACvH,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK;QAChC;AAEA,QAAA,OAAO,EAAE;AACb,IAAA,CAAC,0DAAC;AACF,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,2DAAC;IAE/D,WAAA,CACY,EAAc,EACf,4BAA0D,EAAA;QADzD,IAAA,CAAA,EAAE,GAAF,EAAE;QACH,IAAA,CAAA,4BAA4B,GAA5B,4BAA4B;AAEnC,QAAA,gBAAgB,CAAC,MACb,SAAS,CAAC,MAAK;AACX,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACzC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,EAAE;AAChC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;YACjC;YACA,IAAI,CAAC,4BAA4B,EAAE;QACvC,CAAC,CAAC,CACL;QAED,MAAM,CAAC,MAAK;YACR,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM;YACrC,SAAS,CAAC,MAAK;gBACX,IAAI,MAAM,EAAE;AACR,oBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;gBACzD;qBAAO;AACH,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;gBACnC;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AAEf,IAAA,uBAAuB,CAAC,IAAY,EAAA;QAC1C,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC3D;IAEQ,gBAAgB,GAAA;QACpB,IAAI,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY;AAClD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE;YACxB,MAAM,2BAA2B,GAAG,0CAA0C,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/F,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,GAAG,2BAA2B;QAChF;QACA,OAAO,CAAA,EAAG,SAAS,CAAA,EAAA,CAAI;IAC3B;IAEQ,4BAA4B,GAAA;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa;QACxC,IAAI,EAAE,EAAE;AACJ,YAAA,MAAM,iBAAiB,GAAG;gBACtB,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,YAAY,EAAE,EAAE,CAAC,YAAY;gBAC7B,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,YAAY,EAAE,EAAE,CAAC,YAAY;aAChC;AACD,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE;AACrF,gBAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACtD;QACJ;IACJ;uGAxFS,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAM,4BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,mBAAA,EAAA,4DAAA,EAAA,oBAAA,EAAA,8DAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,0CAAA,EAAA,EAAA,EAAA,SAAA,EApC1B,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,EAAEC,eAAa,EAAE,MAAM,CAAC,EAAE,4BAA4B,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtC7G,ioMAsJA,EAAA,MAAA,EAAA,CAAA,y2GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvHQ,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,yBAAyB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,8BAA8B,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC9B,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,KAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,YAAA,EAAA,WAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAQP;AACR;;AAEG;YACH,OAAO,CAAC,WAAW,EAAE;AACjB,gBAAA,KAAK,CACD,WAAW,EACX,KAAK,CAAC;AACF,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,QAAQ,EAAE,QAAQ;AACrB,iBAAA,CAAC,CACL;AACD,gBAAA,KAAK,CACD,UAAU,EACV,KAAK,CAAC;AACF,oBAAA,SAAS,EAAE,SAAS;AACvB,iBAAA,CAAC,CACL;gBACD,UAAU,CAAC,uBAAuB,EAAE;AAChC,oBAAA,OAAO,CAAC,kCAAkC,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;iBACzG,CAAC;gBACF,UAAU,CAAC,uBAAuB,EAAE;AAChC,oBAAA,OAAO,CACH,kCAAkC,EAClC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAClG;iBACJ,CAAC;aACL,CAAC;AACL,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEQ,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAjDxC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,eAAA,EAGnB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACL,wBAAwB;wBACxB,eAAe;wBACf,yBAAyB;wBACzB,8BAA8B;wBAC9B,gBAAgB;wBAChB,eAAe;AAClB,qBAAA,EAAA,SAAA,EACU,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,EAAEA,eAAa,EAAE,MAAM,CAAC,EAAE,4BAA4B,CAAC,EAAA,IAAA,EACnG;AACF,wBAAA,kBAAkB,EAAE,0CAA0C;AAC9D,wBAAA,qBAAqB,EAAE,4DAA4D;AACnF,wBAAA,sBAAsB,EAAE,8DAA8D;qBACzF,EAAA,UAAA,EACW;AACR;;AAEG;wBACH,OAAO,CAAC,WAAW,EAAE;AACjB,4BAAA,KAAK,CACD,WAAW,EACX,KAAK,CAAC;AACF,gCAAA,SAAS,EAAE,CAAC;AACZ,gCAAA,QAAQ,EAAE,QAAQ;AACrB,6BAAA,CAAC,CACL;AACD,4BAAA,KAAK,CACD,UAAU,EACV,KAAK,CAAC;AACF,gCAAA,SAAS,EAAE,SAAS;AACvB,6BAAA,CAAC,CACL;4BACD,UAAU,CAAC,uBAAuB,EAAE;AAChC,gCAAA,OAAO,CAAC,kCAAkC,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;6BACzG,CAAC;4BACF,UAAU,CAAC,uBAAuB,EAAE;AAChC,gCAAA,OAAO,CACH,kCAAkC,EAClC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAClG;6BACJ,CAAC;yBACL,CAAC;AACL,qBAAA,EAAA,QAAA,EAAA,ioMAAA,EAAA,MAAA,EAAA,CAAA,y2GAAA,CAAA,EAAA;;;AEjCL,MAAM,oCAAoC,GAAG,IAAI;AACjD,MAAM,wBAAwB,GAAG,kCAAkC;AACnE,MAAM,oBAAoB,GAAG,OAAO;AACpC,MAAM,oBAAoB,GAAG,MAAM;AAEnC,IAAI,YAAY,GAAG,CAAC;MA8CP,oBAAoB,CAAA;AAC7B,IAAA,kBAAkB,GAAG,KAAK,CAAC,QAAQ,6DAAsB;AACzD,IAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,0DAA8B;AAC9D,IAAA,mBAAmB,GAAG,KAAK,CAAU,KAAK,+DAAC;AAE3C,IAAA,KAAK,GAAG,KAAK,CAAmB,gBAAgB,CAAC,OAAO,iDAAC;AAEzD,IAAA,qBAAqB,GAAG,KAAK,CAAS,MAAM,CAAC,gBAAgB,iEAAC;AAC9D,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAEhC;;AAEG;AACH,IAAA,aAAa,GAAG,KAAK,CAAU,KAAK,yDAAC;IACrC,4BAA4B,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,8BAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAE9C,IAAA,iBAAiB,GAAG,KAAK,CAAC,QAAQ,4DAAY;IAE9C,aAAa,GAAG,MAAM,EAAqC;IAC3D,uBAAuB,GAAG,MAAM,EAA4C;AAE5E,IAAA,gBAAgB,GAAG,YAAY,CAAuB,QAAQ,4DAAC;AAC/D,IAAA,uBAAuB,GAAG,YAAY,CAAuB,eAAe,mEAAC;AAC7E,IAAA,gBAAgB,GAAG,YAAY,CAAuB,QAAQ,4DAAC;AAE/D,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,KAAK,SAAS,yDAAC;IAErE,cAAc,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,UAAU,GAAG,UAAU,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAG5E,sBAAsB,GAAG,MAAM,EAAyB;AAEjD,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC1C,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/B,IAAA,YAAY,GAAG,CAAA,aAAA,EAAgB,YAAY,EAAE,EAAE;AAE/C,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,iDAAC;IAEb,wBAAwB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,4DAAI,KAAK,EAAE,OAAO,EAAA,CAAA,GAAA,CAAhB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA,CAAA,CAAC;IACxF,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE;IACtD,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAI,KAAK,EAAE,OAAO,EAAA,CAAA,GAAA,CAAhB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA,CAAA,CAAC;IAC7E,mBAAmB,GAAG,QAAQ,CAAC,MAAM,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,qBAAA,EAAI,KAAK,EAAE,OAAO,EAAA,CAAA,GAAA,CAAhB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA,CAAA,CAAC;IAC/F,gBAAgB,GAAG,QAAQ,CAAC,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAI,KAAK,EAAE,OAAO,EAAA,CAAA,GAAA,CAAhB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA,CAAA,CAAC;IAEjG,qBAAqB,GAAG,oBAAoB,CACxC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAChG;AAED,IAAA,WAAA,GAAA;QACI,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AAExC,QAAA,IAAI,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,YAAY,IAAG;YAC9D,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM;YACtC,IAAI,MAAM,EAAE;AACR,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,IAAG;AAClC,oBAAA,IAAI,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE;AAC9B,wBAAA,OAAO,KAAK;oBAChB;AACA,oBAAA,OAAO,YAAY;AACvB,gBAAA,CAAC,CAAC;YACN;AACJ,QAAA,CAAC,CAAC;QAEF,eAAe,CAAC,MAAK;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnE,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACtD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,wBAAwB,EAAE;AAClD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE;YAE7C,SAAS,CAAC,MAAK;AACX,gBAAA,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,mBAAmB,CAAC;AACjE,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE;gBAE1C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;oBACxB,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC;gBACtE;qBAAO;;AAEH,oBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,wBAAwB,CAAC;AACrF,oBAAA,MAAM,SAAS,GAAG,eAAe,EAAE,SAAS,IAAI,CAAC;oBAEjD,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC;;oBAGpE,UAAU,CAAC,MAAK;wBACZ,IAAI,eAAe,EAAE;AACjB,4BAAA,eAAe,CAAC,SAAS,GAAG,SAAS;wBACzC;AACJ,oBAAA,CAAC,CAAC;gBACN;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAC1D,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,qBAAqB,CAAC,CAAC;AAC7F,QAAA,CAAC,CAAC;;;;QAMF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;AACvE,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;QACJ,IAAI,CAAC,uBAAuB,EAAE;IAClC;IAEA,uBAAuB,GAAA;AACnB,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;AACtC,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1E;AAEA,IAAA,WAAW,CAAC,KAAY,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YAChG,KAAK,CAAC,wBAAwB,EAAE;AAChC,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;YACnC,UAAU,CAAC,MAAK;AACZ,gBAAA,IAAI;AACA,oBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,iCAAiC,CAAC,CAAC,KAAK,EAAE;gBAClF;gBAAE,OAAO,CAAC,EAAE;;;AAGR,oBAAA,OAAO,CAAC,KAAK,CAAC,6DAA6D,EAAE,CAAC,CAAC;oBAC/E,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACtH,oBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;gBACtC;AACJ,YAAA,CAAC,CAAC;QACN;IACJ;AAEA,IAAA,SAAS,CAAC,KAAY,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YAChG,KAAK,CAAC,wBAAwB,EAAE;AAChC,YAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE;YACjC,UAAU,CAAC,MAAK;AACZ,gBAAA,IAAI;AACA,oBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,iCAAiC,CAAC,CAAC,KAAK,EAAE;gBAClF;gBAAE,OAAO,CAAC,EAAE;;;AAGR,oBAAA,OAAO,CAAC,KAAK,CAAC,iEAAiE,EAAE,CAAC,CAAC;oBACnF,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACtH,oBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;gBACtC;AACJ,YAAA,CAAC,CAAC;QACN;IACJ;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YAC3C,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,MAAM,CAAC,UAAU,GAAG,oCAAoC,EAAE;AAC7E,gBAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;YACvC;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,MAAM,CAAC,UAAU,IAAI,oCAAoC,EAAE;AACtF,gBAAA,MAAM,4BAA4B,GAAG,IAAI,CAAC,4BAA4B,EAAE;gBACxE,IAAI,CAAC,4BAA4B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,4BAA4B,CAAC,EAAE;AACtF,oBAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;gBACvC;YACJ;QACJ;IACJ;IAEQ,uBAAuB,GAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;;AAE3C,YAAA,MAAM,4BAA4B,GAAG,IAAI,CAAC,4BAA4B,EAAE;YACxE,IAAI,4BAA4B,IAAI,YAAY,CAAC,OAAO,CAAC,4BAA4B,CAAC,EAAE;gBACpF,IAAI,YAAY,CAAC,OAAO,CAAC,4BAA4B,CAAC,KAAK,MAAM,EAAE;AAC/D,oBAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;gBACvC;qBAAO;AACH,oBAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;gBACvC;YACJ;iBAAO;gBACH,IAAI,CAAC,cAAc,EAAE;YACzB;QACJ;IACJ;IAEA,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;AACtC,QAAA,MAAM,4BAA4B,GAAG,IAAI,CAAC,4BAA4B,EAAE;QACxE,IAAI,4BAA4B,EAAE;AAC9B,YAAA,YAAY,CAAC,OAAO,CAAC,4BAA4B,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;QAClF;IACJ;uGArMS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,4BAAA,EAAA,EAAA,iBAAA,EAAA,8BAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,SAAA,EA7BlB,CAAC,gBAAgB,EAAE,WAAW,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7DtF,wwHA+FA,EAAA,MAAA,EAAA,CAAA,0oKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED3CQ,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,yBAAyB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,4BAA4B,kJAC5B,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,aAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAYR;YACR,OAAO,CAAC,QAAQ,EAAE;AACd,gBAAA,UAAU,CACN,sBAAsB,EACtB,OAAO,CACH,wBAAwB,EACxB,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,CACzH,CACJ;AACD,gBAAA,UAAU,CACN,sBAAsB,EACtB,OAAO,CACH,wBAAwB,EACxB,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CACzG,CACJ;aACJ,CAAC;AACL,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEQ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA5ChC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACL,wBAAwB;wBACxB,yBAAyB;wBACzB,4BAA4B;wBAC5B,oBAAoB;wBACpB,WAAW;wBACX,eAAe;wBACf,mBAAmB;wBACnB,gBAAgB;AACnB,qBAAA,EAAA,SAAA,EACU,CAAC,gBAAgB,EAAE,WAAW,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,EAAA,IAAA,EAC5E;AACF,wBAAA,kBAAkB,EAAE,8BAA8B;AAClD,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,WAAW,EAAE,kBAAkB;AAC/B,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,qBAAqB,EAAE,qBAAqB;AAC5C,wBAAA,mBAAmB,EAAE,mBAAmB;AACxC,wBAAA,iBAAiB,EAAE,kBAAkB;qBACxC,EAAA,UAAA,EACW;wBACR,OAAO,CAAC,QAAQ,EAAE;AACd,4BAAA,UAAU,CACN,sBAAsB,EACtB,OAAO,CACH,wBAAwB,EACxB,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,CACzH,CACJ;AACD,4BAAA,UAAU,CACN,sBAAsB,EACtB,OAAO,CACH,wBAAwB,EACxB,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CACzG,CACJ;yBACJ,CAAC;AACL,qBAAA,EAAA,QAAA,EAAA,wwHAAA,EAAA,MAAA,EAAA,CAAA,0oKAAA,CAAA,EAAA;;;AExFL;;AAEG;;;;"}
1
+ {"version":3,"file":"agorapulse-ui-components-nav-selector.mjs","sources":["../../../libs/ui-components/nav-selector/src/nav-selector-popover/nav-selector-popover-item.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector.ts","../../../libs/ui-components/nav-selector/src/directives/tree-node-accessibility.directive.ts","../../../libs/ui-components/nav-selector/src/directives/nav-selector-popover-trigger.directive.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.accessibility.ts","../../../libs/ui-components/nav-selector/src/utils/leaf.utils.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.folding.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.single-select.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.builder.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.filter.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.merger.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.minifying.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.multi-select.ts","../../../libs/ui-components/nav-selector/src/utils/nav-selector.view-more.ts","../../../libs/ui-components/nav-selector/src/nav-selector.state.ts","../../../libs/ui-components/nav-selector/src/nav-selector-leaf-detail/nav-selector-leaf-detail.presenter.ts","../../../libs/ui-components/nav-selector/src/nav-selector-leaf-detail/nav-selector-leaf-detail.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector-leaf-detail/nav-selector-leaf-detail.component.html","../../../libs/ui-components/nav-selector/src/nav-selector-leaf-details/nav-selector-leaf-details.presenter.ts","../../../libs/ui-components/nav-selector/src/nav-selector-leaf-details/nav-selector-leaf-details.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector-leaf-details/nav-selector-leaf-details.component.html","../../../libs/ui-components/nav-selector/src/nav-selector-popover/nav-selector-popover.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector-popover/nav-selector-popover.component.html","../../../libs/ui-components/nav-selector/src/nav-selector-leaf/nav-selector-leaf.presenter.ts","../../../libs/ui-components/nav-selector/src/nav-selector-leaf/nav-selector-leaf.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector-leaf/nav-selector-leaf.component.html","../../../libs/ui-components/nav-selector/src/nav-selector-group/nav-selector-group.presenter.ts","../../../libs/ui-components/nav-selector/src/nav-selector-group/nav-selector-group.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector-group/nav-selector-group.component.html","../../../libs/ui-components/nav-selector/src/nav-selector-category/nav-selector-category.presenter.ts","../../../libs/ui-components/nav-selector/src/nav-selector-category/nav-selector-category.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector-category/nav-selector-category.component.html","../../../libs/ui-components/nav-selector/src/nav-selector.component.ts","../../../libs/ui-components/nav-selector/src/nav-selector.component.html","../../../libs/ui-components/nav-selector/src/agorapulse-ui-components-nav-selector.ts"],"sourcesContent":["import { BaseButtonDirective } from '@agorapulse/ui-components/directives';\nimport { apFeatureLock, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport { Component, inject, input } from '@angular/core';\n\n@Component({\n selector: 'ap-nav-selector-popover-item',\n hostDirectives: [BaseButtonDirective],\n template: `\n <button\n #buttonElement\n type=\"button\"\n role=\"button\"\n [disabled]=\"disabled()\"\n [name]=\"name()\"\n [attr.data-test]=\"baseButtonDirective.hostDataTest ?? name()\"\n [attr.id]=\"id()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-disabled]=\"disabled()?.toString()\">\n <ng-content />\n\n @if (locked()) {\n <ap-symbol\n symbolId=\"feature-lock\"\n color=\"purple\"\n size=\"sm\" />\n }\n </button>\n `,\n styleUrls: ['./nav-selector-popover-item.component.scss'],\n host: {\n '[class.selected]': 'selected()',\n '[class.disabled]': 'disabled()',\n '[class.locked]': 'locked()',\n },\n imports: [SymbolComponent],\n providers: [withSymbols(apFeatureLock)],\n})\nexport class NavSelectorPopoverItemComponent {\n selected = input(false);\n disabled = input(false);\n locked = input(false);\n id = input<string | null>('');\n name = input.required<string>();\n ariaLabel = input<string | undefined>(undefined);\n\n readonly baseButtonDirective: BaseButtonDirective = inject(BaseButtonDirective, { self: true });\n}\n","import { AvatarNetwork } from '@agorapulse/ui-components/avatar';\nimport { agorapulseSymbol } from '@agorapulse/ui-symbol';\n\nexport const NavSelectorStyle = {\n DEFAULT: 'default',\n MENU: 'menu',\n} as const;\nexport type NavSelectorStyle = (typeof NavSelectorStyle)[keyof typeof NavSelectorStyle];\n\nexport type NavSelectorLeafActionClickedEvent = {\n /** Name of the action that has been clicked */\n actionName: string;\n /** Leaf on which the action has been clicked */\n leafUid: string;\n};\n\nexport type NavSelectorCategoryEmptyStateActionEvent = {\n /** Name of the action that has been clicked */\n actionName: string;\n};\n\n/**\n * As translation is not available in the DS, this all translations needed\n */\nexport interface NavSelectorTranslatedTexts {\n /** Title of the nav selector */\n title: string;\n /** Only text in multi select mode */\n only: string;\n /** Tooltip displayed on folded group when one of its children have token is invalid */\n groupTokenInvalid: string;\n /** Toolip displaying that token is invalid */\n tokenInvalid: string;\n /** Toolip displaying that feature is locked */\n featureLocked: string;\n /** placeholder for the search input */\n searchPlaceholder: string;\n /** Text displayed when the search return no results */\n noResults: string;\n /** Text of the button to show more details, it’s used when we limit the number of details displayed */\n viewMore: string;\n /** Text of the button to show less details, it’s used when we limit the number of details displayed */\n viewLess: string;\n}\n\n/**\n * Common interface for the NavSelector\n */\nexport type NavSelectorBaseNode = {\n /** Unique identifier of the node */\n uid: string;\n /** Displayed name of the node */\n alias: string;\n};\n\n/**\n * Represent an action that can be performed on a leaf\n */\nexport type NavSelectorLeafAction = {\n /** Unique identifier of the action, used for click tracking */\n id: string | null;\n /** Action label to display */\n label: string;\n /** Technical name of the action, used to identify the action */\n name: string;\n /** Optional icon to display on the action */\n icon: string | null;\n /** Optional Status */\n status: 'disabled' | 'locked' | null;\n /** Whether to add a divider before this item */\n dividerEnabled?: boolean;\n};\n\n/**\n * Represent final entry of the nav selector\n */\nexport type NavSelectorLeaf = {\n /** Picture url to display on the avatar, optional */\n pictureUrl: string | null;\n /** Counter to display on the entry, to ignore if the leaf has details */\n counter: number | null;\n /** When true, the leaf will be hidden */\n missingPermission: boolean;\n /** For social profiles or ad accounts the corresponding network */\n network: AvatarNetwork | null;\n /** Translated text when the entry is disabled */\n disableReason: string | null;\n /** Indicates if entry has its token invalid */\n tokenInvalid: boolean;\n /** Indicates if entry is locked */\n featureLocked: boolean;\n /** Indicates if and which icon should be displayed before the label */\n startSymbolId: agorapulseSymbol | null;\n /** Indicates if and what dot color should be displayed before the label */\n startDotColor: string | null;\n /** Sub elements of the leaf, they are optional */\n details: NavSelectorLeafDetails[];\n /** Optional actions that can be performed on the leaf */\n actions: NavSelectorLeafAction[];\n type: 'LEAF';\n} & NavSelectorBaseNode;\n\n/**\n * Represent a group of entries which has been created by the user (ex: menuGroup)\n */\nexport type NavSelectorGroup = {\n /** A group can only have leaves as children */\n children: NavSelectorLeaf[];\n /** Indicates if the group should be folded or expanded when generating the nav selector */\n folded: boolean;\n type: 'GROUP';\n} & NavSelectorBaseNode;\n\n/**\n * Represent a category of entries which has been created by the product to separate different kind of entries (ex: social profiles, reports, ad accounts…)\n */\nexport type NavSelectorCategory = {\n /** A Category can have leaves or groups as children, you can have leaves alongside with groups */\n children: (NavSelectorLeaf | NavSelectorGroup)[];\n /** Indicates if the group should be folded or expanded when generating the nav selector */\n folded: boolean;\n /** Title of the empty state */\n emptyStateTitle?: string;\n /** Action of the empty state */\n emptyStateAction?: NavSelectorEmptyStateAction;\n\n avatar?: NavSelectorCategoryAvatar;\n\n type: 'CATEGORY';\n} & NavSelectorBaseNode;\n\nexport type NavSelectorCategoryAvatar =\n | {\n pictureUrl: string | null;\n rounded: boolean;\n }\n | {\n symbolId: agorapulseSymbol;\n };\n\n/**\n * Represent the action available in the empty state\n */\nexport type NavSelectorEmptyStateAction = {\n name: string;\n title: string;\n id?: string;\n symbolId?: agorapulseSymbol;\n featureLocked?: boolean;\n};\n\nexport type NavSelectorEntry = NavSelectorLeaf | NavSelectorGroup | NavSelectorCategory;\n\n/**\n * Represent details of a leaf, they are used to allow to display more specific information about the leaf\n */\nexport interface NavSelectorLeafDetails {\n /** Unique identifier of the node */\n uid: string;\n /** Counter to display on the entry */\n counter: number | null;\n /** If true, excludes this from the counter sum */\n excludedCounterSum: boolean;\n /** Displayed name of the node */\n name: string;\n /** Translation of the error on the leaf */\n errorReason: string | null;\n}\n\nexport const isNavSelectorEntryALeaf = (entry: NavSelectorEntry): entry is NavSelectorLeaf => entry.type === 'LEAF';\n\nexport const isNavSelectorEntryAGroup = (entry: NavSelectorEntry): entry is NavSelectorGroup => entry.type === 'GROUP';\n\nexport const isNavSelectorEntryACategory = (entry: NavSelectorEntry): entry is NavSelectorCategory => entry.type === 'CATEGORY';\n\n/**\n * Represent the accessibility on a node\n */\nexport type NodeAccessibility = {\n /** Number of sibling elements, itself included. Ex: there are 7 social profiles display in the group */\n ariaSetsize: number;\n /** Index starting from 1 of the element alongside its sibling */\n ariaPosinset: number;\n /** 0 to be focusable by Tab key and -1 to be focusable by keyboard with JS */\n tabIndex: number;\n /** In a tree, the deep level, starting from 1 */\n ariaLevel: number;\n};\n\nexport type InternalNavSelectorLeafAction = {\n /** Unique identifier of the action, used for click tracking */\n id: string | null;\n /** Action label to display */\n label: string;\n /** Technical name of the action, used to identify the action */\n name: string;\n /** Optional icon to display on the action */\n icon: string | null;\n /** Optional Status */\n status: 'disabled' | 'locked' | null;\n /** Whether to add a divider before this item */\n dividerEnabled?: boolean;\n};\n\n/**\n * Represent a node\n */\nexport type InternalNavSelectorBaseNode = {\n /** Unique identifier of the entry */\n uid: string;\n /** Displayed name of the entry */\n alias: string;\n accessibility: NodeAccessibility;\n /** When hidden, the entry is not displayed, used when searching an element */\n hidden: boolean;\n /** When true, you can navigate with arrow keys on this entry */\n focusable: boolean;\n};\n\n/**\n * Represent a group of entries which has been created by the user (ex: menuGroup)\n */\nexport type InternalNavSelectorGroup = {\n /** A group can only have leaves as children */\n children: InternalNavSelectorLeaf[];\n /** Picture url of the group, used when the nav selector is minified */\n childrenPictureUrlSample: { url: string | null; initial: string }[];\n /** Indicates whenever the group is folded or not */\n folded: boolean;\n /** Indicates the counter value to display when the group is folded */\n counter: number;\n /** Indicates if the counter should be display when the group is folded */\n displayCounter: boolean;\n /** Indicates if the token invalid icon should be display when the group is folded */\n displayTokenInvalid: boolean;\n /** Indicates in multi select mode if the group has some children selected */\n undeterminedSelection: boolean;\n /** Indicates if the group is selected */\n selected: boolean;\n /** Indicates if the group is selectable */\n selectable: boolean;\n type: 'GROUP';\n} & InternalNavSelectorBaseNode;\n\n/**\n * Represent a category of entries which has been created by the product to separate different kind of entries (ex: social profiles, reports, ad accounts…)\n */\nexport type InternalNavSelectorCategory = {\n /** A Category can have leaves or groups as children, you can have leaves alongside with groups */\n children: (InternalNavSelectorGroup | InternalNavSelectorLeaf)[];\n /** Indicates whenever the category is folded or not */\n folded: boolean;\n /** Title of the empty state */\n emptyStateTitle?: string;\n /** Action of the empty state */\n emptyStateAction?: NavSelectorEmptyStateAction;\n\n /** Avatar configuration of the category */\n avatarDisplayed: boolean;\n avatarRounded: boolean;\n avatarSymbolId: agorapulseSymbol | null;\n avatarPictureUrl: string | undefined;\n avatarPictureUrlDisplayed: boolean;\n\n type: 'CATEGORY';\n} & InternalNavSelectorBaseNode;\n\n/**\n * Represent final entry of the nav selector\n */\nexport type InternalNavSelectorLeaf = {\n /** Indicates if the actions dropdown could be display. Should not be display if the leaf has an error status. */\n actionsDisplayable: boolean;\n /** Actions that can be performed on the leaf */\n actions: InternalNavSelectorLeafAction[];\n /** Picture url to display on the avatar, optional */\n pictureUrl: string | null;\n /** Indicates if the counter could be display. The leaf should not be disabled, feature locked or has token invalid */\n counterDisplayable: boolean;\n /** Indicates if the token invalid icon should be display. So when displayable when no details or folded */\n displayCounter: boolean;\n /** Counter value to display */\n counter: number;\n /** Indicates if the token invalid icon should be display */\n displayTokenInvalid: boolean;\n /** Indicates if the feature is locked */\n displayFeatureLocked: boolean;\n /** Indicates if and which icon should be displayed before the label */\n startSymbolId: agorapulseSymbol | null;\n /** Indicates if and what dot color should be displayed before the label */\n startDotColor: string | null;\n /** Indicates if the leaf is disabled */\n disabled: boolean;\n /** The disabled reason to display in tooltip */\n disableReason: string | null;\n /** Indicates if the leaf is selected */\n selected: boolean;\n /** Indicates if the leaf is selectable */\n selectable: boolean;\n /** For social profiles or ad accounts, the corresponding network */\n network: AvatarNetwork | null;\n /** Indicates if the leaf foldable. So when it has details and no error status */\n foldable: boolean;\n /** Indicates if the leaf is folded */\n folded: boolean;\n /** Indicates if the leaf has one of its details selected */\n detailSelected: boolean;\n /** Indicates if the leaf has details and they are displayable. So no error status */\n detailsDisplayable: boolean;\n /** Details of the leaf */\n details: InternalNavSelectorLeafDetails[];\n type: 'LEAF';\n /** Indicates if the view more section should be display for details */\n viewMoreDisplayable: boolean;\n /** Indicates if the view more or view less button is displayed */\n viewMoreDisplayed: boolean;\n /** Number of details to display when the view more is not clicked */\n viewMoreDetailsDisplayedLimit: number;\n} & InternalNavSelectorBaseNode;\n\n/**\n * Represent details of a leaf, they are used to allow to display more specific information about the leaf\n */\nexport type InternalNavSelectorLeafDetails = {\n /** Unique identifier of the node */\n uid: string;\n /** Counter to display on the detail */\n counter: number;\n /** Indicates if the counter should be display. So no error on the detail */\n displayCounter: boolean;\n /** Displayed name of the node */\n alias: string;\n /** Indicates if the detail is selected */\n selected: boolean;\n /** Indicates if we should display an error icon */\n displayError: boolean;\n /** Translated text to display in the tooltip */\n errorReason: string | null;\n type: 'LEAF_DETAILS';\n} & InternalNavSelectorBaseNode;\n\nexport type InternalNavSelectorEntry =\n | InternalNavSelectorLeaf\n | InternalNavSelectorGroup\n | InternalNavSelectorCategory\n | InternalNavSelectorLeafDetails;\n\nexport const isInternalNavSelectorEntryALeaf = (entry: InternalNavSelectorEntry): entry is InternalNavSelectorLeaf => entry.type === 'LEAF';\n\nexport const isInternalNavSelectorEntryANode = (\n entry: InternalNavSelectorEntry\n): entry is InternalNavSelectorCategory | InternalNavSelectorGroup => `children` in entry;\n\nexport const isInternalNavSelectorEntryACategory = (entry: InternalNavSelectorEntry): entry is InternalNavSelectorCategory =>\n entry.type === 'CATEGORY';\n\nexport const isInternalNavSelectorEntryAGroup = (entry: InternalNavSelectorEntry): entry is InternalNavSelectorGroup =>\n entry.type === 'GROUP';\n\nexport const isInternalNavSelectorEntryALeafDetails = (entry: InternalNavSelectorEntry): entry is InternalNavSelectorLeafDetails =>\n entry.type === 'LEAF_DETAILS';\n","import { afterEveryRender, Directive, ElementRef, input, Renderer2 } from '@angular/core';\nimport { InternalNavSelectorEntry } from '../nav-selector';\n\n@Directive({\n selector: '[apTreeNodeAccessibility]',\n standalone: true,\n})\nexport class TreeNodeAccessibilityDirective {\n apTreeNodeAccessibility = input.required<InternalNavSelectorEntry>();\n\n constructor(el: ElementRef, renderer: Renderer2) {\n afterEveryRender(() => {\n const nativeEl = el.nativeElement;\n const entry = this.apTreeNodeAccessibility();\n renderer.setAttribute(nativeEl, 'aria-level', `${entry.accessibility.ariaLevel}`);\n renderer.setAttribute(nativeEl, 'aria-setsize', `${entry.accessibility.ariaSetsize}`);\n renderer.setAttribute(nativeEl, 'aria-posinset', `${entry.accessibility.ariaPosinset}`);\n renderer.setAttribute(nativeEl, 'tabindex', `${entry.accessibility.tabIndex}`);\n renderer.setAttribute(nativeEl, 'aria-label', `${entry.alias}`);\n if ('folded' in entry) {\n renderer.setAttribute(nativeEl, 'aria-expanded', `${entry.folded}`);\n }\n renderer.setAttribute(nativeEl, 'role', 'treeitem');\n });\n }\n}\n","import { Directive, effect, ElementRef, input, Renderer2, untracked } from '@angular/core';\nimport { NavSelectorPopoverComponent } from '../nav-selector-popover/nav-selector-popover.component';\n\nexport type NavSelectorPopoverTriggerMode = {\n click: boolean;\n hover: boolean;\n focus: boolean;\n keyboard: ('Space' | 'Enter' | string)[];\n};\n\n@Directive({\n selector: '[apNavSelectorPopoverTrigger]',\n standalone: true,\n host: {\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)',\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n },\n})\nexport class NavSelectorPopoverTriggerDirective {\n apNavSelectorPopoverTrigger = input.required<NavSelectorPopoverComponent>();\n apNavSelectorPopoverTriggerMode = input<Partial<NavSelectorPopoverTriggerMode>>({\n click: true,\n keyboard: [],\n hover: false,\n focus: false,\n });\n apNavSelectorPopoverDisabled = input<boolean>(false);\n\n private readonly ACTIVE_CLASS = 'nav-selector-popover-trigger--active';\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2\n ) {\n effect(() => {\n const displayed = this.apNavSelectorPopoverTrigger().navSelectorPopoverDisplayed();\n untracked(() => {\n if (displayed) {\n this.renderer.addClass(this.el.nativeElement, this.ACTIVE_CLASS);\n } else {\n this.renderer.removeClass(this.el.nativeElement, this.ACTIVE_CLASS);\n }\n });\n });\n }\n\n onClick(event: Event) {\n if (!this.apNavSelectorPopoverTriggerMode().click || this.apNavSelectorPopoverDisabled()) {\n return;\n }\n event.stopImmediatePropagation();\n this.toggleDisplay();\n }\n\n onKeydown(event: KeyboardEvent) {\n if (this.apNavSelectorPopoverTriggerMode().keyboard?.includes(event.code) && !this.apNavSelectorPopoverDisabled()) {\n this.toggleDisplay();\n }\n }\n\n onMouseEnter() {\n if (this.apNavSelectorPopoverTriggerMode().hover && !this.apNavSelectorPopoverDisabled()) {\n this.apNavSelectorPopoverTrigger().display(this.el);\n }\n }\n\n onMouseLeave() {\n if (this.apNavSelectorPopoverTriggerMode().hover) {\n this.apNavSelectorPopoverTrigger().hide();\n }\n }\n\n private toggleDisplay() {\n this.apNavSelectorPopoverTrigger().toggle(this.el);\n }\n}\n","import {\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n InternalNavSelectorLeaf,\n InternalNavSelectorLeafDetails,\n isInternalNavSelectorEntryACategory,\n isInternalNavSelectorEntryAGroup,\n isInternalNavSelectorEntryALeaf,\n isInternalNavSelectorEntryALeafDetails,\n} from '../nav-selector';\n\n/**\n * NavSelectorAccessibility is a utility class that provides methods to manage the accessibility and the focusability of nav selector entries.\n */\nexport class NavSelectorAccessibility {\n /**\n * Set tabIndex to 0 for the first focusable entry and -1 for all other entries\n * @param entries nav selector entries\n */\n static resetFocus(entries: InternalNavSelectorEntry[]): InternalNavSelectorEntry[] {\n const flattenEntries = this.flatten(entries);\n\n let alreadyFocused = false;\n\n for (const entry of flattenEntries) {\n if (alreadyFocused) {\n entry.accessibility.tabIndex = -1;\n } else if (entry.focusable) {\n alreadyFocused = true;\n entry.accessibility.tabIndex = 0;\n } else {\n entry.accessibility.tabIndex = -1;\n }\n }\n\n return this.unflatten(flattenEntries);\n }\n\n /**\n * Focus the given entry and set tabIndex to 0 for the given uid and -1 for all other entries\n * @param entries nav selector entries\n * @param uid the uid of the entry to focus\n */\n static focus<T extends InternalNavSelectorEntry>(entries: T[], uid: string): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryAGroup(entry) || isInternalNavSelectorEntryACategory(entry)) {\n return {\n ...this.focusAnEntry(entry, uid),\n children: NavSelectorAccessibility.focus(entry.children, uid),\n } as InternalNavSelectorGroup;\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return {\n ...this.focusAnEntry(entry, uid),\n details: entry.details.map(detail => this.focusAnEntry(detail, uid)),\n } as InternalNavSelectorLeaf;\n }\n return this.focusAnEntry(entry, uid);\n });\n }\n\n /**\n * Unfocus the given entry and set tabIndex to -1 for the given uid and 0 for all other entries\n * @param entries nav selector entries\n * @param uid the uid of the entry to unfocus\n */\n static unfocus(entries: InternalNavSelectorEntry[], uid: string): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryAGroup(entry) || isInternalNavSelectorEntryACategory(entry)) {\n return {\n ...this.unfocusAnEntry(entry, uid),\n children: NavSelectorAccessibility.unfocus(entry.children, uid),\n } as InternalNavSelectorGroup;\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return {\n ...this.unfocusAnEntry(entry, uid),\n details: entry.details.map(detail => this.unfocusAnEntry(detail, uid)),\n } as InternalNavSelectorLeaf;\n }\n return this.unfocusAnEntry(entry, uid);\n });\n }\n\n /**\n * Focus the previous entry focusable and set tabIndex to 0 for the previous focusable entry and -1 for all other entries\n *\n * If not previous entries are focusable, entries will not be modified\n *\n * @param entries nav selector entries\n */\n static focusPrevious<T extends InternalNavSelectorEntry>(entries: T[]): InternalNavSelectorEntry[] {\n const flattenEntries = this.flatten(entries);\n\n const idxFocusedId = flattenEntries.findIndex(({ accessibility }) => accessibility.tabIndex === 0);\n\n if (idxFocusedId === 0 || this.noPreviousEntryFocusable(flattenEntries, idxFocusedId)) {\n return entries;\n }\n\n const focusedEntry = flattenEntries[idxFocusedId];\n focusedEntry.accessibility.tabIndex = -1;\n\n for (let i = idxFocusedId - 1; i >= 0; i--) {\n const entry = flattenEntries[i];\n if (entry.focusable) {\n entry.accessibility.tabIndex = 0;\n break;\n }\n }\n\n return this.unflatten(flattenEntries);\n }\n\n /**\n * Focus the next entry focusable and set tabIndex to 0 for the next focusable entry and -1 for all other entries\n *\n * If not next entries are focusable, entries will not be modified\n *\n * @param entries nav selector entries\n */\n static focusNext<T extends InternalNavSelectorEntry>(entries: T[]): InternalNavSelectorEntry[] {\n const flattenEntries = this.flatten(entries);\n\n const focusableFlattenEntries = flattenEntries.filter(entry => entry.focusable);\n\n const idxFocusedId = focusableFlattenEntries.findIndex(({ accessibility }) => accessibility.tabIndex === 0);\n\n if (focusableFlattenEntries.length - 1 <= idxFocusedId) {\n return entries;\n }\n\n focusableFlattenEntries[idxFocusedId].accessibility.tabIndex = -1;\n\n focusableFlattenEntries[idxFocusedId + 1].accessibility.tabIndex = 0;\n\n return this.unflatten(flattenEntries);\n }\n\n private static noPreviousEntryFocusable(flattenEntries: InternalNavSelectorEntry[], idxFocusedId: number): boolean {\n for (let i = idxFocusedId - 1; i >= 0; i--) {\n const entry = flattenEntries[i];\n if (entry.focusable) {\n return false;\n }\n }\n\n return true;\n }\n\n private static focusAnEntry(entry: InternalNavSelectorEntry, uid: string): InternalNavSelectorEntry {\n return { ...entry, accessibility: { ...entry.accessibility, tabIndex: entry.uid === uid ? 0 : -1 } };\n }\n\n private static unfocusAnEntry(entry: InternalNavSelectorEntry, uid: string): InternalNavSelectorEntry {\n return { ...entry, accessibility: { ...entry.accessibility, tabIndex: entry.uid === uid ? -1 : entry.accessibility.tabIndex } };\n }\n\n /**\n * Flatten the nav selector entries. It is easier to work with flat entries for the focus management as we need to know which is the previous or the next entry\n * @param entries nav selector entries\n */\n private static flatten(entries: InternalNavSelectorEntry[]): InternalNavSelectorEntry[] {\n return entries.flatMap(entry => {\n if (isInternalNavSelectorEntryAGroup(entry) || isInternalNavSelectorEntryACategory(entry)) {\n return [{ ...entry, children: [] }, ...this.flatten(entry.children)];\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return [{ ...entry, details: [] }, ...entry.details.map(detail => ({ ...detail }))];\n }\n return [{ ...entry }];\n });\n }\n\n /**\n * Unflatten the nav selector entries\n * @param entries nav selector entries\n */\n private static unflatten<T extends InternalNavSelectorEntry>(entries: T[]): InternalNavSelectorEntry[] {\n return entries.reduceRight((acc, entry) => {\n if (!acc.length) {\n return [entry];\n }\n if (entry.accessibility.ariaLevel < acc[0].accessibility.ariaLevel) {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return [\n {\n ...entry,\n details: acc\n .filter(it => isInternalNavSelectorEntryALeafDetails(it))\n // Force destroying the reference to the original object else Angular will not detect the change\n .map(it => ({ ...it })) as InternalNavSelectorLeafDetails[],\n },\n ...acc.filter(it => !isInternalNavSelectorEntryALeafDetails(it)),\n ];\n } else if (isInternalNavSelectorEntryAGroup(entry) || isInternalNavSelectorEntryACategory(entry)) {\n return [\n {\n ...entry,\n children: acc.filter(\n ({ accessibility }) => accessibility.ariaLevel > entry.accessibility.ariaLevel\n ) as InternalNavSelectorLeaf[],\n },\n ...acc.filter(({ accessibility }) => accessibility.ariaLevel <= entry.accessibility.ariaLevel),\n ];\n }\n }\n return [entry, ...acc];\n }, [] as InternalNavSelectorEntry[]);\n }\n}\n","import {\n InternalNavSelectorCategory,\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n InternalNavSelectorLeaf,\n isInternalNavSelectorEntryAGroup,\n isInternalNavSelectorEntryALeaf,\n isInternalNavSelectorEntryANode,\n} from '../nav-selector';\n\n/**\n * Utility type to extract keys of an object that are of type string, number or symbol which are the only type allowed in a Record\n */\ntype AllowedKey<T> = Pick<T, { [K in keyof T]: T[K] extends string | number | symbol ? K : never }[keyof T]>;\n\n/**\n * Create a Record of key/value pairs from an array of objects\n * @param array\n * @param key attribute of the object to use as key\n */\nexport const associateBy = <T>(array: T[], key: keyof AllowedKey<T>): Record<string, T> =>\n array.reduce(\n (previousValue, currentValue) => {\n previousValue[`${currentValue[key]}`] = currentValue;\n return previousValue;\n },\n {} as Record<string, T>\n );\n\nexport const isInternalNavSelectorEntryALeafFocusable = (\n leaf: InternalNavSelectorLeaf,\n { parentFolded, multipleMode }: { parentFolded: boolean; multipleMode: boolean }\n): boolean => {\n if (parentFolded) {\n return false;\n }\n if (multipleMode) {\n return !leaf.disabled && !leaf.displayTokenInvalid && !leaf.displayFeatureLocked;\n }\n return !leaf.disabled;\n};\n\nexport const computeFolded = (\n entry: InternalNavSelectorGroup | InternalNavSelectorCategory,\n children: InternalNavSelectorEntry[]\n): boolean => {\n // If the entry is not folded, we keep it unfolded\n if (!entry.folded) {\n return false;\n }\n return !children.some(\n child =>\n (isInternalNavSelectorEntryALeaf(child) && (child.selected || !child.folded)) ||\n (isInternalNavSelectorEntryANode(child) && !child.folded) ||\n (isInternalNavSelectorEntryAGroup(child) && child.undeterminedSelection)\n );\n};\n\nexport const computeNumberOfDisplayableChildrenOnUnfold = (entry: InternalNavSelectorEntry): number => {\n if (isInternalNavSelectorEntryANode(entry)) {\n const nbChildren = entry.children.length;\n const nbDisplayableChildrenOfUnfoldedChild = entry.children\n .filter(child => !child.folded)\n .reduce((acc, child) => {\n return acc + computeNumberOfDisplayableChildrenOnUnfold(child);\n }, 0);\n return nbDisplayableChildrenOfUnfoldedChild + nbChildren;\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return entry.details.length;\n }\n return 0;\n};\n\nexport const computeSelectableUids = (entries: InternalNavSelectorEntry[]): string[] => {\n return entries.flatMap(entry => computeSelectableUidsByEntry(entry));\n};\n\nexport const computeSelectableUidsByEntry = (entry: InternalNavSelectorEntry): string[] => {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n // Disabled leafs can now be selected programmatically\n return [entry.uid, ...entry.details.filter(detail => !detail.hidden).map(detail => detail.uid)];\n }\n if (isInternalNavSelectorEntryANode(entry)) {\n return [entry.uid, ...entry.children.flatMap(child => computeSelectableUidsByEntry(child))];\n }\n return [];\n};\n\nexport const computeVisibleUids = (entries: InternalNavSelectorEntry[]): string[] => {\n return entries.flatMap(entry => computeVisibleUidsByEntry(entry));\n};\n\nexport const computeVisibleUidsByEntry = (entry: InternalNavSelectorEntry): string[] => {\n if (entry.hidden) {\n return [];\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return [entry.uid, ...entry.details.filter(detail => !detail.hidden).map(detail => detail.uid)];\n }\n if (isInternalNavSelectorEntryANode(entry)) {\n return entry.children.flatMap(child => computeVisibleUidsByEntry(child));\n }\n // Fallback for unexpected entry types (should never be reached)\n return [];\n};\n","import {\n InternalNavSelectorCategory,\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n InternalNavSelectorLeaf,\n isInternalNavSelectorEntryACategory,\n isInternalNavSelectorEntryAGroup,\n isInternalNavSelectorEntryALeaf,\n} from '../nav-selector';\nimport { isInternalNavSelectorEntryALeafFocusable } from '../utils/leaf.utils';\n\n/**\n * Options for folding operations\n */\nexport interface NavSelectorFoldingOptions {\n /** To update the focusable state of leaves and details correctly */\n multipleMode: boolean;\n /** True if the nav selector is minified. Needed for leaf as they are not foldable in minified mode */\n minified: boolean;\n}\n\n/**\n * Class to handle the folding and unfolding of nav selector entries.\n */\nexport class NavSelectorFolding {\n /**\n * Unfolds all parents of the entry with the given uid until the root.\n * @param entries nav selector entries\n * @param entryUid the entry uid to unfold parents for\n * @param options options for folding operations\n */\n static unfoldParents<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions\n ): InternalNavSelectorEntry[] {\n return this.unfoldParentsOfEntry(entries, entryUid, options).entries;\n }\n\n /**\n * Toggle the folding state of an entry.\n *\n * @see {@link NavSelectorFolding.fold} and {@link NavSelectorFolding.unfold} for more information on folding and unfolding.\n *\n * @param entries nav selector entries\n * @param entryUid the entry uid to toggle\n * @param options options for folding operations\n */\n static toggleFolding<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions\n ): InternalNavSelectorEntry[] {\n return this.toggleEntryFolding(entries, entryUid, options);\n }\n\n /**\n * Fold an entry.\n *\n * Set unfocusable on all children of the folded entry.\n * Compute whenever the counter and token invalid should be displayed on groups and leaves.\n *\n * @param entries nav selector entries\n * @param entryUid the entry uid to fold\n * @param options options for folding operations\n */\n static fold<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions\n ): InternalNavSelectorEntry[] {\n return this.foldEntry(entries, entryUid, options);\n }\n\n /**\n * Unfold an entry.\n *\n * Set focusable on all children of the folded entry.\n * Compute whenever the counter and token invalid should be displayed on groups and leaves.\n *\n * @param entries nav selector entries\n * @param entryUid the entry uid to unfold\n * @param options options for folding operations\n */\n static unfold<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions\n ): InternalNavSelectorEntry[] {\n return this.unfoldEntry(entries, entryUid, options);\n }\n\n private static toggleEntryFolding<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions,\n parentFolded = false\n ): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryACategory(entry)) {\n if (entry.uid === entryUid) {\n const folded = !entry.folded;\n if (folded) {\n return this.foldCategory(entry, options);\n } else {\n return this.unfoldCategory(entry, options);\n }\n }\n return {\n ...entry,\n children: this.toggleEntryFolding(entry.children, entryUid, options, entry.folded),\n };\n }\n if (isInternalNavSelectorEntryAGroup(entry)) {\n if (entry.uid === entryUid) {\n const folded = !entry.folded;\n if (folded) {\n return this.foldGroup(entry, options);\n } else {\n return this.unfoldGroup(entry, options);\n }\n }\n return {\n ...entry,\n children: this.toggleEntryFolding(entry.children, entryUid, options, parentFolded || entry.folded),\n };\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n if (entry.uid === entryUid) {\n const folded = !entry.folded;\n if (folded) {\n return this.foldLeaf(entry, options.minified);\n } else {\n return this.unfoldLeaf(entry, options.minified);\n }\n }\n return {\n ...entry,\n focusable: isInternalNavSelectorEntryALeafFocusable(entry, { parentFolded, multipleMode: options.multipleMode }),\n };\n }\n return { ...entry, focusable: !parentFolded };\n });\n }\n\n private static foldEntry<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions,\n parentFolded = false\n ): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryACategory(entry)) {\n if (entry.uid === entryUid) {\n return this.foldCategory(entry, options);\n }\n return {\n ...entry,\n children: this.foldEntry(entry.children, entryUid, options, entry.folded),\n };\n }\n if (isInternalNavSelectorEntryAGroup(entry)) {\n if (entry.uid === entryUid) {\n return this.foldGroup(entry, options);\n }\n return {\n ...entry,\n focusable: !parentFolded,\n children: this.foldEntry(entry.children, entryUid, options, parentFolded || entry.folded),\n };\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n if (entry.uid === entryUid) {\n return this.foldLeaf(entry, options.minified);\n }\n return {\n ...entry,\n focusable: isInternalNavSelectorEntryALeafFocusable(entry, { parentFolded, multipleMode: options.multipleMode }),\n };\n }\n return { ...entry, focusable: !parentFolded };\n });\n }\n\n private static unfoldEntry<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions,\n parentFolded = false\n ): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryACategory(entry)) {\n if (entry.uid === entryUid) {\n return this.unfoldCategory(entry, options);\n }\n return {\n ...entry,\n children: this.unfoldEntry(entry.children, entryUid, options, entry.folded),\n };\n }\n if (isInternalNavSelectorEntryAGroup(entry)) {\n if (entry.uid === entryUid) {\n return this.unfoldGroup(entry, options);\n }\n return {\n ...entry,\n children: this.unfoldEntry(entry.children, entryUid, options, parentFolded || entry.folded),\n focusable: !parentFolded,\n };\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n if (entry.uid === entryUid) {\n return this.unfoldLeaf(entry, options.minified);\n }\n return {\n ...entry,\n focusable: isInternalNavSelectorEntryALeafFocusable(entry, { parentFolded, multipleMode: options.multipleMode }),\n };\n }\n return { ...entry, focusable: !parentFolded };\n });\n }\n\n private static foldCategory(category: InternalNavSelectorCategory, options: NavSelectorFoldingOptions): InternalNavSelectorCategory {\n return {\n ...category,\n folded: true,\n children: this.foldEntry(category.children, category.uid, options, true) as (\n | InternalNavSelectorLeaf\n | InternalNavSelectorGroup\n )[],\n };\n }\n\n private static unfoldCategory(category: InternalNavSelectorCategory, options: NavSelectorFoldingOptions): InternalNavSelectorCategory {\n return {\n ...category,\n folded: false,\n children: this.unfoldEntry(category.children, category.uid, options, false) as (\n | InternalNavSelectorLeaf\n | InternalNavSelectorGroup\n )[],\n };\n }\n\n private static foldGroup(group: InternalNavSelectorGroup, options: NavSelectorFoldingOptions): InternalNavSelectorGroup {\n return {\n ...group,\n folded: true,\n children: this.foldEntry(group.children, group.uid, options, true) as InternalNavSelectorLeaf[],\n displayCounter: !!group.counter,\n displayTokenInvalid: group.children.some(({ displayTokenInvalid }) => displayTokenInvalid),\n };\n }\n\n private static unfoldGroup(group: InternalNavSelectorGroup, options: NavSelectorFoldingOptions): InternalNavSelectorGroup {\n return {\n ...group,\n folded: false,\n children: this.unfoldEntry(group.children, group.uid, options, false) as InternalNavSelectorLeaf[],\n displayCounter: false,\n displayTokenInvalid: false,\n };\n }\n\n private static foldLeaf(leaf: InternalNavSelectorLeaf, minified: boolean): InternalNavSelectorLeaf {\n if (!leaf.foldable || minified) {\n return leaf;\n }\n return {\n ...leaf,\n displayCounter: leaf.counterDisplayable,\n folded: true,\n details: leaf.details.map(detail => ({ ...detail, focusable: false })),\n };\n }\n\n private static unfoldLeaf(leaf: InternalNavSelectorLeaf, minified: boolean): InternalNavSelectorLeaf {\n if (!leaf.foldable || minified) {\n return leaf;\n }\n return {\n ...leaf,\n displayCounter: false,\n folded: false,\n details: leaf.details.map((detail, idx) => ({\n ...detail,\n focusable: idx < leaf.viewMoreDetailsDisplayedLimit && !detail.displayError,\n })),\n };\n }\n\n /**\n * Unfolds all parents of the entry with the given uid until the root.\n * @param entries nav selector entries\n * @param entryUid the entry uid to unfold parents for\n * @param options options for folding operations\n */\n static unfoldParentsOfEntry<T extends InternalNavSelectorEntry>(\n entries: T[],\n entryUid: string,\n options: NavSelectorFoldingOptions\n ): { found: boolean; entries: InternalNavSelectorEntry[] } {\n let found = false;\n const newEntries = entries.map(entry => {\n if (isInternalNavSelectorEntryACategory(entry)) {\n const entryFound = entry.children.some(({ uid }) => uid === entryUid);\n if (entryFound) {\n found = true;\n return this.unfoldCategory(entry, options);\n }\n const result = this.unfoldParentsOfEntry(entry.children, entryUid, options);\n found ||= result.found;\n if (result.found) {\n return {\n ...entry,\n children: result.entries,\n folded: false,\n focusable: true,\n };\n }\n } else if (isInternalNavSelectorEntryAGroup(entry)) {\n const entryFound = entry.children.some(({ uid }) => uid === entryUid);\n if (entryFound) {\n found = true;\n return { ...this.unfoldGroup(entry, options), focusable: true };\n }\n const result = this.unfoldParentsOfEntry(entry.children, entryUid, options);\n found ||= result.found;\n if (result.found) {\n return {\n ...entry,\n children: result.entries,\n folded: false,\n displayCounter: false,\n displayTokenInvalid: false,\n focusable: true,\n };\n }\n } else if (isInternalNavSelectorEntryALeaf(entry)) {\n const entryFound = entry.details.some(({ uid }) => uid === entryUid);\n if (entryFound) {\n found = true;\n return { ...this.unfoldLeaf(entry, options.minified), focusable: true };\n }\n }\n return entry;\n });\n return { found, entries: newEntries };\n }\n}\n","import {\n InternalNavSelectorEntry,\n InternalNavSelectorLeaf,\n InternalNavSelectorLeafDetails,\n isInternalNavSelectorEntryALeaf,\n isInternalNavSelectorEntryANode,\n} from '../nav-selector';\n\n/**\n * NavSelectorSingleSelect is a utility class that provides methods to select a single entry in a nav selector.\n */\nexport class NavSelectorSingleSelect {\n /**\n * Selects a single entry in the nav selector.\n * @param entries nav selector entries\n * @param entryUid the entry uid to select\n */\n static select<T extends InternalNavSelectorEntry>(entries: T[], entryUid: string): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return this.selectALeaf(entry, entryUid);\n } else if (isInternalNavSelectorEntryANode(entry)) {\n return {\n ...entry,\n children: entry.children.flatMap(child => this.select([child], entryUid)),\n };\n }\n return entry;\n });\n }\n\n private static selectALeaf(leaf: InternalNavSelectorLeaf, entryUid: string): InternalNavSelectorLeaf {\n if (!!leaf.details.length) {\n return this.selectALeafWithDetails(leaf, entryUid);\n }\n return this.selectALeafWithoutDetails(leaf, entryUid);\n }\n\n private static selectALeafWithDetails(leaf: InternalNavSelectorLeaf, entryUid: string): InternalNavSelectorLeaf {\n if (leaf.uid === entryUid) {\n if (!leaf.detailsDisplayable) {\n return this.selectALeafWitDetailsNotDisplayable(leaf);\n }\n\n return this.selectALeafWithDisplayableDetails(leaf);\n }\n const details = leaf.details.map(detail => {\n const detailSelected = detail.uid === entryUid && !detail.displayError;\n return {\n ...detail,\n selected: detailSelected,\n accessibility: {\n ...detail.accessibility,\n tabIndex: detailSelected ? 0 : -1,\n },\n };\n });\n\n return {\n ...leaf,\n accessibility: {\n ...leaf.accessibility,\n tabIndex: -1,\n },\n selected: false,\n folded: !leaf.folded ? false : details.every(detail => !detail.selected),\n detailSelected: details.some(detail => detail.selected),\n details,\n };\n }\n\n private static selectALeafWitDetailsNotDisplayable(leaf: InternalNavSelectorLeaf): InternalNavSelectorLeaf {\n const selected = leaf.selectable;\n return {\n ...leaf,\n selected,\n accessibility: {\n ...leaf.accessibility,\n tabIndex: selected ? 0 : -1,\n },\n folded: !leaf.detailsDisplayable,\n };\n }\n\n private static selectALeafWithDisplayableDetails(leaf: InternalNavSelectorLeaf): InternalNavSelectorLeaf {\n const details = leaf.details.reduce(\n ({ previousDetailSelected, details }, detail, idx) => {\n const detailSelected =\n !previousDetailSelected && leaf.detailsDisplayable && !detail.displayError && (idx === 0 || !details[idx - 1].selected);\n details.push({\n ...detail,\n selected: detailSelected,\n focusable: true,\n accessibility: {\n ...detail.accessibility,\n tabIndex: detailSelected ? 0 : -1,\n },\n });\n return { previousDetailSelected: previousDetailSelected || detailSelected, details };\n },\n { previousDetailSelected: false, details: [] as InternalNavSelectorLeafDetails[] }\n ).details;\n return {\n ...leaf,\n selected: false,\n accessibility: {\n ...leaf.accessibility,\n tabIndex: -1,\n },\n displayCounter: false,\n folded: !leaf.detailsDisplayable,\n detailSelected: details.some(detail => detail.selected),\n details,\n };\n }\n\n private static selectALeafWithoutDetails(leaf: InternalNavSelectorLeaf, entryUid: string): InternalNavSelectorLeaf {\n const selected = leaf.selectable && leaf.uid === entryUid;\n return {\n ...leaf,\n selected,\n accessibility: {\n ...leaf.accessibility,\n tabIndex: selected ? 0 : -1,\n },\n folded: true,\n };\n }\n}\n","import {\n InternalNavSelectorCategory,\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n InternalNavSelectorLeaf,\n InternalNavSelectorLeafDetails,\n isInternalNavSelectorEntryACategory,\n isInternalNavSelectorEntryAGroup,\n isInternalNavSelectorEntryALeaf,\n isNavSelectorEntryACategory,\n isNavSelectorEntryAGroup,\n isNavSelectorEntryALeaf,\n NavSelectorCategory,\n NavSelectorCategoryAvatar,\n NavSelectorEntry,\n NavSelectorGroup,\n NavSelectorLeaf,\n NavSelectorLeafDetails,\n} from '../nav-selector';\nimport { computeSelectableUids } from '../utils/leaf.utils';\nimport { NavSelectorAccessibility } from '../utils/nav-selector.accessibility';\nimport { NavSelectorFolding } from '../utils/nav-selector.folding';\nimport { NavSelectorSingleSelect } from './nav-selector.single-select';\n\nconst LeafLogics = {\n DISABLED: 'DISABLED',\n FEATURE_LOCKED: 'FEATURE_LOCKED',\n TOKEN_INVALID: 'TOKEN_INVALID',\n COUNTER: 'COUNTER',\n} as const;\ntype LeafLogics = keyof typeof LeafLogics;\n\n/**\n * NavSelectorBuilder is a utility class that builds the NavSelector entries for single and multiple select modes.\n * It also checks the structure of the entries to ensure they are valid.\n */\nexport class NavSelectorBuilder {\n // /!\\/!\\ Order of logics is important /!\\/!\\\n private static LEAF_LOGICS_PRIORITY: Record<LeafLogics, (lef: NavSelectorLeaf) => boolean> = {\n [LeafLogics.DISABLED]: (leaf: NavSelectorLeaf) => leaf.disableReason !== null,\n [LeafLogics.FEATURE_LOCKED]: (leaf: NavSelectorLeaf) => leaf.featureLocked,\n [LeafLogics.TOKEN_INVALID]: (leaf: NavSelectorLeaf) => leaf.tokenInvalid,\n [LeafLogics.COUNTER]: (leaf: NavSelectorLeaf) => leaf.counter !== null,\n };\n\n /**\n * Builds the NavSelector entries for single select mode.\n * @param entries nav selector entries\n * @param selectedEntryUid selected entry uid\n * @param detailsDisplayedLimit number of details displayed limit\n */\n static build(entries: NavSelectorEntry[], selectedEntryUid: string | null, detailsDisplayedLimit: number): InternalNavSelectorEntry[] {\n this.structureChecker(entries);\n let builtEntries = this.buildEntries(entries, false, 1, detailsDisplayedLimit);\n if (selectedEntryUid) {\n builtEntries = NavSelectorSingleSelect.select(builtEntries, selectedEntryUid);\n builtEntries = NavSelectorFolding.unfoldParents(builtEntries, selectedEntryUid, { multipleMode: false, minified: false });\n }\n return builtEntries;\n }\n\n /**\n * Builds the NavSelector entries for multiple select mode.\n * @param entries nav selector entries\n * @param selectedEntryUids selected entry uids\n * @param detailsDisplayedLimit number of details displayed limit\n */\n static buildInMultipleMode(\n entries: NavSelectorEntry[],\n selectedEntryUids: string[] | null,\n detailsDisplayedLimit: number\n ): InternalNavSelectorEntry[] {\n this.structureChecker(entries, true);\n let builtEntries = this.buildEntries(entries, true, 1, detailsDisplayedLimit);\n if (selectedEntryUids) {\n // Filter out group/category uids - only leafs and leaf details should be selectable\n const selectableUids = computeSelectableUids(builtEntries);\n const validSelectedUids = selectedEntryUids.filter(uid => selectableUids.includes(uid));\n\n // Building entries with allowed selection of disabled items\n builtEntries = this.setInitialSelection(builtEntries, validSelectedUids);\n\n // Unfold parents for all selected items\n for (const selectedEntryUid of validSelectedUids) {\n builtEntries = NavSelectorFolding.unfoldParents(builtEntries, selectedEntryUid, { multipleMode: false, minified: false });\n }\n }\n return builtEntries;\n }\n\n private static structureChecker(entries: NavSelectorEntry[], multipleModeEnabled = false): void {\n entries.forEach(entry => {\n if (isNavSelectorEntryAGroup(entry) || isNavSelectorEntryACategory(entry)) {\n this.structureChecker(entry.children, multipleModeEnabled);\n } else if (isNavSelectorEntryALeaf(entry)) {\n if (entry.details.length && multipleModeEnabled) {\n console.error(`NavSelectorBuilder: Leaf ${entry.uid} with details is not allowed in multiple mode`);\n }\n }\n });\n }\n\n private static buildEntries(\n entries: NavSelectorEntry[],\n multipleModeEnabled: boolean,\n level = 1,\n detailsDisplayedLimit: number\n ): InternalNavSelectorEntry[] {\n const newEntries = entries\n .map((entry, idx) =>\n this.buildEntry(entry, { multipleModeEnabled, level, idx, totalNumberOfEntry: entries.length, detailsDisplayedLimit })\n )\n .filter(it => it !== null);\n return NavSelectorAccessibility.resetFocus(newEntries);\n }\n\n private static buildEntry(\n entry: NavSelectorEntry,\n {\n multipleModeEnabled,\n level,\n idx,\n totalNumberOfEntry,\n detailsDisplayedLimit,\n }: { multipleModeEnabled: boolean; level: number; idx: number; totalNumberOfEntry: number; detailsDisplayedLimit: number }\n ): InternalNavSelectorEntry | null {\n if (isNavSelectorEntryALeaf(entry)) {\n return this.buildLeaf(entry, {\n multipleModeEnabled,\n level,\n idx,\n totalNumberOfLeaf: totalNumberOfEntry,\n focusable: true,\n detailsDisplayedLimit,\n });\n } else if (isNavSelectorEntryACategory(entry)) {\n return this.buildCategory(entry, {\n multipleModeEnabled,\n level,\n idx,\n totalNumberOfCategory: totalNumberOfEntry,\n detailsDisplayedLimit,\n });\n } else {\n return this.buildGroup(entry, {\n multipleModeEnabled,\n level,\n idx,\n totalNumberOfGroups: totalNumberOfEntry,\n focusable: true,\n detailsDisplayedLimit,\n });\n }\n }\n\n private static buildCategoryChildren(\n entry: NavSelectorCategory,\n {\n focusable,\n multipleModeEnabled,\n categoryLevel,\n detailsDisplayedLimit,\n }: {\n focusable: boolean;\n multipleModeEnabled: boolean;\n categoryLevel: number;\n detailsDisplayedLimit: number;\n }\n ): (InternalNavSelectorGroup | InternalNavSelectorLeaf)[] {\n return entry.children\n .map((child, idx) => {\n if (isNavSelectorEntryALeaf(child)) {\n return this.buildLeaf(child, {\n focusable,\n multipleModeEnabled,\n level: categoryLevel + 1,\n idx,\n totalNumberOfLeaf: entry.children.length,\n detailsDisplayedLimit,\n });\n } else {\n return this.buildGroup(child, {\n focusable,\n multipleModeEnabled,\n level: categoryLevel + 1,\n idx,\n totalNumberOfGroups: entry.children.length,\n detailsDisplayedLimit,\n });\n }\n })\n .filter(it => it !== null);\n }\n\n private static buildCategory(\n node: NavSelectorCategory,\n {\n multipleModeEnabled,\n level,\n idx,\n totalNumberOfCategory,\n detailsDisplayedLimit,\n }: {\n multipleModeEnabled: boolean;\n level: number;\n idx: number;\n totalNumberOfCategory: number;\n detailsDisplayedLimit: number;\n }\n ): InternalNavSelectorCategory {\n const children = this.buildCategoryChildren(node, {\n focusable: !node.folded,\n multipleModeEnabled,\n categoryLevel: level,\n detailsDisplayedLimit,\n });\n\n return {\n uid: node.uid,\n alias: node.alias,\n children,\n hidden: false,\n focusable: true,\n accessibility: {\n tabIndex: -1,\n ariaLevel: level,\n ariaPosinset: idx + 1,\n ariaSetsize: totalNumberOfCategory,\n },\n folded: node.folded,\n emptyStateTitle: node.emptyStateTitle,\n emptyStateAction: node.emptyStateAction,\n ...this.buildCategoryAvatar(node.avatar),\n type: node.type,\n };\n }\n\n private static buildCategoryAvatar(\n categoryAvatar: NavSelectorCategoryAvatar | undefined\n ): Pick<\n InternalNavSelectorCategory,\n 'avatarDisplayed' | 'avatarSymbolId' | 'avatarPictureUrl' | 'avatarRounded' | 'avatarPictureUrlDisplayed'\n > {\n if (!categoryAvatar) {\n return {\n avatarDisplayed: false,\n avatarSymbolId: null,\n avatarPictureUrl: undefined,\n avatarRounded: false,\n avatarPictureUrlDisplayed: false,\n };\n }\n\n if ('pictureUrl' in categoryAvatar) {\n return {\n avatarDisplayed: true,\n avatarSymbolId: null,\n avatarPictureUrl: categoryAvatar.pictureUrl ? categoryAvatar.pictureUrl : undefined,\n avatarRounded: categoryAvatar.rounded,\n avatarPictureUrlDisplayed: true,\n };\n }\n\n return {\n avatarDisplayed: true,\n avatarSymbolId: categoryAvatar.symbolId,\n avatarPictureUrl: undefined,\n avatarRounded: false,\n avatarPictureUrlDisplayed: false,\n };\n }\n\n private static buildGroupChildren(\n entry: NavSelectorGroup,\n {\n multipleModeEnabled,\n groupLevel,\n focusable,\n detailsDisplayedLimit,\n }: { multipleModeEnabled: boolean; groupLevel: number; focusable: boolean; detailsDisplayedLimit: number }\n ): InternalNavSelectorLeaf[] {\n return entry.children\n .map((child, idx) =>\n this.buildLeaf(child, {\n multipleModeEnabled,\n level: groupLevel + 1,\n idx,\n totalNumberOfLeaf: entry.children.length,\n focusable: focusable && !entry.folded,\n detailsDisplayedLimit,\n })\n )\n .filter(it => it !== null);\n }\n\n private static buildGroup(\n node: NavSelectorGroup,\n {\n focusable,\n multipleModeEnabled,\n level,\n idx,\n totalNumberOfGroups,\n detailsDisplayedLimit,\n }: {\n focusable: boolean;\n multipleModeEnabled: boolean;\n level: number;\n idx: number;\n totalNumberOfGroups: number;\n detailsDisplayedLimit: number;\n }\n ): InternalNavSelectorGroup | null {\n const children = this.buildGroupChildren(node, { multipleModeEnabled, groupLevel: level, focusable, detailsDisplayedLimit });\n\n if (!children.length) {\n return null;\n }\n\n const displayTokenInvalid = children.some(({ displayTokenInvalid }) => displayTokenInvalid);\n\n const selectedChildrenCount = children.filter(({ selected }) => selected).length;\n // A group is selected if all children are either selected or not selectable\n // (disabled children must still be selected to count)\n const selected = children.every(c => c.selected || !c.selectable);\n\n return {\n uid: node.uid,\n alias: node.alias,\n children,\n childrenPictureUrlSample: children\n .map((child, idx) =>\n isInternalNavSelectorEntryALeaf(child) && idx < 4 ? { url: child.pictureUrl, initial: child.alias[0] } : null\n )\n .filter(it => it !== null),\n hidden: false,\n accessibility: {\n tabIndex: -1,\n ariaPosinset: idx + 1,\n ariaLevel: level,\n ariaSetsize: totalNumberOfGroups,\n },\n focusable,\n displayCounter: node.folded && children.some(child => isInternalNavSelectorEntryALeaf(child) && child.counter !== 0),\n counter: children.reduce((acc, { counter }) => acc + counter, 0),\n displayTokenInvalid,\n selected,\n selectable: multipleModeEnabled && children.some(child => child.selectable && !child.disabled),\n undeterminedSelection: !selected && selectedChildrenCount > 0,\n folded: node.folded,\n type: node.type,\n };\n }\n\n private static buildLeaf(\n leaf: NavSelectorLeaf,\n {\n focusable,\n multipleModeEnabled,\n level,\n idx,\n totalNumberOfLeaf,\n detailsDisplayedLimit,\n }: {\n focusable: boolean;\n multipleModeEnabled: boolean;\n level: number;\n idx: number;\n totalNumberOfLeaf: number;\n detailsDisplayedLimit: number;\n }\n ): InternalNavSelectorLeaf | null {\n if (leaf.missingPermission) {\n return null;\n }\n\n const detailsDisplayable = this.isLeafLogicValid(leaf, LeafLogics.COUNTER) && !!leaf.details.length;\n const foldable = !!leaf.details.length && detailsDisplayable;\n const folded = true;\n const counter =\n (leaf.details.filter(detail => !detail.excludedCounterSum).reduce((acc, detail) => acc + (detail.counter ?? 0), 0) ||\n leaf.counter) ??\n 0;\n const counterDisplayable = counter !== 0 && this.isLeafLogicValid(leaf, LeafLogics.COUNTER);\n\n const disabled = leaf.disableReason !== null;\n\n const viewMoreDisplayable = leaf.details.length > detailsDisplayedLimit;\n\n return {\n uid: leaf.uid,\n alias: leaf.alias,\n actions: leaf.actions,\n pictureUrl: leaf.pictureUrl,\n actionsDisplayable: !!leaf.actions.length && this.isLeafLogicValid(leaf, LeafLogics.COUNTER),\n disabled,\n disableReason: leaf.disableReason,\n hidden: false,\n focusable:\n focusable &&\n ((multipleModeEnabled && this.isLeafLogicValid(leaf, LeafLogics.COUNTER)) || (!multipleModeEnabled && !disabled)),\n accessibility: {\n tabIndex: -1,\n ariaPosinset: idx + 1,\n ariaLevel: level,\n ariaSetsize: totalNumberOfLeaf,\n },\n foldable,\n folded,\n displayCounter: folded && counterDisplayable,\n counterDisplayable,\n counter,\n network: leaf.network,\n displayTokenInvalid: leaf.tokenInvalid && this.isLeafLogicValid(leaf, LeafLogics.TOKEN_INVALID, LeafLogics.COUNTER),\n displayFeatureLocked:\n leaf.featureLocked && this.isLeafLogicValid(leaf, LeafLogics.FEATURE_LOCKED, LeafLogics.TOKEN_INVALID, LeafLogics.COUNTER),\n startSymbolId: leaf.startSymbolId,\n startDotColor: leaf.startDotColor,\n selected: false,\n // In multiple mode, a disabled item can still be selectable (programmatically)\n // We exclude DISABLED from validation to allow selected + disabled state\n selectable: multipleModeEnabled\n ? this.isLeafLogicValid(leaf, LeafLogics.DISABLED, LeafLogics.COUNTER)\n : this.isLeafLogicValid(leaf, LeafLogics.FEATURE_LOCKED, LeafLogics.TOKEN_INVALID, LeafLogics.COUNTER),\n detailsDisplayable,\n details: leaf.details.map(detail => this.buildLeafDetail(detail, level + 1, focusable && !folded)),\n detailSelected: false,\n type: 'LEAF',\n viewMoreDisplayable,\n viewMoreDisplayed: viewMoreDisplayable,\n viewMoreDetailsDisplayedLimit: detailsDisplayedLimit,\n };\n }\n\n private static buildLeafDetail(detail: NavSelectorLeafDetails, level: number, focusable: boolean): InternalNavSelectorLeafDetails {\n return {\n uid: detail.uid,\n counter: detail.counter ?? 0,\n displayCounter: detail.counter !== null,\n alias: detail.name,\n hidden: false,\n accessibility: {\n tabIndex: -1,\n ariaPosinset: 1,\n ariaLevel: level,\n ariaSetsize: 1,\n },\n focusable,\n selected: false,\n errorReason: detail.errorReason,\n displayError: detail.errorReason !== null,\n type: 'LEAF_DETAILS',\n };\n }\n\n /**\n * Sets initial selection state for entries based on selectedEntryUids.\n * This allows disabled items to be selected programmatically during initialization.\n */\n private static setInitialSelection(entries: InternalNavSelectorEntry[], selectedEntryUids: string[]): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return {\n ...entry,\n selected: selectedEntryUids.includes(entry.uid),\n };\n } else if (isInternalNavSelectorEntryACategory(entry)) {\n return {\n ...entry,\n children: this.setInitialSelection(entry.children, selectedEntryUids) as (\n | InternalNavSelectorGroup\n | InternalNavSelectorLeaf\n )[],\n };\n } else if (isInternalNavSelectorEntryAGroup(entry)) {\n const children = this.setInitialSelection(entry.children, selectedEntryUids) as InternalNavSelectorLeaf[];\n // A group is selected if all children are either selected or not selectable\n // (disabled children must still be selected to count)\n const selected = children.every(c => c.selected || !c.selectable);\n const undeterminedSelection = !selected && children.some(c => c.selected);\n\n return {\n ...entry,\n children,\n selected,\n undeterminedSelection,\n };\n }\n return entry;\n });\n }\n\n private static isLeafLogicValid(leaf: NavSelectorLeaf, ...excludes: LeafLogics[]): boolean {\n return Object.entries(this.LEAF_LOGICS_PRIORITY)\n .filter(([key]) => !excludes.includes(key as LeafLogics))\n .every(([, logic]) => !logic(leaf));\n }\n}\n","import {\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n InternalNavSelectorLeaf,\n isInternalNavSelectorEntryACategory,\n isInternalNavSelectorEntryAGroup,\n isInternalNavSelectorEntryALeaf,\n isInternalNavSelectorEntryANode,\n} from '../nav-selector';\nimport { isInternalNavSelectorEntryALeafFocusable } from '../utils/leaf.utils';\nimport { NavSelectorAccessibility } from '../utils/nav-selector.accessibility';\n\n/**\n * NavSelectorFilter is a utility class that provides methods to filter entries\n */\nexport class NavSelectorFilter {\n /**\n * Filters the entries based on the search string\n *\n * The search string is normalized and lowercase and trimmed.\n *\n * If a category matches the search string, all its children are unfolded, marked as focusable, and not hidden.\n *\n * If a group matches the search string, the group is unfolded and all its children are unfolded, marked as focusable, and not hidden.\n *\n * If a leaf matches the search string, it is marked as not hidden and focusable.\n *\n * Else the entry marked as hidden and not focusable.\n *\n * It also determines whenever counter and token invalid should be displayed on groups and leaves.\n *\n * @param entries The entries to filter.\n * @param search The search string.\n * @param multipleMode to update the focusable state of leaves correctly.\n * @returns The filtered entries.\n */\n static filter(entries: InternalNavSelectorEntry[], search: string, multipleMode: boolean): InternalNavSelectorEntry[] {\n const formattedSearch = this.cleanValue(search);\n if (!formattedSearch) {\n return this.resetState(entries);\n }\n return this.filterEntries(entries, formattedSearch, multipleMode);\n }\n\n private static filterEntries<T extends InternalNavSelectorEntry>(\n entries: T[],\n formattedSearch: string,\n multipleMode: boolean\n ): InternalNavSelectorEntry[] {\n const newEntries = entries.map(entry => {\n if (this.matches(entry.alias, formattedSearch)) {\n return this.recursivelyUnfoldEntry(entry, multipleMode);\n }\n if (isInternalNavSelectorEntryANode(entry)) {\n const children = this.filterEntries(entry.children, formattedSearch, multipleMode);\n if (children.every(({ hidden }) => hidden)) {\n return {\n ...entry,\n children,\n focusable: false,\n hidden: true,\n };\n }\n return {\n ...entry,\n hidden: false,\n focusable: true,\n displayCounter: false,\n displayTokenInvalid: false,\n folded: false,\n children,\n };\n }\n\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return {\n ...entry,\n focusable: false,\n hidden: true,\n details: entry.details.map(detail => ({\n ...detail,\n focusable: false,\n })),\n };\n }\n\n return {\n ...entry,\n focusable: false,\n hidden: true,\n };\n });\n return NavSelectorAccessibility.resetFocus(newEntries);\n }\n\n private static recursivelyUnfoldEntry(entry: InternalNavSelectorEntry, multipleMode: boolean): InternalNavSelectorEntry {\n if (isInternalNavSelectorEntryAGroup(entry)) {\n const children = entry.children.map(child => this.recursivelyUnfoldEntry(child, multipleMode) as InternalNavSelectorLeaf);\n return {\n ...entry,\n hidden: false,\n folded: false,\n focusable: true,\n children,\n displayCounter: false,\n displayTokenInvalid: false,\n };\n } else if (isInternalNavSelectorEntryALeaf(entry)) {\n const leafFocusable = isInternalNavSelectorEntryALeafFocusable(entry, { parentFolded: false, multipleMode });\n return {\n ...entry,\n hidden: false,\n focusable: leafFocusable,\n displayCounter: entry.folded && entry.counterDisplayable,\n details: entry.details.map(detail => ({\n ...detail,\n focusable: !entry.folded,\n })),\n };\n } else if (isInternalNavSelectorEntryACategory(entry)) {\n const children = entry.children.map(\n child => this.recursivelyUnfoldEntry(child, multipleMode) as InternalNavSelectorGroup | InternalNavSelectorLeaf\n );\n return {\n ...entry,\n focusable: true,\n folded: false,\n hidden: false,\n children,\n };\n }\n return entry;\n }\n\n private static matches(alias: string, formattedSearch: string): boolean {\n return this.cleanValue(alias).includes(formattedSearch);\n }\n\n private static cleanValue(value: string): string {\n return value.trim().normalize('NFKC').toLowerCase();\n }\n\n private static resetState<T extends InternalNavSelectorEntry>(entries: T[], parentFolded: boolean = false): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryANode(entry)) {\n return {\n ...entry,\n hidden: false,\n focusable: !parentFolded,\n children: this.resetState(entry.children, entry.folded),\n };\n }\n return {\n ...entry,\n focusable: !parentFolded,\n hidden: false,\n };\n });\n }\n}\n","import {associateBy} from '..//utils/leaf.utils';\nimport {\n InternalNavSelectorCategory,\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n InternalNavSelectorLeaf,\n isInternalNavSelectorEntryAGroup,\n isInternalNavSelectorEntryALeaf,\n isInternalNavSelectorEntryANode,\n} from '../nav-selector';\n\n/**\n * NavSelectorMerger is a utility class that merges old entries into new entries.\n * It is used to keep some previous properties of the previous state. Ex: folded, selected, focused, etc.\n */\nexport class NavSelectorMerger {\n /**\n * Merges the old entries into the new entries.\n *\n * Modify directly the new entries as new entries are generated from scratch so no need to destructure them to have a new reference.\n *\n * @param newEntries\n * @param oldEntries\n *\n * @returns the new entries with the old entries merged into them\n */\n public static mergeInternalNavSelectorEntries(\n newEntries: InternalNavSelectorEntry[],\n oldEntries: InternalNavSelectorEntry[]\n ): InternalNavSelectorEntry[] {\n const oldEntryByUid = associateBy(oldEntries, 'uid');\n\n for (const newEntry of newEntries) {\n if (!oldEntryByUid[newEntry.uid]) {\n continue;\n }\n this.merge(newEntry, oldEntryByUid[newEntry.uid]);\n }\n\n return newEntries;\n }\n\n private static merge(newEntry: InternalNavSelectorEntry, oldEntry: InternalNavSelectorEntry) {\n if (isInternalNavSelectorEntryALeaf(newEntry) && isInternalNavSelectorEntryALeaf(oldEntry)) {\n this.mergeLeaf(newEntry, oldEntry);\n } else if (isInternalNavSelectorEntryANode(newEntry) && isInternalNavSelectorEntryANode(oldEntry)) {\n this.mergeInternalNavSelectorEntries(newEntry.children, oldEntry.children);\n this.mergeNode(newEntry, oldEntry);\n }\n }\n\n private static mergeNode(\n newNode: InternalNavSelectorGroup | InternalNavSelectorCategory,\n oldNode: InternalNavSelectorGroup | InternalNavSelectorCategory\n ) {\n newNode.folded = oldNode.folded;\n newNode.accessibility.tabIndex = oldNode.accessibility.tabIndex;\n\n if (isInternalNavSelectorEntryAGroup(newNode) && isInternalNavSelectorEntryAGroup(oldNode)) {\n this.mergeGroup(newNode, oldNode);\n }\n }\n\n private static mergeGroup(newGroup: InternalNavSelectorGroup, oldGroup: InternalNavSelectorGroup) {\n newGroup.displayCounter = oldGroup.displayCounter;\n newGroup.displayTokenInvalid = oldGroup.displayTokenInvalid;\n }\n\n private static mergeLeaf(newLeaf: InternalNavSelectorLeaf, oldLeaf: InternalNavSelectorLeaf) {\n if (this.isInternalLeafLogicValid(newLeaf)) {\n newLeaf.viewMoreDisplayable = newLeaf.details.length > newLeaf.viewMoreDetailsDisplayedLimit;\n newLeaf.viewMoreDisplayed = oldLeaf.viewMoreDisplayed;\n\n newLeaf.folded = oldLeaf.folded;\n newLeaf.displayCounter = newLeaf.folded && newLeaf.counterDisplayable;\n // Don't copy selected state - it's set by the builder based on initialSelectedEntryUids\n\n newLeaf.accessibility.tabIndex = oldLeaf.accessibility.tabIndex;\n\n const oldDetailByUId = associateBy(oldLeaf.details, 'uid');\n newLeaf.details.forEach(newDetail => {\n if (!oldDetailByUId[newDetail.uid] || newDetail.errorReason) {\n return;\n }\n // Don't copy selected state - it's set by the builder based on initialSelectedEntryUids\n newDetail.accessibility.tabIndex = oldDetailByUId[newDetail.uid].accessibility.tabIndex;\n });\n } else {\n const oldDetailHasFocused = oldLeaf.details.some(oldDetail => oldDetail.accessibility.tabIndex === 0);\n if (oldDetailHasFocused) {\n newLeaf.accessibility.tabIndex = 0;\n }\n }\n }\n\n private static isInternalLeafLogicValid(leaf: InternalNavSelectorLeaf): boolean {\n return !leaf.disabled && !leaf.displayTokenInvalid && !leaf.displayFeatureLocked;\n }\n}\n","import {\n InternalNavSelectorCategory,\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n isInternalNavSelectorEntryALeafDetails,\n isInternalNavSelectorEntryANode,\n} from '../nav-selector';\nimport { isInternalNavSelectorEntryALeafFocusable } from '../utils/leaf.utils';\n\n/**\n * NavSelectorMinifying is a utility class that provides methods to apply rules on entries when minifying or expanded nav selector.\n */\nexport class NavSelectorMinifying {\n /**\n * When minifying the nav selector, compute the focusable state of the entries.\n *\n * Leaf are not focusable in any error state when minified.\n * Detail are not focusable when minified.\n *\n * @param entries The entries to minify.\n * @param multipleMode to update the focusable state of leaves correctly.\n * @returns The modified entries.\n */\n static minify<T extends InternalNavSelectorEntry>(entries: T[], multipleMode: boolean): InternalNavSelectorEntry[] {\n return this.compute(entries, multipleMode, true);\n }\n\n /**\n * When expanding the nav selector, compute the focusable state of the entries.\n *\n * Leaf are not focusable in disabled state when expanded.\n * Detail are focusable when expanded.\n *\n * @param entries The entries to minify.\n * @param multipleMode to update the focusable state of leaves and details correctly.\n * @returns The modified entries.\n */\n static expand<T extends InternalNavSelectorEntry>(entries: T[], multipleMode: boolean): InternalNavSelectorEntry[] {\n return this.compute(entries, multipleMode, false);\n }\n\n private static compute<T extends InternalNavSelectorEntry>(\n entries: T[],\n multipleMode: boolean,\n minified: boolean,\n parent: InternalNavSelectorGroup | InternalNavSelectorCategory | null = null\n ): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryALeafDetails(entry)) {\n return {\n ...entry,\n focusable: !minified,\n accessibility: { ...entry.accessibility, tabIndex: minified ? -1 : entry.accessibility.tabIndex },\n };\n }\n if (isInternalNavSelectorEntryANode(entry)) {\n return {\n ...entry,\n children: this.compute(entry.children, multipleMode, minified, entry),\n };\n }\n\n return {\n ...entry,\n focusable: isInternalNavSelectorEntryALeafFocusable(entry, {\n parentFolded: parent?.folded === true,\n multipleMode,\n }),\n details: this.compute(entry.details, multipleMode, minified),\n };\n });\n }\n}\n","import {\n InternalNavSelectorCategory,\n InternalNavSelectorEntry,\n InternalNavSelectorGroup,\n InternalNavSelectorLeaf,\n isInternalNavSelectorEntryACategory,\n isInternalNavSelectorEntryAGroup,\n isInternalNavSelectorEntryALeaf,\n} from '../nav-selector';\n\n/**\n * NavSelectorMultiSelect is a utility class that provides methods to select an entry in multiple mode.\n */\nexport class NavSelectorMultiSelect {\n /**\n * Select an entry in multiple mode.\n *\n * Categories are not selectable.\n *\n * Groups and leaves are selectable.\n *\n * Groups may be in undetermined state if some of their children are selected and some are not.\n * @param entries nav selector entries\n * @param entryUid the entry uid to select\n */\n static selectInMultipleMode(entries: InternalNavSelectorEntry[], entryUid: string): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return this.selectALeafInMultipleMode(entry, entryUid);\n } else if (isInternalNavSelectorEntryAGroup(entry)) {\n return this.selectAGroupInMultipleMode(entry, entryUid);\n } else if (isInternalNavSelectorEntryACategory(entry)) {\n return this.selectACategoryInMultipleMode(entry, entryUid);\n }\n return entry;\n });\n }\n\n /**\n * Select only a leaf in multiple mode.\n *\n * Categories are not selectable.\n *\n * Groups may be in undetermined state if some of their children are selected and some are not.\n * @param entries nav selector entries\n * @param entryUid the entry uid to select\n */\n static selectOnlyALeafInMultipleMode<T extends InternalNavSelectorEntry>(entries: T[], entryUid: string): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n return {\n ...entry,\n selected: entry.uid === entryUid,\n };\n } else if (isInternalNavSelectorEntryACategory(entry)) {\n return {\n ...entry,\n children: this.selectOnlyALeafInMultipleMode(entry.children, entryUid),\n };\n } else if (isInternalNavSelectorEntryAGroup(entry)) {\n const children = entry.children.flatMap(\n child => this.selectOnlyALeafInMultipleMode([child], entryUid) as InternalNavSelectorLeaf[]\n );\n const selected = children.every(child => child.selected || (isInternalNavSelectorEntryALeaf(child) && !child.selectable));\n return {\n ...entry,\n children,\n selected,\n undeterminedSelection: !selected && children.some(child => child.selected),\n };\n }\n return entry;\n });\n }\n\n /**\n * Select all entries in multiple mode.\n *\n * Categories are not selectable.\n *\n * Groups and leaves are selectable.\n * @param entries nav selector entries\n */\n static selectAll(entries: InternalNavSelectorEntry[]): InternalNavSelectorEntry[] {\n return this.selectChildren(entries);\n }\n\n /**\n * Unselect all entries in multiple mode.\n *\n * Categories are not selectable.\n *\n * Groups and leaves are selectable.\n * @param entries nav selector entries\n */\n static unselectAll(entries: InternalNavSelectorEntry[]): InternalNavSelectorEntry[] {\n return this.unselectChildren(entries);\n }\n\n private static selectALeafInMultipleMode(leaf: InternalNavSelectorLeaf, entryUid: string): InternalNavSelectorLeaf {\n let selected = leaf.selected;\n\n // Only allow toggle if item is selectable AND not disabled\n // This blocks user interaction on disabled items\n if (leaf.uid === entryUid && leaf.selectable && !leaf.disabled) {\n selected = !leaf.selected;\n }\n\n return {\n ...leaf,\n selected,\n };\n }\n\n private static selectACategoryInMultipleMode(entry: InternalNavSelectorCategory, entryUid: string): InternalNavSelectorCategory {\n return {\n ...entry,\n children: entry.children.map(child => {\n if (isInternalNavSelectorEntryALeaf(child)) {\n return this.selectALeafInMultipleMode(child, entryUid);\n }\n return this.selectAGroupInMultipleMode(child, entryUid);\n }),\n };\n }\n\n private static selectAGroupInMultipleMode(entry: InternalNavSelectorGroup, entryUid: string): InternalNavSelectorGroup {\n if (!entry.selectable) {\n return entry;\n }\n let selected: boolean;\n let children: InternalNavSelectorLeaf[];\n let undeterminedSelection = false;\n if (entry.uid === entryUid) {\n selected = !entry.selected;\n if (selected) {\n children = this.selectLeafs(entry.children);\n } else {\n children = this.unselectLeafs(entry.children);\n }\n // Recalculate selected and undeterminedSelection based on children\n // because disabled items may have retained their selected state.\n // A group is selected if all children are either selected or not selectable\n // (disabled children must still be selected to count)\n selected = children.every(child => child.selected || (isInternalNavSelectorEntryALeaf(child) && !child.selectable));\n undeterminedSelection = !selected && children.some(child => child.selected);\n } else {\n children = entry.children.map(child => this.toggleSelectLeaf(child, entryUid));\n // A group is selected if all children are either selected or not selectable\n // (disabled children must still be selected to count)\n selected = children.every(child => child.selected || (isInternalNavSelectorEntryALeaf(child) && !child.selectable));\n undeterminedSelection = !selected && children.some(child => child.selected);\n }\n\n return {\n ...entry,\n children,\n selected,\n undeterminedSelection,\n };\n }\n\n private static toggleSelectLeaf(leaf: InternalNavSelectorLeaf, uid: string): InternalNavSelectorLeaf {\n if (leaf.uid === uid) {\n return {\n ...leaf,\n selected: !leaf.selected,\n };\n }\n return leaf;\n }\n\n private static selectLeafs(leafs: InternalNavSelectorLeaf[]): InternalNavSelectorLeaf[] {\n return leafs.map(leaf => ({\n ...leaf,\n // Disabled or non-selectable leafs retain their current selected state\n selected: leaf.disabled || !leaf.selectable ? leaf.selected : leaf.selectable,\n }));\n }\n\n private static unselectLeafs(leafs: InternalNavSelectorLeaf[]): InternalNavSelectorLeaf[] {\n return leafs.map(leaf => ({\n ...leaf,\n // Disabled or non-selectable leafs retain their current selected state\n selected: leaf.disabled || !leaf.selectable ? leaf.selected : false,\n }));\n }\n\n private static unselectChildren<T extends InternalNavSelectorEntry>(entry: T[]): InternalNavSelectorEntry[] {\n return entry.map(child => {\n if (isInternalNavSelectorEntryALeaf(child)) {\n return {\n ...child,\n // Disabled or non-selectable leafs retain their current selected state\n selected: child.disabled || !child.selectable ? child.selected : false,\n };\n } else if (isInternalNavSelectorEntryACategory(child)) {\n return {\n ...child,\n children: this.unselectChildren(child.children),\n };\n } else if (isInternalNavSelectorEntryAGroup(child)) {\n const children = this.unselectChildren(child.children) as InternalNavSelectorLeaf[];\n // Recalculate group state based on children\n // A group is selected if all children are either selected or not selectable\n // (disabled children must still be selected to count)\n const selected = children.every(c => c.selected || (isInternalNavSelectorEntryALeaf(c) && !c.selectable));\n const undeterminedSelection = !selected && children.some(c => c.selected);\n return {\n ...child,\n children,\n selected,\n undeterminedSelection,\n };\n }\n return child;\n });\n }\n\n private static selectChildren<T extends InternalNavSelectorEntry>(entry: T[]): InternalNavSelectorEntry[] {\n return entry.map(child => {\n if (isInternalNavSelectorEntryALeaf(child)) {\n return {\n ...child,\n // Disabled or non-selectable leafs retain their current selected state\n selected: child.disabled || !child.selectable ? child.selected : child.selectable,\n };\n } else if (isInternalNavSelectorEntryACategory(child)) {\n return {\n ...child,\n children: this.selectChildren(child.children),\n };\n } else if (isInternalNavSelectorEntryAGroup(child)) {\n const children = this.selectChildren(child.children) as InternalNavSelectorLeaf[];\n // Recalculate group state based on children\n // A group is selected if all children are either selected or not selectable\n // (disabled children must still be selected to count)\n const selected = children.every(c => c.selected || (isInternalNavSelectorEntryALeaf(c) && !c.selectable));\n const undeterminedSelection = !selected && children.some(c => c.selected);\n return {\n ...child,\n children,\n selected,\n undeterminedSelection,\n };\n }\n return child;\n });\n }\n}\n","import { InternalNavSelectorEntry, isInternalNavSelectorEntryALeaf, isInternalNavSelectorEntryANode } from '../nav-selector';\n\n/**\n * Utility class to handle the view more functionality on leaves\n */\nexport class NavSelectorViewMore {\n /**\n * Change the view more details displayed limit on leaves\n * @param entries nav selector entries\n * @param limit the number of details we want to display by default\n */\n static changeViewMoreDetailsDisplayedLimit<T extends InternalNavSelectorEntry>(\n entries: T[],\n limit: number\n ): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryANode(entry)) {\n return {\n ...entry,\n children: this.changeViewMoreDetailsDisplayedLimit(entry.children, limit),\n };\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n const viewMoreDisplayable = entry.details.length > limit;\n return {\n ...entry,\n viewMoreDisplayed: viewMoreDisplayable,\n viewMoreDisplayable,\n viewMoreDetailsDisplayedLimit: limit,\n details: entry.details.map((detail, idx) => ({\n ...detail,\n focusable: entry.focusable && !entry.folded && idx < limit,\n })),\n };\n }\n return entry;\n });\n }\n\n /**\n * We want to display all details of the leaf\n *\n * set viewMoreDisplayed to false and set all details as focusable\n *\n * @param entries nav selector entries\n * @param leafUid the uid of the leaf we want to view all details\n */\n static viewMore<T extends InternalNavSelectorEntry>(entries: T[], leafUid: string): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryANode(entry)) {\n return {\n ...entry,\n children: this.viewMore(entry.children, leafUid),\n };\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n if (entry.uid === leafUid) {\n return {\n ...entry,\n viewMoreDisplayed: false,\n details: entry.details.map(detail => ({\n ...detail,\n focusable: true,\n })),\n };\n }\n }\n return entry;\n });\n }\n\n /**\n * We want to display only the number of details of the leaf corresponding to the viewMoreDetailsDisplayedLimit\n *\n * set viewMoreDisplayed to true and set only the details with an index lower than the limit as focusable\n *\n * @param entries nav selector entries\n * @param uid the uid of the leaf we want to view all details\n */\n static viewLess<T extends InternalNavSelectorEntry>(entries: T[], uid: string): InternalNavSelectorEntry[] {\n return entries.map(entry => {\n if (isInternalNavSelectorEntryANode(entry)) {\n return {\n ...entry,\n children: this.viewLess(entry.children, uid),\n };\n }\n if (isInternalNavSelectorEntryALeaf(entry)) {\n if (entry.uid === uid) {\n return {\n ...entry,\n viewMoreDisplayed: true,\n details: entry.details.map((detail, idx) => ({\n ...detail,\n focusable: idx < entry.viewMoreDetailsDisplayedLimit,\n })),\n };\n }\n }\n return entry;\n });\n }\n}\n","import { computed, effect, Injectable, Signal, signal, untracked } from '@angular/core';\nimport { isEqual } from 'es-toolkit';\nimport {\n InternalNavSelectorEntry,\n InternalNavSelectorLeaf,\n InternalNavSelectorLeafDetails,\n isInternalNavSelectorEntryALeaf,\n isInternalNavSelectorEntryANode,\n NavSelectorEntry,\n NavSelectorStyle,\n NavSelectorTranslatedTexts,\n} from './nav-selector';\nimport { NavSelectorAccessibility } from './utils/nav-selector.accessibility';\nimport { NavSelectorBuilder } from './utils/nav-selector.builder';\nimport { NavSelectorFilter } from './utils/nav-selector.filter';\nimport { NavSelectorFolding, NavSelectorFoldingOptions } from './utils/nav-selector.folding';\nimport { NavSelectorMerger } from './utils/nav-selector.merger';\nimport { NavSelectorMinifying } from './utils/nav-selector.minifying';\nimport { NavSelectorMultiSelect } from './utils/nav-selector.multi-select';\nimport { NavSelectorSingleSelect } from './utils/nav-selector.single-select';\nimport { NavSelectorViewMore } from './utils/nav-selector.view-more';\n\n/**\n * NavSelectorState is a service that manages the state of the nav selector.\n *\n * It should be provided by the component to ensure that if many nav selectors are used in the same page, they don't share the same state.\n */\n@Injectable()\nexport class NavSelectorState {\n _entries = signal<InternalNavSelectorEntry[]>([]);\n entries = this._entries.asReadonly();\n style!: Signal<NavSelectorStyle>;\n private multipleModeEnabled = signal<boolean>(false);\n private _texts = signal<NavSelectorTranslatedTexts>({\n title: '',\n only: '',\n tokenInvalid: '',\n groupTokenInvalid: '',\n featureLocked: '',\n searchPlaceholder: '',\n noResults: '',\n viewMore: '',\n viewLess: '',\n });\n\n isMultipleModeEnabled = this.multipleModeEnabled;\n search = signal<string>('');\n\n noResults = computed(() => this._entries().every(({ hidden }) => hidden));\n texts = this._texts.asReadonly();\n\n isAllSelected = computed(() => {\n if (!this.multipleModeEnabled()) {\n return false;\n }\n\n const entries = this._entries();\n return this.areAllSelectableItemsSelected(entries);\n });\n\n isSelectAllIndeterminate = computed(() => {\n if (!this.multipleModeEnabled()) {\n return false;\n }\n\n const entries = this._entries();\n const allSelected = this.areAllSelectableItemsSelected(entries);\n\n if (allSelected) {\n return false;\n }\n\n // Check if ANY item is selected (including disabled/mandatory items)\n // This matches the behavior of group checkboxes\n const selectedUids = this.collectSelectedUids(entries);\n return selectedUids.length > 0;\n });\n\n expanded = signal(true);\n\n previousSelectedUids: string[] = [];\n private selectedUidsChangeCallback: ((selectedUids: string[]) => void) | null = null;\n private newSelectedUids = computed(() => this.collectSelectedUids(this._entries()), { equal: isEqual });\n\n constructor() {\n effect(() => {\n const uids = this.newSelectedUids();\n untracked(() => {\n if (this.selectedUidsChangeCallback && !isEqual(this.previousSelectedUids, uids)) {\n this.selectedUidsChangeCallback(uids);\n this.previousSelectedUids = uids;\n }\n });\n });\n\n effect(() => {\n const search = this.search();\n untracked(() => {\n this._entries.update(entries => NavSelectorFilter.filter(entries, search, this.multipleModeEnabled()));\n });\n });\n }\n\n updateMultiModeEnabled(enabled: boolean) {\n this.multipleModeEnabled.set(enabled);\n }\n\n initEntries(entries: NavSelectorEntry[], initialSelectedEntryUids: string[], detailsDisplayedLimit: number) {\n if (this.multipleModeEnabled()) {\n this._entries.set(NavSelectorBuilder.buildInMultipleMode(entries, initialSelectedEntryUids, detailsDisplayedLimit));\n } else {\n this._entries.set(NavSelectorBuilder.build(entries, initialSelectedEntryUids?.[0] ?? null, detailsDisplayedLimit));\n }\n }\n\n updateEntries(entries: NavSelectorEntry[], initialSelectedEntryUids: string[], detailsDisplayedLimit: number) {\n let newEntries: InternalNavSelectorEntry[];\n if (this.multipleModeEnabled()) {\n newEntries = NavSelectorBuilder.buildInMultipleMode(entries, initialSelectedEntryUids, detailsDisplayedLimit);\n } else {\n newEntries = NavSelectorBuilder.build(entries, initialSelectedEntryUids?.[0] ?? null, detailsDisplayedLimit);\n }\n this._entries.update(oldEntries => {\n const mergeEntries = NavSelectorMerger.mergeInternalNavSelectorEntries(newEntries, oldEntries);\n return NavSelectorFilter.filter(mergeEntries, this.search(), this.multipleModeEnabled());\n });\n }\n\n onGroupToggleFolding(group: InternalNavSelectorEntry) {\n this._entries.update(entries => NavSelectorFolding.toggleFolding(entries, group.uid, this.getFoldingOptions()));\n }\n\n onNodeSelect(node: InternalNavSelectorEntry) {\n this._entries.update(entries => NavSelectorMultiSelect.selectInMultipleMode(entries, node.uid));\n }\n\n onLeafClicked(leaf: InternalNavSelectorLeaf) {\n if (!leaf.selectable) {\n return;\n }\n\n // In multiple mode, block clicks on disabled leafs\n // (they can be selected programmatically but not by the user)\n if (this.multipleModeEnabled() && leaf.disabled) {\n return;\n }\n\n this._entries.update(entries => {\n let updatedEntries = entries;\n if (leaf.foldable) {\n const options = this.getFoldingOptions();\n\n const unfoldedLeafUids = this.findUnfoldedLeafUids(entries);\n\n for (const uid of unfoldedLeafUids) {\n updatedEntries = NavSelectorFolding.fold(updatedEntries, uid, options);\n }\n }\n\n if (this.multipleModeEnabled()) {\n return NavSelectorMultiSelect.selectInMultipleMode(updatedEntries, leaf.uid);\n } else {\n return NavSelectorSingleSelect.select(updatedEntries, leaf.uid);\n }\n });\n }\n\n onLeafToggleFolding(leaf: InternalNavSelectorEntry) {\n this._entries.update(entries => {\n const options = this.getFoldingOptions();\n\n // Find all unfolded leaves except the clicked one and fold them first\n let updatedEntries = entries;\n const unfoldedLeafUids = this.findUnfoldedLeafUids(entries).filter(uid => uid !== leaf.uid);\n\n for (const uid of unfoldedLeafUids) {\n updatedEntries = NavSelectorFolding.fold(updatedEntries, uid, options);\n }\n\n // Then toggle the clicked leaf\n return NavSelectorFolding.toggleFolding(updatedEntries, leaf.uid, options);\n });\n }\n\n private findUnfoldedLeafUids(entries: InternalNavSelectorEntry[]): string[] {\n const unfoldedUids: string[] = [];\n\n for (const entry of entries) {\n if (isInternalNavSelectorEntryALeaf(entry) && entry.foldable && !entry.folded) {\n unfoldedUids.push(entry.uid);\n } else if (isInternalNavSelectorEntryANode(entry)) {\n unfoldedUids.push(...this.findUnfoldedLeafUids(entry.children));\n }\n }\n\n return unfoldedUids;\n }\n\n onLeafDetailClicked(leafDetail: InternalNavSelectorLeafDetails) {\n this._entries.update(entries => NavSelectorSingleSelect.select(entries, leafDetail.uid));\n }\n\n updateTexts(texts: NavSelectorTranslatedTexts) {\n this._texts.set(texts);\n }\n\n selectOnlyLeaf(leaf: InternalNavSelectorLeaf) {\n this._entries.update(entries => NavSelectorMultiSelect.selectOnlyALeafInMultipleMode(entries, leaf.uid));\n }\n\n toggleExpanded() {\n this.expanded.update(expanded => !expanded);\n this._entries.update(entries => {\n if (this.expanded()) {\n return NavSelectorMinifying.expand(entries, this.multipleModeEnabled());\n }\n return NavSelectorMinifying.minify(entries, this.multipleModeEnabled());\n });\n }\n\n minify() {\n if (this.expanded()) {\n this.toggleExpanded();\n }\n }\n\n forceMinify() {\n this.expanded.set(false);\n this._entries.update(entries =>\n NavSelectorAccessibility.resetFocus(NavSelectorMinifying.minify(entries, this.multipleModeEnabled()))\n );\n }\n\n forceExpand() {\n this.expanded.set(true);\n this._entries.update(entries =>\n NavSelectorAccessibility.resetFocus(NavSelectorMinifying.expand(entries, this.multipleModeEnabled()))\n );\n }\n\n onSelectionChange(uids: string[]) {\n // Avoid infinite loop if you put unexisting uids as select will generate the same entries but with different reference\n if (isEqual(uids, this.previousSelectedUids)) {\n return;\n }\n\n const selectedUids = this.newSelectedUids();\n const uidToSelect = uids.filter(uid => !selectedUids.includes(uid));\n const uidToUnselect = selectedUids.filter(uid => !uids.includes(uid));\n\n if (!uidToSelect.length && !uidToUnselect.length) {\n return;\n }\n\n let entries = this._entries();\n\n if (this.multipleModeEnabled()) {\n for (const uid of [...uidToSelect, ...uidToUnselect]) {\n entries = NavSelectorMultiSelect.selectInMultipleMode(entries, uid);\n }\n\n for (const uid of uidToSelect) {\n entries = NavSelectorFolding.unfoldParents(entries, uid, {\n multipleMode: true,\n minified: !this.expanded(),\n });\n }\n } else {\n entries = NavSelectorSingleSelect.select(entries, uids[0]);\n entries = NavSelectorFolding.unfoldParents(entries, uids[0], {\n multipleMode: false,\n minified: !this.expanded(),\n });\n }\n\n this._entries.set(entries);\n }\n\n registerOnSelectedUidsChange(callback: (selectedUids: string[]) => void) {\n this.selectedUidsChangeCallback = callback;\n }\n\n onArrowDown() {\n this._entries.update(entries => NavSelectorAccessibility.focusNext(entries));\n }\n\n onArrowUp() {\n this._entries.update(entries => NavSelectorAccessibility.focusPrevious(entries));\n }\n\n private collectSelectedUids(entries: InternalNavSelectorEntry[]): string[] {\n return entries.flatMap(entry => {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n if (entry.detailsDisplayable) {\n return entry.details.flatMap(detail => (detail.selected ? [detail.uid] : []));\n }\n return entry.selected ? [entry.uid] : [];\n } else if (isInternalNavSelectorEntryANode(entry)) {\n return this.collectSelectedUids(entry.children);\n }\n return [];\n });\n }\n\n private getFoldingOptions(): NavSelectorFoldingOptions {\n return {\n multipleMode: this.multipleModeEnabled(),\n minified: !this.expanded(),\n };\n }\n\n fold(entry: InternalNavSelectorEntry) {\n this._entries.update(entries => NavSelectorFolding.fold(entries, entry.uid, this.getFoldingOptions()));\n }\n\n unfold(entry: InternalNavSelectorEntry) {\n this._entries.update(entries => NavSelectorFolding.unfold(entries, entry.uid, this.getFoldingOptions()));\n }\n\n updateDetailsDisplayedLimit(detailsDisplayedLimit: number) {\n this._entries.update(entries => NavSelectorViewMore.changeViewMoreDetailsDisplayedLimit(entries, detailsDisplayedLimit));\n }\n\n viewMore(leaf: InternalNavSelectorLeaf) {\n this._entries.update(entries => NavSelectorViewMore.viewMore(entries, leaf.uid));\n }\n\n viewLess(leaf: InternalNavSelectorLeaf) {\n this._entries.update(entries => NavSelectorViewMore.viewLess(entries, leaf.uid));\n }\n\n resetFocus(): void {\n this._entries.update(entries => NavSelectorAccessibility.resetFocus(entries));\n }\n\n toggleSelectAll(): void {\n if (!this.multipleModeEnabled()) {\n return;\n }\n\n this._entries.update(entries => {\n const allSelected = this.areAllSelectableItemsSelected(entries);\n return allSelected ? NavSelectorMultiSelect.unselectAll(entries) : NavSelectorMultiSelect.selectAll(entries);\n });\n }\n\n private areAllSelectableItemsSelected(entries: InternalNavSelectorEntry[]): boolean {\n const selectableNonDisabledUids = this.collectSelectableNonDisabledUids(entries);\n const selectedUids = this.collectSelectedUids(entries);\n\n if (selectableNonDisabledUids.length === 0) {\n return false;\n }\n\n return selectableNonDisabledUids.every(uid => selectedUids.includes(uid));\n }\n\n private collectSelectableNonDisabledUids(entries: InternalNavSelectorEntry[]): string[] {\n return entries.flatMap(entry => {\n if (isInternalNavSelectorEntryALeaf(entry)) {\n // Only include selectable and non-disabled items (user-interactable)\n return entry.selectable && !entry.disabled ? [entry.uid] : [];\n } else if (isInternalNavSelectorEntryANode(entry)) {\n return this.collectSelectableNonDisabledUids(entry.children);\n }\n return [];\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { InternalNavSelectorLeafDetails } from '../nav-selector';\nimport { NavSelectorState } from '../nav-selector.state';\n\n@Injectable()\nexport class NavSelectorLeafDetailPresenter {\n constructor(private navSelectorState: NavSelectorState) {}\n\n onLeafDetailClicked(detail: InternalNavSelectorLeafDetails) {\n if (!detail.displayError) {\n this.navSelectorState.onLeafDetailClicked(detail);\n }\n }\n}\n","import { CounterComponent } from '@agorapulse/ui-components/counter';\nimport { TooltipDirective } from '@agorapulse/ui-components/tooltip';\nimport { apErrorFill, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { TreeNodeAccessibilityDirective } from '../directives/tree-node-accessibility.directive';\nimport { InternalNavSelectorLeafDetails } from '../nav-selector';\nimport { NavSelectorLeafDetailPresenter } from './nav-selector-leaf-detail.presenter';\n\n@Component({\n selector: 'ap-nav-selector-leaf-detail',\n templateUrl: './nav-selector-leaf-detail.component.html',\n styleUrls: ['./nav-selector-leaf-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CounterComponent, SymbolComponent, TooltipDirective],\n providers: [withSymbols(apErrorFill), NavSelectorLeafDetailPresenter],\n host: {\n '(click)': 'onClick($event)',\n '[class.selected]': 'detail().selected',\n '[class.embedded]': 'embedded()',\n '[class.disabled]': 'detail().displayError',\n '(keydown.enter)': 'onClick($event)',\n '(keydown.space)': 'onClick($event)',\n },\n hostDirectives: [\n {\n directive: TreeNodeAccessibilityDirective,\n // Alias the input of the directive to detail the input detail will be used in the directive and in the component as well\n inputs: ['apTreeNodeAccessibility: detail'],\n },\n ],\n})\nexport class NavSelectorLeafDetailComponent {\n detail = input.required<InternalNavSelectorLeafDetails>();\n\n embedded = input(false);\n\n constructor(public navSelectorLeafDetailPresenter: NavSelectorLeafDetailPresenter) {}\n\n onClick(event: Event) {\n if (!this.embedded()) {\n event.stopImmediatePropagation();\n this.navSelectorLeafDetailPresenter.onLeafDetailClicked(this.detail());\n }\n }\n}\n","<span class=\"caption\">{{ detail().alias }}</span>\n\n@if (detail().displayCounter) {\n <ap-counter\n color=\"orange\"\n size=\"normal\"\n [background]=\"false\">\n {{ detail().counter }}\n </ap-counter>\n}\n@if (detail().displayError) {\n <ap-symbol\n size=\"sm\"\n symbolId=\"error_fill\"\n apTooltipPosition=\"right\"\n [apTooltip]=\"detail().errorReason\" />\n}\n","import { computed, Injectable } from '@angular/core';\nimport { InternalNavSelectorLeaf } from '../nav-selector';\nimport { NavSelectorState } from '../nav-selector.state';\n\n@Injectable()\nexport class NavSelectorLeafDetailsPresenter {\n viewMoreText = computed(() => this.navSelectorState.texts().viewMore);\n viewLessText = computed(() => this.navSelectorState.texts().viewLess);\n\n constructor(private navSelectorState: NavSelectorState) {}\n\n toggleViewMore(leaf: InternalNavSelectorLeaf) {\n if (leaf.viewMoreDisplayed) {\n this.viewMore(leaf);\n } else {\n this.viewLess(leaf);\n }\n }\n\n viewMore(leaf: InternalNavSelectorLeaf) {\n this.navSelectorState.viewMore(leaf);\n }\n\n viewLess(leaf: InternalNavSelectorLeaf) {\n this.navSelectorState.viewLess(leaf);\n }\n}\n","import { animate, keyframes, state, style, transition, trigger } from '@angular/animations';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, computed, effect, ElementRef, input, signal, untracked } from '@angular/core';\nimport { InternalNavSelectorLeaf, InternalNavSelectorLeafDetails } from '../nav-selector';\nimport { NavSelectorLeafDetailComponent } from '../nav-selector-leaf-detail/nav-selector-leaf-detail.component';\nimport { NavSelectorLeafDetailsPresenter } from '../nav-selector-leaf-details/nav-selector-leaf-details.presenter';\n\n@Component({\n selector: 'ap-nav-selector-leaf-details',\n templateUrl: './nav-selector-leaf-details.component.html',\n styleUrls: ['./nav-selector-leaf-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NavSelectorLeafDetailComponent],\n providers: [NavSelectorLeafDetailsPresenter],\n host: {\n '[attr.aria-expanded]': '!leaf().viewMoreDisplayable || leaf().viewMoreDisplayed',\n },\n animations: [\n /**\n * Overflow hidden is put only during the animation and on the collapsed state because if it is put on the expanded state then children’s border will be cut (hover / focus)\n */\n trigger('accordion', [\n state(\n 'collapsed',\n style({\n maxHeight: '0',\n overflow: 'hidden',\n })\n ),\n state(\n 'expanded',\n style({\n maxHeight: 'initial',\n })\n ),\n transition('collapsed => expanded', [\n animate('250ms cubic-bezier(.4, 0, .3, 1)', style({ overflow: 'hidden', maxHeight: '{{maxHeight}}' })),\n ]),\n transition('expanded => collapsed', [\n animate(\n '250ms cubic-bezier(.4, 0, .3, 1)',\n keyframes([style({ overflow: 'hidden', maxHeight: '{{maxHeight}}' }), style({ maxHeight: 0 })])\n ),\n ]),\n ]),\n ],\n})\nexport class NavSelectorLeafDetailsComponent implements AfterViewInit {\n leaf = input.required<InternalNavSelectorLeaf>();\n details = input.required<InternalNavSelectorLeafDetails[]>();\n\n firstDetails = computed(() => this.details().slice(0, this.leaf().viewMoreDetailsDisplayedLimit));\n lastDetails = computed(() => this.details().slice(this.leaf().viewMoreDetailsDisplayedLimit));\n\n viewMoreDelay = signal(false);\n\n animationState = computed(() => (this.leaf().viewMoreDisplayable && this.leaf().viewMoreDisplayed ? 'collapsed' : 'expanded'));\n\n /**\n * The height when details are all displayed\n */\n maxHeight = signal('0px');\n\n constructor(\n private el: ElementRef,\n public navSelectorLeafDetailsPresenter: NavSelectorLeafDetailsPresenter\n ) {\n effect(() => {\n const viewMoreDisplayed = this.leaf().viewMoreDisplayed;\n untracked(() => {\n if (viewMoreDisplayed) {\n setTimeout(() => this.viewMoreDelay.set(false), 150);\n } else {\n this.viewMoreDelay.set(true);\n }\n });\n });\n }\n\n ngAfterViewInit(): void {\n // scrollHeight = leaf + first details displayed when there is a limit\n const height = this.el.nativeElement.scrollHeight;\n // cross multiplication to determine height of remaining details\n this.maxHeight.set(`${(height * this.lastDetails().length) / this.firstDetails().length}px`);\n }\n\n toggleViewMore() {\n this.navSelectorLeafDetailsPresenter.toggleViewMore(this.leaf());\n }\n\n onSpaceOrEnter(event: Event) {\n event.stopImmediatePropagation();\n this.toggleViewMore();\n }\n}\n","@for (detail of firstDetails(); track detail.uid) {\n <div class=\"detail\">\n <div class=\"separator\">\n <div class=\"rectangle\"></div>\n </div>\n <ap-nav-selector-leaf-detail [detail]=\"detail\" />\n </div>\n}\n\n@if (leaf().viewMoreDisplayable) {\n <div\n class=\"details-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight()\n }\n }\">\n @if (viewMoreDelay()) {\n @for (detail of lastDetails(); track detail.uid) {\n <div class=\"detail\">\n <div class=\"separator\">\n <div class=\"rectangle\"></div>\n </div>\n <ap-nav-selector-leaf-detail [detail]=\"detail\" />\n </div>\n }\n }\n </div>\n\n <div class=\"detail\">\n <div class=\"separator\">\n <div class=\"rectangle\"></div>\n </div>\n <a\n tabindex=\"0\"\n role=\"button\"\n class=\"standalone view-more\"\n (keydown.space)=\"onSpaceOrEnter($event)\"\n (keydown.enter)=\"onSpaceOrEnter($event)\"\n (click)=\"toggleViewMore()\">\n @if (leaf().viewMoreDisplayed) {\n {{ navSelectorLeafDetailsPresenter.viewMoreText() }}\n } @else {\n {{ navSelectorLeafDetailsPresenter.viewLessText() }}\n }\n </a>\n </div>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, contentChildren, ElementRef, input, signal, TemplateRef } from '@angular/core';\n\nexport const NavSelectorPopoverPlacement = {\n RIGHT: 'right',\n BOTTOM_START: 'bottom_start',\n} as const;\nexport type NavSelectorPopoverPlacement = (typeof NavSelectorPopoverPlacement)[keyof typeof NavSelectorPopoverPlacement];\n\n@Component({\n selector: 'ap-nav-selector-popover',\n templateUrl: './nav-selector-popover.component.html',\n styleUrls: ['./nav-selector-popover.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[style.top.px]': 'position().top',\n '[style.left.px]': 'position().left',\n '(click)': 'onClick($event)',\n '(window:wheel)': 'onAnyScroll()',\n '(window:focusin)': 'onFocusChanged($event)',\n '(window:click)': 'onAnyClick($event)',\n },\n imports: [NgTemplateOutlet],\n})\nexport class NavSelectorPopoverComponent {\n placement = input<NavSelectorPopoverPlacement>(NavSelectorPopoverPlacement.RIGHT);\n popoverTitle = input<string>();\n offset = input<Partial<{ mainAxis: number; crossAxis: number }>>({ mainAxis: 0, crossAxis: 0 });\n\n items = contentChildren<TemplateRef<unknown>>('item');\n\n displayed = signal(false);\n navSelectorPopoverDisplayed = this.displayed.asReadonly();\n\n position = signal({\n top: 0,\n left: 0,\n });\n parentEl = signal<ElementRef | null>(null);\n\n mainAxisOffset = computed(() => this.offset().mainAxis ?? 0);\n crossAxisOffset = computed(() => this.offset().crossAxis ?? 0);\n\n constructor(private elementRef: ElementRef) {}\n\n display(parentEl: ElementRef): void {\n this.parentEl.set(parentEl);\n this.displayed.set(true);\n this.computePosition(parentEl);\n }\n\n hide() {\n this.displayed.set(false);\n }\n\n toggle(parentEl: ElementRef): void {\n this.parentEl.set(parentEl);\n this.displayed.update(value => !value);\n if (this.displayed()) {\n this.computePosition(parentEl);\n }\n }\n\n onTitleCLicked(event: Event): void {\n // Click on title should not close the popover\n event.stopImmediatePropagation();\n }\n\n onClick(event: Event): void {\n // Prevent click to be caught from element behind the popover (real bug)\n event.stopImmediatePropagation();\n this.displayed.set(false);\n }\n\n private computePosition(parentEl: ElementRef): void {\n // Needed to wait first render and have the total height of the popover\n setTimeout(() => {\n const parentRect = parentEl.nativeElement.getBoundingClientRect();\n if (!parentRect.top && !parentRect.left) {\n this.displayed.set(false);\n } else if (this.placement().startsWith('right')) {\n this.computeRightPosition(parentEl);\n } else if (this.placement().startsWith('bottom')) {\n this.computeBottomPosition(parentEl);\n }\n });\n }\n\n private computeRightPosition(parentEl: ElementRef) {\n const nativeEl = parentEl.nativeElement;\n const rect = nativeEl.getBoundingClientRect();\n let top = rect.top + (rect.height - nativeEl.offsetHeight) / 2 + this.crossAxisOffset();\n const left = rect.left + rect.width + this.mainAxisOffset();\n\n const elementEl = this.elementRef.nativeElement;\n\n const popoverRect = elementEl.getBoundingClientRect();\n if (top + elementEl.clientHeight > window.innerHeight) {\n const popoverEl = document.querySelector('.nav-selector-popover') as Element;\n const paddingBottom = parseInt(getComputedStyle(popoverEl).paddingBottom);\n top = rect.top + rect.height - popoverRect.height + paddingBottom;\n }\n\n this.position.set({\n top: top,\n left: left,\n });\n }\n\n private computeBottomPosition(parentEl: ElementRef) {\n const nativeEl = parentEl.nativeElement;\n const rect = nativeEl.getBoundingClientRect();\n let top = rect.top + rect.height + this.mainAxisOffset();\n let left = rect.left + (rect.width - nativeEl.offsetWidth) / 2 + this.crossAxisOffset();\n\n if (this.placement() === NavSelectorPopoverPlacement.BOTTOM_START) {\n left = rect.left;\n }\n\n const elementEl = this.elementRef.nativeElement;\n\n const popoverRect = elementEl.getBoundingClientRect();\n if (top + elementEl.clientHeight > window.innerHeight) {\n top -= popoverRect.height + rect.height;\n }\n\n this.position.set({\n top: top,\n left: left,\n });\n }\n\n onAnyScroll() {\n const parent = this.parentEl();\n if (parent) {\n this.computePosition(parent);\n }\n }\n\n onFocusChanged(event: FocusEvent) {\n const focusedElementIsChildOfPopover = this.elementRef.nativeElement.contains(event.target as Element);\n const focusedElementIsParentOfPopover = (event.target as Element).contains(this.elementRef.nativeElement);\n if (!focusedElementIsChildOfPopover && !focusedElementIsParentOfPopover) {\n this.displayed.set(false);\n }\n }\n\n onAnyClick(event: Event) {\n if (!this.elementRef.nativeElement.contains(event.target as Element)) {\n this.displayed.set(false);\n }\n }\n}\n","@if (displayed()) {\n <div class=\"nav-selector-popover\">\n @if (popoverTitle()) {\n <div (click)=\"onTitleCLicked($event)\" class=\"nav-selector-popover__title\">{{ popoverTitle() }}</div>\n }\n\n @let itemsNotNull = items();\n\n @if (itemsNotNull?.length) {\n @for (item of itemsNotNull; track item) {\n <ng-container [ngTemplateOutlet]=\"item\"/>\n }\n } @else {\n <ng-content select=\"[item]\"/>\n }\n </div>\n}\n","import { computed, inject, Injectable } from '@angular/core';\nimport { InternalNavSelectorLeaf, InternalNavSelectorLeafDetails, NavSelectorStyle } from '../nav-selector';\nimport { NavSelectorState } from '../nav-selector.state';\n\n@Injectable()\nexport class NavSelectorLeafPresenter {\n private readonly navSelectorState = inject(NavSelectorState);\n\n styleMenu = computed(() => this.navSelectorState.style() === NavSelectorStyle.MENU);\n hideAvatar = this.styleMenu;\n\n expanded = computed(() => this.navSelectorState.expanded());\n texts = computed(() => this.navSelectorState.texts());\n isMultipleModeEnabled = computed(() => this.navSelectorState.isMultipleModeEnabled());\n\n selectLeaf(leaf: InternalNavSelectorLeaf) {\n this.navSelectorState.onLeafClicked(leaf);\n }\n\n onLeafToggleFolding(leaf: InternalNavSelectorLeaf) {\n this.navSelectorState.onLeafToggleFolding(leaf);\n }\n\n selectOnlyLeaf(leaf: InternalNavSelectorLeaf) {\n this.navSelectorState.selectOnlyLeaf(leaf);\n }\n\n fold(leaf: InternalNavSelectorLeaf) {\n this.navSelectorState.fold(leaf);\n }\n\n unfold(leaf: InternalNavSelectorLeaf) {\n this.navSelectorState.unfold(leaf);\n }\n\n onLeafDetailClicked(detail: InternalNavSelectorLeafDetails) {\n this.navSelectorState.onLeafDetailClicked(detail);\n }\n}\n","import { ActionDropdownComponent, ActionDropdownItem, ActionDropdownTriggerDirective } from '@agorapulse/ui-components/action-dropdown';\nimport { AvatarComponent } from '@agorapulse/ui-components/avatar';\nimport { CheckboxComponent } from '@agorapulse/ui-components/checkbox';\nimport { CounterComponent } from '@agorapulse/ui-components/counter';\nimport { UI_COMPONENTS_SYMBOLS } from '@agorapulse/ui-components/providers';\nimport { TooltipDirective } from '@agorapulse/ui-components/tooltip';\nimport {\n apChevronDown,\n apChevronUp,\n apErrorFill,\n apFeatureLock,\n SymbolComponent,\n SymbolRegistry,\n withSymbols,\n} from '@agorapulse/ui-symbol';\nimport { apMore } from '@agorapulse/ui-symbol/icons';\nimport { animate, keyframes, state, style, transition, trigger } from '@angular/animations';\nimport {\n afterEveryRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { NavSelectorPopoverTriggerDirective } from '../directives/nav-selector-popover-trigger.directive';\nimport { TreeNodeAccessibilityDirective } from '../directives/tree-node-accessibility.directive';\nimport { InternalNavSelectorLeaf, InternalNavSelectorLeafDetails, NavSelectorLeafActionClickedEvent } from '../nav-selector';\nimport { NavSelectorLeafDetailComponent } from '../nav-selector-leaf-detail/nav-selector-leaf-detail.component';\nimport { NavSelectorLeafDetailsComponent } from '../nav-selector-leaf-details/nav-selector-leaf-details.component';\nimport { NavSelectorPopoverItemComponent } from '../nav-selector-popover/nav-selector-popover-item.component';\nimport { NavSelectorPopoverComponent } from '../nav-selector-popover/nav-selector-popover.component';\nimport { NavSelectorLeafPresenter } from './nav-selector-leaf.presenter';\n\n@Component({\n selector: 'ap-nav-selector-leaf',\n templateUrl: './nav-selector-leaf.component.html',\n styleUrls: ['./nav-selector-leaf.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ActionDropdownComponent,\n ActionDropdownTriggerDirective,\n AvatarComponent,\n CounterComponent,\n SymbolComponent,\n NavSelectorLeafDetailsComponent,\n CheckboxComponent,\n TooltipDirective,\n NavSelectorLeafDetailComponent,\n NavSelectorLeafDetailComponent,\n TreeNodeAccessibilityDirective,\n NavSelectorPopoverComponent,\n NavSelectorPopoverTriggerDirective,\n NavSelectorPopoverItemComponent,\n ],\n providers: [withSymbols(apErrorFill, apFeatureLock, apChevronDown, apChevronUp, apMore), NavSelectorLeafPresenter],\n host: {\n '[class.minified]': '!navSelectorLeafPresenter.expanded()',\n role: 'treeitem',\n '(keydown.arrowLeft)': 'fold($event)',\n '(keydown.arrowRight)': 'unfold($event)',\n },\n animations: [\n /**\n * Overflow hidden is put only during the animation and on the collapsed state because if it is put on the expanded state then children’s border will be cut (hover / focus)\n */\n trigger('accordion', [\n state(\n 'collapsed',\n style({\n maxHeight: 0,\n overflow: 'hidden',\n })\n ),\n state(\n 'expanded',\n style({\n maxHeight: 'initial',\n })\n ),\n transition('collapsed => expanded', [\n animate('250ms cubic-bezier(.4, 0, .3, 1)', style({ overflow: 'hidden', maxHeight: '{{maxHeight}}' })),\n ]),\n transition('expanded => collapsed', [\n animate(\n '250ms cubic-bezier(.4, 0, .3, 1)',\n keyframes([style({ overflow: 'hidden', maxHeight: '{{maxHeight}}' }), style({ maxHeight: 0 })])\n ),\n ]),\n ]),\n ],\n})\nexport class NavSelectorLeafComponent {\n private readonly symbolRegistry = inject(SymbolRegistry);\n\n leaf = input.required<InternalNavSelectorLeaf>();\n\n actionClicked = output<NavSelectorLeafActionClickedEvent>();\n\n initial = computed(() => this.leaf().alias[0].toUpperCase());\n foldSymbol = computed(() => (this.leaf().folded ? 'chevron-down' : 'chevron-up'));\n\n focused = signal(false);\n\n aliasEl = viewChild<ElementRef>('alias');\n aliasBoundedClientRect = signal<{\n offsetWidth: number;\n offsetHeight: number;\n scrollWidth: number;\n scrollHeight: number;\n }>({\n offsetWidth: 0,\n offsetHeight: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n });\n\n tooltipContent = computed(() => {\n const content = [];\n\n const el = this.aliasBoundedClientRect();\n if (!this.navSelectorLeafPresenter.expanded() || el.offsetWidth < el.scrollWidth || el.offsetHeight < el.scrollHeight) {\n content.push(this.leaf().alias);\n }\n\n const disableReason = this.leaf().disableReason;\n if (disableReason) {\n content.push(disableReason);\n }\n\n if (this.leaf().displayFeatureLocked) {\n content.push(this.navSelectorLeafPresenter.texts().featureLocked);\n }\n\n if (this.leaf().displayTokenInvalid) {\n content.push(this.navSelectorLeafPresenter.texts().tokenInvalid);\n }\n\n return content.join('<br>');\n });\n tooltipDisabled = computed(() => !this.tooltipContent().length || this.leaf().detailsDisplayable);\n\n foldedWithDelay = signal(true);\n\n network = computed(() => (this.leaf().network ? this.leaf().network : undefined));\n\n leafActions = computed<ActionDropdownItem[]>(() => {\n return this.leaf().actions.map(action => ({\n id: action.id ?? undefined,\n name: action.name,\n label: action.label,\n startSymbolId: action.icon ?? undefined,\n disabled: action.status === 'disabled',\n featureLockEnabled: action.status === 'locked',\n dividerEnabled: action.dividerEnabled ?? false\n }));\n });\n\n constructor(\n private el: ElementRef,\n public navSelectorLeafPresenter: NavSelectorLeafPresenter\n ) {\n this.symbolRegistry.withSymbols(...(inject(UI_COMPONENTS_SYMBOLS, { optional: true })?.flat() ?? []));\n\n afterEveryRender(() =>\n untracked(() => {\n const newMaxHeight = this.computeMaxHeight();\n if (this.maxHeight() !== newMaxHeight) {\n this.maxHeight.set(newMaxHeight);\n }\n this.updateAliasBoundedClientRect();\n })\n );\n\n effect(() => {\n const folded = this.leaf().folded;\n untracked(() => {\n if (folded) {\n setTimeout(() => this.foldedWithDelay.set(true), 150);\n } else {\n this.foldedWithDelay.set(false);\n }\n });\n });\n }\n\n animationState = computed(() => (this.leaf().folded ? 'collapsed' : 'expanded'));\n\n maxHeight = signal('0px');\n\n onClick(event: Event) {\n event.stopImmediatePropagation();\n this.navSelectorLeafPresenter.selectLeaf(this.leaf());\n }\n\n toggleFolding(event: Event) {\n event.stopImmediatePropagation();\n this.navSelectorLeafPresenter.onLeafToggleFolding(this.leaf());\n }\n\n clickOnToggleFolding(event: Event) {\n event.stopImmediatePropagation();\n // Remove the focus from the toggle folding so we do not have the :focus-within style on the leaf\n if (event.currentTarget && 'blur' in event.currentTarget && typeof event.currentTarget.blur === 'function') {\n event.currentTarget.blur();\n }\n this.navSelectorLeafPresenter.onLeafToggleFolding(this.leaf());\n }\n\n selectOnly(event: Event) {\n event.stopImmediatePropagation();\n // (event.target as Element).blur();\n this.navSelectorLeafPresenter.selectOnlyLeaf(this.leaf());\n }\n\n clickOnSelectOnly(event: Event) {\n event.stopImmediatePropagation();\n // Remove the focus from the select only so we do not have the :focus-within style on the leaf\n if (event.currentTarget && 'blur' in event.currentTarget && typeof event.currentTarget.blur === 'function') {\n event.currentTarget.blur();\n }\n this.navSelectorLeafPresenter.selectOnlyLeaf(this.leaf());\n }\n\n /**\n * For checkboxes, as they do not stop event propagation, we need to stop it manually\n */\n eventStopper(event: Event) {\n event.stopImmediatePropagation();\n }\n\n onCheckboxToggle() {\n this.navSelectorLeafPresenter.selectLeaf(this.leaf());\n }\n\n onSpaceOrEnterPressed(event: Event) {\n event.stopImmediatePropagation();\n if (document.activeElement === this.el.nativeElement.querySelector('.nav-selector-leaf')) {\n if (this.leaf().foldable) {\n this.toggleFolding(event);\n } else {\n this.navSelectorLeafPresenter.selectLeaf(this.leaf());\n }\n }\n }\n\n fold(event: Event) {\n event.stopImmediatePropagation();\n this.navSelectorLeafPresenter.fold(this.leaf());\n }\n\n unfold(event: Event) {\n event.stopImmediatePropagation();\n this.navSelectorLeafPresenter.unfold(this.leaf());\n }\n\n onDetailClicked(event: Event, detail: InternalNavSelectorLeafDetails) {\n event.stopImmediatePropagation();\n this.navSelectorLeafPresenter.onLeafDetailClicked(detail);\n }\n\n onActionClicked(action: ActionDropdownItem) {\n this.actionClicked.emit({\n leafUid: this.leaf().uid,\n actionName: action.name ?? '',\n });\n }\n\n private computeMaxHeight() {\n let maxHeight = this.el.nativeElement.clientHeight;\n if (this.leaf().folded) {\n maxHeight = this.el.nativeElement.clientHeight * this.leaf().details.length;\n }\n return `${maxHeight}px`;\n }\n\n private updateAliasBoundedClientRect() {\n const el = this.aliasEl()?.nativeElement;\n if (el) {\n const boundedClientRect = {\n offsetWidth: el.offsetWidth,\n offsetHeight: el.offsetHeight,\n scrollWidth: el.scrollWidth,\n scrollHeight: el.scrollHeight,\n };\n if (JSON.stringify(this.aliasBoundedClientRect()) !== JSON.stringify(boundedClientRect)) {\n this.aliasBoundedClientRect.set(boundedClientRect);\n }\n }\n }\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n@if (navSelectorLeafPresenter.expanded()) {\n <div\n class=\"nav-selector-leaf\"\n apTooltipPosition=\"right\"\n [attr.aria-selected]=\"leaf().selected\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [class.multiple-mode]=\"navSelectorLeafPresenter.isMultipleModeEnabled()\"\n [class.feature-locked]=\"leaf().displayFeatureLocked\"\n [class.selected]=\"leaf().selected\"\n [class.token-error]=\"leaf().displayTokenInvalid\"\n [class.disabled]=\"leaf().disabled\"\n [class.detail-selected]=\"leaf().detailSelected\"\n [class.actions-displayable]=\"leaf().actionsDisplayable\"\n [class.details-displayable]=\"leaf().detailsDisplayable\"\n [class.style-menu]=\"navSelectorLeafPresenter.styleMenu()\"\n [apTreeNodeAccessibility]=\"leaf()\"\n (keydown.space)=\"onSpaceOrEnterPressed($event)\"\n (keydown.enter)=\"onSpaceOrEnterPressed($event)\"\n (focusin)=\"focused.set(true)\"\n (focusout)=\"focused.set(false)\"\n (click)=\"onClick($event)\">\n @if (navSelectorLeafPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"leaf().uid\"\n [checked]=\"leaf().selected\"\n [aria-label]=\"leaf().alias\"\n [disabled]=\"leaf().disabled || !leaf().selectable\"\n (click)=\"eventStopper($event)\"\n (change)=\"onCheckboxToggle()\" />\n }\n @if (!navSelectorLeafPresenter.hideAvatar()) {\n <ap-avatar\n size=\"24\"\n [profilePicture]=\"leaf().pictureUrl ?? undefined\"\n [network]=\"$any(leaf().network)\"\n [showInitials]=\"initial()\" />\n }\n\n @if (leaf().startSymbolId || leaf().startDotColor) {\n <div class=\"start-elements\">\n @if (leaf().startSymbolId) {\n <ap-symbol\n size=\"sm\"\n color=\"grey-blue\"\n [symbolId]=\"leaf().startSymbolId\" />\n }\n @if (leaf().startDotColor) {\n <div class=\"start-dot-wrapper\">\n <div\n class=\"start-dot\"\n [style.background-color]=\"leaf().startDotColor\"></div>\n </div>\n }\n </div>\n }\n\n <span\n #alias\n class=\"caption\">\n {{ leaf().alias }}\n </span>\n\n <a\n class=\"standalone only-button\"\n role=\"button\"\n [attr.aria-label]=\"'Select only ' + leaf().alias\"\n [attr.tabindex]=\"leaf().accessibility.tabIndex\"\n (keydown.space)=\"selectOnly($event)\"\n (keydown.enter)=\"selectOnly($event)\"\n (click)=\"clickOnSelectOnly($event)\">\n {{ navSelectorLeafPresenter.texts().only }}\n </a>\n\n <div class=\"end-actions\">\n @if (leaf().actionsDisplayable) {\n <ap-symbol\n class=\"actions-menu\"\n size=\"sm\"\n symbolId=\"more\"\n color=\"basic-grey\"\n [id]=\"leaf().uid + '_ActionMenuTrackingClick'\"\n [apActionDropdownTrigger]=\"actionDropdown\"\n [tabindex]=\"leaf().accessibility.tabIndex\"\n [attr.aria-label]=\"'Action menu ' + leaf().alias\" />\n <ap-action-dropdown\n #actionDropdown\n [items]=\"leafActions()\"\n (itemClick)=\"onActionClicked($event)\" />\n }\n\n @if (leaf().foldable) {\n <ap-symbol\n class=\"folding-button\"\n size=\"sm\"\n role=\"button\"\n [tabindex]=\"leaf().accessibility.tabIndex\"\n [attr.aria-label]=\"'Toggle ' + leaf().alias\"\n [symbolId]=\"foldSymbol()\"\n (click)=\"clickOnToggleFolding($event)\"\n (keydown.space)=\"toggleFolding($event)\"\n (keydown.enter)=\"toggleFolding($event)\" />\n }\n </div>\n\n @if (leaf().displayCounter) {\n <ap-counter\n color=\"orange\"\n size=\"normal\"\n [background]=\"false\">\n {{ leaf().counter }}\n </ap-counter>\n }\n @if (leaf().displayTokenInvalid) {\n <ap-symbol\n size=\"sm\"\n symbolId=\"error_fill\" />\n }\n @if (leaf().displayFeatureLocked) {\n <ap-symbol\n size=\"sm\"\n symbolId=\"feature-lock\" />\n }\n </div>\n\n <div\n class=\"details-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <ap-nav-selector-leaf-details\n [details]=\"leaf().details\"\n [leaf]=\"leaf()\" />\n }\n </div>\n} @else {\n <div\n #minified\n class=\"nav-selector-leaf\"\n apTooltipPosition=\"right\"\n [apNavSelectorPopoverTrigger]=\"minifiedPopover\"\n [apNavSelectorPopoverDisabled]=\"!leaf().detailsDisplayable\"\n [apNavSelectorPopoverTriggerMode]=\"{ click: false, hover: true }\"\n [class.feature-locked]=\"leaf().displayFeatureLocked\"\n [class.selected]=\"leaf().selected || leaf().detailSelected\"\n [class.token-error]=\"leaf().displayTokenInvalid\"\n [class.multiple-mode]=\"navSelectorLeafPresenter.isMultipleModeEnabled()\"\n [class.disabled]=\"leaf().disabled\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"leaf()\"\n (keydown.space)=\"onSpaceOrEnterPressed($event)\"\n (keydown.enter)=\"onSpaceOrEnterPressed($event)\"\n (click)=\"onClick($event)\">\n @if (navSelectorLeafPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"leaf().uid\"\n [checked]=\"leaf().selected\"\n [disabled]=\"leaf().disabled || !leaf().selectable\" />\n }\n\n <div class=\"avatar-container\">\n <ap-avatar\n size=\"24\"\n [profilePicture]=\"leaf().pictureUrl ?? undefined\"\n [network]=\"$any(leaf().network)\"\n [showInitials]=\"initial()\" />\n\n <div class=\"status\">\n @if (leaf().displayCounter) {\n <ap-counter\n class=\"counter-override\"\n color=\"orange\"\n size=\"normal\"\n [notif]=\"true\"\n [background]=\"true\">\n {{ leaf().counter }}\n </ap-counter>\n }\n @if (leaf().displayTokenInvalid) {\n <ap-symbol\n size=\"sm\"\n symbolId=\"error_fill\" />\n }\n @if (leaf().displayFeatureLocked) {\n <ap-symbol\n size=\"sm\"\n symbolId=\"feature-lock\" />\n }\n </div>\n </div>\n\n <ap-nav-selector-popover\n #minifiedPopover\n placement=\"right\"\n [popoverTitle]=\"leaf().alias\"\n [offset]=\"{ mainAxis: 0, crossAxis: -36.5 }\">\n @for (detail of leaf().details; track detail.uid) {\n <ap-nav-selector-popover-item\n item\n [selected]=\"detail.selected\"\n [disabled]=\"detail.displayError\"\n [name]=\"detail.alias\"\n (click)=\"onDetailClicked($event, detail)\">\n <ap-nav-selector-leaf-detail\n [embedded]=\"true\"\n [detail]=\"detail\" />\n </ap-nav-selector-popover-item>\n }\n </ap-nav-selector-popover>\n </div>\n}\n","import { computed, Injectable } from '@angular/core';\nimport { InternalNavSelectorGroup } from '../nav-selector';\nimport { NavSelectorState } from '../nav-selector.state';\n\n@Injectable()\nexport class NavSelectorGroupPresenter {\n expanded = computed(() => this.navSelectorState.expanded());\n texts = computed(() => this.navSelectorState.texts());\n isMultipleModeEnabled = computed(() => this.navSelectorState.isMultipleModeEnabled());\n\n constructor(private navSelectorState: NavSelectorState) {}\n\n onGroupSelected(group: InternalNavSelectorGroup) {\n this.navSelectorState.onNodeSelect(group);\n }\n\n onGroupToggleFolding(group: InternalNavSelectorGroup) {\n this.navSelectorState.onGroupToggleFolding(group);\n }\n\n fold(group: InternalNavSelectorGroup) {\n this.navSelectorState.fold(group);\n }\n\n unfold(group: InternalNavSelectorGroup) {\n this.navSelectorState.unfold(group);\n }\n}\n","import { AvatarComponent } from '@agorapulse/ui-components/avatar';\nimport { CheckboxComponent } from '@agorapulse/ui-components/checkbox';\nimport { CounterComponent } from '@agorapulse/ui-components/counter';\nimport { TooltipDirective } from '@agorapulse/ui-components/tooltip';\nimport { apChevronDown, apChevronUp, apErrorFill, apFolder, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport { animate, keyframes, state, style, transition, trigger } from '@angular/animations';\nimport {\n afterEveryRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { TreeNodeAccessibilityDirective } from '../directives/tree-node-accessibility.directive';\nimport { InternalNavSelectorGroup, NavSelectorLeafActionClickedEvent } from '../nav-selector';\nimport { NavSelectorLeafComponent } from '../nav-selector-leaf/nav-selector-leaf.component';\nimport { computeNumberOfDisplayableChildrenOnUnfold } from '../utils/leaf.utils';\nimport { NavSelectorGroupPresenter } from './nav-selector-group.presenter';\n\n@Component({\n selector: 'ap-nav-selector-group',\n templateUrl: './nav-selector-group.component.html',\n styleUrls: ['./nav-selector-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [withSymbols(apFolder, apErrorFill, apChevronDown, apChevronUp), NavSelectorGroupPresenter],\n imports: [\n SymbolComponent,\n CounterComponent,\n NavSelectorLeafComponent,\n CheckboxComponent,\n AvatarComponent,\n TooltipDirective,\n TreeNodeAccessibilityDirective,\n ],\n host: {\n '[class.minified]': '!navSelectorGroupPresenter.expanded()',\n '(keydown.arrowLeft)': 'fold($event)',\n '(keydown.arrowRight)': 'unfold($event)',\n },\n animations: [\n /**\n * Overflow hidden is put only during the animation and on the collapsed state because if it is put on the expanded state then children’s border will be cut (hover / focus)\n */\n trigger('accordion', [\n state(\n 'collapsed',\n style({\n maxHeight: 0,\n overflow: 'hidden',\n })\n ),\n state(\n 'expanded',\n style({\n maxHeight: 'initial',\n })\n ),\n transition('collapsed => expanded', [\n animate('250ms cubic-bezier(.4, 0, .3, 1)', style({ maxHeight: '{{maxHeight}}', overflow: 'hidden' })),\n ]),\n transition('expanded => collapsed', [\n animate(\n '250ms cubic-bezier(.4, 0, .3, 1)',\n keyframes([style({ maxHeight: '{{maxHeight}}', overflow: 'hidden' }), style({ maxHeight: 0, overflow: 'hidden' })])\n ),\n ]),\n ]),\n ],\n})\nexport class NavSelectorGroupComponent {\n group = input.required<InternalNavSelectorGroup>();\n actionClicked = output<NavSelectorLeafActionClickedEvent>();\n\n foldSymbol = computed(() => (this.group().folded ? 'chevron-down' : 'chevron-up'));\n\n aliasEl = viewChild<ElementRef>('alias');\n aliasBoundedClientRect = signal<{\n offsetWidth: number;\n offsetHeight: number;\n scrollWidth: number;\n scrollHeight: number;\n }>({\n offsetWidth: 0,\n offsetHeight: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n });\n\n tooltipContent = computed(() => {\n const content = [];\n\n const el = this.aliasBoundedClientRect();\n if (!this.navSelectorGroupPresenter.expanded() || el.offsetWidth < el.scrollWidth || el.offsetHeight < el.scrollHeight) {\n content.push(this.group().alias);\n }\n\n if (this.group().displayTokenInvalid) {\n content.push(this.navSelectorGroupPresenter.texts().groupTokenInvalid);\n }\n\n return content.join('<br>');\n });\n tooltipDisabled = computed(() => !this.tooltipContent().length);\n\n foldedWithDelay = signal(true);\n\n animationState = computed(() => (this.group().folded ? 'collapsed' : 'expanded'));\n\n constructor(\n private el: ElementRef,\n public navSelectorGroupPresenter: NavSelectorGroupPresenter\n ) {\n afterEveryRender(() =>\n untracked(() => {\n const maxHeight = this.computeMaxHeight();\n if (this.maxHeight() !== maxHeight) {\n this.maxHeight.set(maxHeight);\n }\n this.updateAliasBoundedClientRect();\n })\n );\n\n effect(() => {\n const folded = this.group().folded;\n untracked(() => {\n if (folded) {\n setTimeout(() => this.foldedWithDelay.set(true), 150);\n } else {\n this.foldedWithDelay.set(false);\n }\n });\n });\n }\n\n maxHeight = signal('0px');\n\n onKeydownSpaceOrEnter(event: Event) {\n event.stopImmediatePropagation();\n // Prevent to toggle folding when focus is on the checkbox\n if (document.activeElement === this.el.nativeElement.querySelector('.content')) {\n this.toggleFolding(event);\n } else {\n this.navSelectorGroupPresenter.onGroupSelected(this.group());\n }\n }\n\n onGroupSelected() {\n this.navSelectorGroupPresenter.onGroupSelected(this.group());\n }\n\n /**\n * For checkboxes, as they do not stop event propagation, we need to stop it manually\n */\n eventStopper(event: Event) {\n event.stopImmediatePropagation();\n }\n\n toggleFolding(event: Event) {\n event.stopImmediatePropagation();\n this.navSelectorGroupPresenter.onGroupToggleFolding(this.group());\n }\n\n fold(event: Event) {\n event.stopImmediatePropagation();\n this.navSelectorGroupPresenter.fold(this.group());\n }\n\n unfold(event: Event) {\n event.stopImmediatePropagation();\n this.navSelectorGroupPresenter.unfold(this.group());\n }\n\n private computeMaxHeight() {\n let maxHeight = this.el.nativeElement.clientHeight;\n if (this.group().folded) {\n const numberOfDisplayableChildren = computeNumberOfDisplayableChildrenOnUnfold(this.group());\n maxHeight = this.el.nativeElement.clientHeight * numberOfDisplayableChildren;\n }\n return `${maxHeight}px`;\n }\n\n private updateAliasBoundedClientRect() {\n const el = this.aliasEl()?.nativeElement;\n if (el) {\n const boundedClientRect = {\n offsetWidth: el.offsetWidth,\n offsetHeight: el.offsetHeight,\n scrollWidth: el.scrollWidth,\n scrollHeight: el.scrollHeight,\n };\n if (JSON.stringify(this.aliasBoundedClientRect()) !== JSON.stringify(boundedClientRect)) {\n this.aliasBoundedClientRect.set(boundedClientRect);\n }\n }\n }\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n@if (navSelectorGroupPresenter.expanded()) {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"group()\"\n (keydown.space)=\"onKeydownSpaceOrEnter($event)\"\n (keydown.enter)=\"onKeydownSpaceOrEnter($event)\"\n (click)=\"toggleFolding($event)\">\n @if (navSelectorGroupPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"group().uid\"\n [checked]=\"group().selected\"\n [disabled]=\"!group().selectable\"\n [indeterminate]=\"group().undeterminedSelection\"\n (click)=\"eventStopper($event)\"\n (change)=\"onGroupSelected()\" />\n }\n\n <ap-symbol\n symbolId=\"folder\"\n size=\"sm\" />\n\n <span\n #alias\n class=\"caption\"\n [title]=\"group().alias\">\n {{ group().alias }}\n </span>\n\n @if (group().displayTokenInvalid) {\n <ap-symbol\n symbolId=\"error_fill\"\n size=\"sm\" />\n }\n\n @if (group().displayCounter) {\n <ap-counter\n color=\"orange\"\n size=\"normal\"\n [background]=\"false\">\n {{ group().counter }}\n </ap-counter>\n }\n\n <ap-symbol\n size=\"sm\"\n class=\"folding-button\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @for (child of group().children; track child.uid) {\n @if (!child.hidden) {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n }\n </div>\n }\n </div>\n} @else {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [class.token-invalid]=\"group().displayTokenInvalid\"\n [class.multiple-mode]=\"navSelectorGroupPresenter.isMultipleModeEnabled()\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"group()\"\n (click)=\"toggleFolding($event)\"\n (keydown.space)=\"onKeydownSpaceOrEnter($event)\"\n (keydown.enter)=\"onKeydownSpaceOrEnter($event)\">\n @if (navSelectorGroupPresenter.isMultipleModeEnabled()) {\n <ap-checkbox\n [name]=\"group().uid\"\n [checked]=\"group().selected\"\n [disabled]=\"!group().selectable\"\n [indeterminate]=\"group().undeterminedSelection\"\n (click)=\"eventStopper($event)\"\n (change)=\"onGroupSelected()\" />\n }\n\n <div class=\"picture-url-sample-container\">\n <div class=\"picture-url-sample\">\n <div class=\"avatars\">\n @for (pictureUrlSample of group().childrenPictureUrlSample; track pictureUrlSample) {\n <ap-avatar\n class=\"avatar-sample\"\n [size]=\"24\"\n [profilePicture]=\"pictureUrlSample.url ?? undefined\"\n [showInitials]=\"pictureUrlSample.initial\" />\n }\n </div>\n\n <div class=\"status\">\n @if (group().displayCounter) {\n <ap-counter\n class=\"counter-override\"\n color=\"orange\"\n size=\"normal\"\n [notif]=\"true\"\n [background]=\"true\">\n {{ group().counter }}\n </ap-counter>\n }\n </div>\n </div>\n\n <div class=\"toggle\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n </div>\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @for (child of group().children; track child.uid) {\n @if (!child.hidden) {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n }\n </div>\n }\n </div>\n}\n","import { computed, Injectable } from '@angular/core';\nimport { InternalNavSelectorCategory } from '../nav-selector';\nimport { NavSelectorState } from '../nav-selector.state';\n\n@Injectable()\nexport class NavSelectorCategoryPresenter {\n expanded = computed(() => this.navSelectorState.expanded());\n\n constructor(private navSelectorState: NavSelectorState) {}\n\n toggleFolding(event: Event, category: InternalNavSelectorCategory) {\n event.stopImmediatePropagation();\n this.navSelectorState.onGroupToggleFolding(category);\n }\n\n fold(event: Event, category: InternalNavSelectorCategory) {\n event.stopImmediatePropagation();\n this.navSelectorState.fold(category);\n }\n\n unfold(event: Event, category: InternalNavSelectorCategory) {\n event.stopImmediatePropagation();\n this.navSelectorState.unfold(category);\n }\n}\n","import { AvatarComponent } from '@agorapulse/ui-components/avatar';\nimport { TooltipDirective } from '@agorapulse/ui-components/tooltip';\nimport { apChevronDown, apChevronUp, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport { apFeatureLock, apPlus } from '@agorapulse/ui-symbol/icons';\nimport { animate, keyframes, state, style, transition, trigger } from '@angular/animations';\nimport {\n afterEveryRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { TreeNodeAccessibilityDirective } from '../directives/tree-node-accessibility.directive';\nimport { InternalNavSelectorCategory, NavSelectorCategoryEmptyStateActionEvent, NavSelectorLeafActionClickedEvent } from '../nav-selector';\nimport { NavSelectorGroupComponent } from '../nav-selector-group/nav-selector-group.component';\nimport { NavSelectorLeafComponent } from '../nav-selector-leaf/nav-selector-leaf.component';\nimport { computeNumberOfDisplayableChildrenOnUnfold } from '../utils/leaf.utils';\nimport { NavSelectorCategoryPresenter } from './nav-selector-category.presenter';\n\n@Component({\n selector: 'ap-nav-selector-category',\n templateUrl: './nav-selector-category.component.html',\n styleUrls: ['./nav-selector-category.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NavSelectorLeafComponent,\n SymbolComponent,\n NavSelectorGroupComponent,\n TreeNodeAccessibilityDirective,\n TooltipDirective,\n AvatarComponent,\n ],\n providers: [withSymbols(apChevronDown, apChevronUp, apFeatureLock, apPlus), NavSelectorCategoryPresenter],\n host: {\n '[class.minified]': '!navSelectorCategoryPresenter.expanded()',\n '(keydown.arrowLeft)': 'navSelectorCategoryPresenter.fold($event, this.category())',\n '(keydown.arrowRight)': 'navSelectorCategoryPresenter.unfold($event, this.category())',\n },\n animations: [\n /**\n * Overflow hidden is put only during the animation and on the collapsed state because if it is put on the expanded state then children’s border will be cut (hover / focus)\n */\n trigger('accordion', [\n state(\n 'collapsed',\n style({\n maxHeight: 0,\n overflow: 'hidden',\n })\n ),\n state(\n 'expanded',\n style({\n maxHeight: 'initial',\n })\n ),\n transition('collapsed => expanded', [\n animate('250ms cubic-bezier(.4, 0, .3, 1)', style({ overflow: 'hidden', maxHeight: '{{maxHeight}}' })),\n ]),\n transition('expanded => collapsed', [\n animate(\n '250ms cubic-bezier(.4, 0, .3, 1)',\n keyframes([style({ maxHeight: '{{maxHeight}}' }), style({ overflow: 'hidden', maxHeight: 0 })])\n ),\n ]),\n ]),\n ],\n})\nexport class NavSelectorCategoryComponent {\n category = input.required<InternalNavSelectorCategory>();\n emptyStateActionClicked = output<NavSelectorCategoryEmptyStateActionEvent>();\n actionClicked = output<NavSelectorLeafActionClickedEvent>();\n\n foldSymbol = computed(() => (this.category().folded ? 'chevron-down' : 'chevron-up'));\n\n foldedWithDelay = signal(true);\n\n animationState = computed(() => (this.category().folded ? 'collapsed' : 'expanded'));\n\n aliasEl = viewChild<ElementRef>('alias');\n aliasBoundedClientRect = signal<{\n offsetWidth: number;\n offsetHeight: number;\n scrollWidth: number;\n scrollHeight: number;\n }>({\n offsetWidth: 0,\n offsetHeight: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n });\n\n tooltipContent = computed(() => {\n const el = this.aliasBoundedClientRect();\n if (!this.navSelectorCategoryPresenter.expanded() || el.offsetWidth < el.scrollWidth || el.offsetHeight < el.scrollHeight) {\n return this.category().alias;\n }\n\n return '';\n });\n tooltipDisabled = computed(() => !this.tooltipContent().length);\n\n constructor(\n private el: ElementRef,\n public navSelectorCategoryPresenter: NavSelectorCategoryPresenter\n ) {\n afterEveryRender(() =>\n untracked(() => {\n const maxHeight = this.computeMaxHeight();\n if (this.maxHeight() !== maxHeight) {\n this.maxHeight.set(maxHeight);\n }\n this.updateAliasBoundedClientRect();\n })\n );\n\n effect(() => {\n const folded = this.category().folded;\n untracked(() => {\n if (folded) {\n setTimeout(() => this.foldedWithDelay.set(true), 150);\n } else {\n this.foldedWithDelay.set(false);\n }\n });\n });\n }\n\n maxHeight = signal('0px');\n\n protected onEmptyStateActionClick(name: string) {\n this.emptyStateActionClicked.emit({ actionName: name });\n }\n\n private computeMaxHeight() {\n let maxHeight = this.el.nativeElement.clientHeight;\n if (this.category().folded) {\n const numberOfDisplayableChildren = computeNumberOfDisplayableChildrenOnUnfold(this.category());\n maxHeight = this.el.nativeElement.clientHeight * numberOfDisplayableChildren;\n }\n return `${maxHeight}px`;\n }\n\n private updateAliasBoundedClientRect() {\n const el = this.aliasEl()?.nativeElement;\n if (el) {\n const boundedClientRect = {\n offsetWidth: el.offsetWidth,\n offsetHeight: el.offsetHeight,\n scrollWidth: el.scrollWidth,\n scrollHeight: el.scrollHeight,\n };\n if (JSON.stringify(this.aliasBoundedClientRect()) !== JSON.stringify(boundedClientRect)) {\n this.aliasBoundedClientRect.set(boundedClientRect);\n }\n }\n }\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n@if (navSelectorCategoryPresenter.expanded()) {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n [apTreeNodeAccessibility]=\"category()\"\n (keydown.space)=\"navSelectorCategoryPresenter.toggleFolding($event, category())\"\n (keydown.enter)=\"navSelectorCategoryPresenter.toggleFolding($event, category())\"\n (click)=\"navSelectorCategoryPresenter.toggleFolding($event, category())\">\n @if (category().avatarDisplayed) {\n @if (category().avatarPictureUrlDisplayed) {\n <ap-avatar\n size=\"16\"\n [showInitials]=\"true\"\n [username]=\"category().alias\"\n [profilePicture]=\"category().avatarPictureUrl\"\n [rounded]=\"category().avatarRounded\" />\n } @else {\n <ap-symbol\n size=\"sm\"\n color=\"grey-blue\"\n [symbolId]=\"category().avatarSymbolId\" />\n }\n }\n\n <span\n #alias\n class=\"caption\">\n {{ category().alias }}\n </span>\n\n <ap-symbol\n class=\"folding-button\"\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @if (category().children.length === 0) {\n <div class=\"empty-state\">\n @if (category().emptyStateTitle) {\n <div class=\"empty-state__title\">\n {{ category().emptyStateTitle }}\n </div>\n }\n @if (category().emptyStateAction; as emptyStateAction) {\n <a\n class=\"standalone\"\n [attr.id]=\"emptyStateAction?.id\"\n (click)=\"onEmptyStateActionClick(emptyStateAction.name)\">\n @if (emptyStateAction?.symbolId; as symbolId) {\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"symbolId\" />\n }\n {{ emptyStateAction.title }}\n @if (emptyStateAction?.featureLocked) {\n <ap-symbol\n size=\"sm\"\n color=\"purple\"\n symbolId=\"feature-lock\" />\n }\n </a>\n }\n </div>\n } @else {\n @for (child of category().children; track child.uid) {\n @if (!child.hidden) {\n <div\n class=\"entry\"\n [class.folder]=\"child.type === 'GROUP'\">\n @if (child.type === 'LEAF') {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (child.type === 'GROUP') {\n <ap-nav-selector-group\n [group]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n </div>\n }\n }\n }\n </div>\n }\n </div>\n} @else {\n <div\n class=\"content\"\n apTooltipPosition=\"right\"\n [apTreeNodeAccessibility]=\"category()\"\n [apTooltip]=\"tooltipContent()\"\n [apTooltipDisabled]=\"tooltipDisabled()\"\n (click)=\"navSelectorCategoryPresenter.toggleFolding($event, category())\"\n (keydown.space)=\"navSelectorCategoryPresenter.toggleFolding($event, category())\"\n (keydown.enter)=\"navSelectorCategoryPresenter.toggleFolding($event, category())\">\n <div class=\"name-container\">\n <span class=\"caption\">{{ category().alias }}</span>\n </div>\n\n <div class=\"toggle\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"foldSymbol()\" />\n </div>\n </div>\n\n <div\n class=\"children-container\"\n [@accordion]=\"{\n value: animationState(),\n params: {\n maxHeight: maxHeight(),\n },\n }\">\n @if (!foldedWithDelay()) {\n <div class=\"children\">\n @for (child of category().children; track child.uid) {\n @if (!child.hidden) {\n <div\n class=\"entry\"\n [class.folder]=\"child.type === 'GROUP'\">\n @if (child.type === 'LEAF') {\n <ap-nav-selector-leaf\n [leaf]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (child.type === 'GROUP') {\n <ap-nav-selector-group\n [group]=\"child\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n </div>\n }\n }\n </div>\n }\n </div>\n}\n","import { IconButtonComponent } from '@agorapulse/ui-components/icon-button';\nimport { InputSearchComponent } from '@agorapulse/ui-components/input-search';\nimport { apArrowExpand, apArrowReduce, apSearch, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport { animate, keyframes, style, transition, trigger } from '@angular/animations';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n effect,\n ElementRef,\n inject,\n input,\n model,\n OnInit,\n output,\n signal,\n TemplateRef,\n untracked,\n} from '@angular/core';\nimport { outputFromObservable, toObservable } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { isEqual } from 'es-toolkit';\nimport { map } from 'rxjs';\nimport {\n NavSelectorCategoryEmptyStateActionEvent,\n NavSelectorEntry,\n NavSelectorLeafActionClickedEvent,\n NavSelectorStyle,\n NavSelectorTranslatedTexts,\n} from './nav-selector';\nimport { NavSelectorCategoryComponent } from './nav-selector-category/nav-selector-category.component';\nimport { NavSelectorGroupComponent } from './nav-selector-group/nav-selector-group.component';\nimport { NavSelectorLeafComponent } from './nav-selector-leaf/nav-selector-leaf.component';\nimport { NavSelectorState } from './nav-selector.state';\nimport { computeSelectableUids, computeVisibleUids } from './utils/leaf.utils';\n\nconst AUTO_MINIFIED_STATE_WIDTH_BREAKPOINT = 1280;\nconst EXPAND_ANIMATION_TIMINGS = '250ms cubic-bezier(.4, 0, .3, 1)';\nconst EXPANDED_STATE_WIDTH = '224px';\nconst MINIFIED_STATE_WIDTH = '64px';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'ap-nav-selector',\n templateUrl: './nav-selector.component.html',\n styleUrls: ['./nav-selector.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NavSelectorLeafComponent,\n NavSelectorGroupComponent,\n NavSelectorCategoryComponent,\n InputSearchComponent,\n FormsModule,\n SymbolComponent,\n IconButtonComponent,\n NgTemplateOutlet,\n ],\n providers: [NavSelectorState, withSymbols(apArrowExpand, apArrowReduce, apSearch)],\n host: {\n '[class.minified]': '!navSelectorState.expanded()',\n '[class.embedded]': 'embedded()',\n '[@expand]': 'expansionState()',\n role: 'tree',\n '(keydown.arrowDown)': 'onArrowDown($event)',\n '(keydown.arrowUp)': 'onArrowUp($event)',\n '(window:resize)': 'onWindowResize()',\n },\n animations: [\n trigger('expand', [\n transition(\n 'expanded => minified',\n animate(\n EXPAND_ANIMATION_TIMINGS,\n keyframes([style({ width: EXPANDED_STATE_WIDTH }), style({ width: '100px' }), style({ width: MINIFIED_STATE_WIDTH })])\n )\n ),\n transition(\n 'minified => expanded',\n animate(\n EXPAND_ANIMATION_TIMINGS,\n keyframes([style({ width: MINIFIED_STATE_WIDTH }), style({ width: '50%' }), style({ width: '100%' })])\n )\n ),\n ]),\n ],\n})\nexport class NavSelectorComponent implements OnInit {\n navSelectorEntries = input.required<NavSelectorEntry[]>();\n translatedTexts = input.required<NavSelectorTranslatedTexts>();\n multipleModeEnabled = input<boolean>(false);\n\n style = input<NavSelectorStyle>(NavSelectorStyle.DEFAULT);\n\n detailsDisplayedLimit = input<number>(Number.MAX_SAFE_INTEGER);\n embedded = input<boolean>(false);\n\n /**\n * If true, the nav selector will be expanded by default. Even if the width of the screen is smaller than 1280px.\n */\n forceExpanded = input<boolean>(false);\n expandedStateLocalStorageKey = input<string>();\n\n selectedEntryUids = model.required<string[]>();\n\n actionClicked = output<NavSelectorLeafActionClickedEvent>();\n emptyStateActionClicked = output<NavSelectorCategoryEmptyStateActionEvent>();\n\n headerProjection = contentChild<TemplateRef<unknown>>('header');\n contentHeaderProjection = contentChild<TemplateRef<unknown>>('contentHeader');\n footerProjection = contentChild<TemplateRef<unknown>>('footer');\n\n displayFooter = computed(() => this.footerProjection() !== undefined);\n\n expansionState = computed(() => (this.expanded() ? 'expanded' : 'minified'));\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onExpansionStateChange = output<{ expanded: boolean }>();\n\n public navSelectorState = inject(NavSelectorState);\n private el = inject(ElementRef);\n\n componentUid = `nav-selector-${nextUniqueId++}`;\n\n ready = signal(false);\n\n private stableNavSelectorEntries = computed(() => this.navSelectorEntries(), { equal: isEqual });\n private expanded = this.navSelectorState.expanded.asReadonly();\n private entries = computed(() => this.navSelectorState.entries(), { equal: isEqual });\n private selectableEntryUids = computed(() => computeSelectableUids(this.entries()), { equal: isEqual });\n private visibleEntryUids = computed(() => computeVisibleUids(this.entries()), { equal: isEqual });\n\n visibleAccountsChange = outputFromObservable(\n toObservable(this.visibleEntryUids).pipe(map(visibleAccountUids => ({ visibleAccountUids })))\n );\n\n constructor() {\n this.navSelectorState.style = this.style;\n\n this.navSelectorState.registerOnSelectedUidsChange(selectedUids => {\n const isInit = !!this.entries().length;\n if (isInit) {\n this.selectedEntryUids.update(state => {\n if (isEqual(state, selectedUids)) {\n return state;\n }\n return selectedUids;\n });\n }\n });\n\n afterNextRender(() => {\n this.ready.set(true);\n });\n\n effect(() => {\n const expanded = this.expanded();\n untracked(() => this.onExpansionStateChange.emit({ expanded }));\n });\n\n // When inputs change, rebuild entries with current selected uids\n effect(() => {\n const multipleModeEnabled = this.multipleModeEnabled();\n const newEntries = this.stableNavSelectorEntries();\n const selectedUids = this.selectedEntryUids();\n\n untracked(() => {\n this.navSelectorState.updateMultiModeEnabled(multipleModeEnabled);\n const limit = this.detailsDisplayedLimit();\n\n if (!this.entries().length) {\n this.navSelectorState.initEntries(newEntries, selectedUids, limit);\n } else {\n // Save scroll position before updating\n const scrollContainer = this.el.nativeElement.querySelector('.nav-selector__content');\n const scrollTop = scrollContainer?.scrollTop ?? 0;\n\n this.navSelectorState.updateEntries(newEntries, selectedUids, limit);\n\n // Restore scroll position after Angular updates the DOM\n setTimeout(() => {\n if (scrollContainer) {\n scrollContainer.scrollTop = scrollTop;\n }\n });\n }\n });\n });\n\n effect(() => {\n const detailsDisplayedLimit = this.detailsDisplayedLimit();\n untracked(() => this.navSelectorState.updateDetailsDisplayedLimit(detailsDisplayedLimit));\n });\n\n // Note: No longer need of a separate effect for selectedEntryUids changes\n // The effect above (line 166) now watches selectedEntryUids and calls updateEntries\n // which properly handles disabled items through the builder\n\n effect(() => {\n const translatedTexts = this.translatedTexts();\n untracked(() => this.navSelectorState.updateTexts(translatedTexts));\n });\n }\n\n ngOnInit() {\n this.initializeExpandedState();\n }\n\n onMinifiedSearchClicked() {\n this.navSelectorState.toggleExpanded();\n setTimeout(() => this.el.nativeElement.querySelector('input').focus());\n }\n\n onArrowDown(event: Event) {\n if (this.el.nativeElement.querySelector('.nav-selector__content').contains(document.activeElement)) {\n event.stopImmediatePropagation();\n this.navSelectorState.onArrowDown();\n setTimeout(() => {\n try {\n this.el.nativeElement.querySelector('[role=\"treeitem\"][tabindex=\"0\"]').focus();\n } catch (e) {\n // If the focus fails it mean we do not have an entry with tabindex 0, so we will not be able to focus any entry anymore.\n // Force reset in this case by rebuilding the entries and resetting the focus.\n console.error('[Nav selector] Failed to focus the next entry, resetting...', e);\n this.navSelectorState.updateEntries(this.navSelectorEntries(), this.selectedEntryUids(), this.detailsDisplayedLimit());\n this.navSelectorState.resetFocus();\n }\n });\n }\n }\n\n onArrowUp(event: Event) {\n if (this.el.nativeElement.querySelector('.nav-selector__content').contains(document.activeElement)) {\n event.stopImmediatePropagation();\n this.navSelectorState.onArrowUp();\n setTimeout(() => {\n try {\n this.el.nativeElement.querySelector('[role=\"treeitem\"][tabindex=\"0\"]').focus();\n } catch (e) {\n // If the focus fails it mean we do not have an entry with tabindex 0, so we will not be able to focus any entry anymore.\n // Force reset in this case by rebuilding the entries and resetting the focus.\n console.error('[Nav selector] Failed to focus the previous entry, resetting...', e);\n this.navSelectorState.updateEntries(this.navSelectorEntries(), this.selectedEntryUids(), this.detailsDisplayedLimit());\n this.navSelectorState.resetFocus();\n }\n });\n }\n }\n\n onWindowResize() {\n if (!this.embedded() && !this.forceExpanded()) {\n if (this.expanded() && window.innerWidth < AUTO_MINIFIED_STATE_WIDTH_BREAKPOINT) {\n this.navSelectorState.forceMinify();\n } else if (!this.expanded() && window.innerWidth >= AUTO_MINIFIED_STATE_WIDTH_BREAKPOINT) {\n const expandedStateLocalStorageKey = this.expandedStateLocalStorageKey();\n if (!expandedStateLocalStorageKey || !localStorage.getItem(expandedStateLocalStorageKey)) {\n this.navSelectorState.forceExpand();\n }\n }\n }\n }\n\n private initializeExpandedState() {\n if (!this.embedded() && !this.forceExpanded()) {\n // If the expanded state is stored in local storage, we need to initialize the expanded state accordingly\n const expandedStateLocalStorageKey = this.expandedStateLocalStorageKey();\n if (expandedStateLocalStorageKey && localStorage.getItem(expandedStateLocalStorageKey)) {\n if (localStorage.getItem(expandedStateLocalStorageKey) === 'true') {\n this.navSelectorState.forceExpand();\n } else {\n this.navSelectorState.forceMinify();\n }\n } else {\n this.onWindowResize();\n }\n }\n }\n\n clickExpandButton() {\n this.navSelectorState.toggleExpanded();\n const expandedStateLocalStorageKey = this.expandedStateLocalStorageKey();\n if (expandedStateLocalStorageKey) {\n localStorage.setItem(expandedStateLocalStorageKey, this.expanded().toString());\n }\n }\n}\n","<nav [class.embedded]=\"embedded()\">\n @let headerProjectionNotNull = headerProjection();\n @let contentHeaderProjectionNotNull = contentHeaderProjection();\n @let footerProjectionNotNull = footerProjection();\n\n <div class=\"nav-selector__header\">\n @if (!embedded()) {\n @if (navSelectorState.expanded()) {\n <span class=\"h3\">{{ translatedTexts().title }}</span>\n }\n\n <button\n type=\"button\"\n class=\"expand-button\"\n [class.expanded]=\"navSelectorState.expanded()\"\n (click)=\"clickExpandButton()\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"navSelectorState.expanded() ? 'arrow-reduce' : 'arrow-expand'\" />\n </button>\n }\n\n @if (headerProjectionNotNull) {\n <ng-container\n [ngTemplateOutlet]=\"headerProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n }\n\n @if (navSelectorState.expanded()) {\n <ap-input-search\n [id]=\"componentUid + '_search'\"\n [placeholder]=\"translatedTexts().searchPlaceholder\"\n [ngModel]=\"navSelectorState.search()\"\n (ngModelChange)=\"navSelectorState.search.set($event ?? '')\" />\n } @else {\n <ap-icon-button\n type=\"stroked\"\n role=\"search\"\n (onClick)=\"onMinifiedSearchClicked()\">\n <ap-symbol symbolId=\"search\" />\n </ap-icon-button>\n }\n\n @if (contentHeaderProjectionNotNull) {\n <ng-container\n [ngTemplateOutlet]=\"contentHeaderProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n }\n </div>\n\n <div\n class=\"nav-selector__content\"\n role=\"tree\"\n [attr.aria-multiselectable]=\"navSelectorState.isMultipleModeEnabled()\">\n @for (entry of navSelectorState.entries(); track entry.uid) {\n @if (!entry.hidden) {\n <div\n class=\"entry\"\n [class.folder]=\"entry.type === 'GROUP' || entry.type === 'CATEGORY'\">\n @if (entry.type === 'LEAF') {\n <ap-nav-selector-leaf\n [leaf]=\"entry\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (entry.type === 'GROUP') {\n <ap-nav-selector-group\n [group]=\"entry\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (entry.type === 'CATEGORY') {\n <ap-nav-selector-category\n [category]=\"$any(entry)\"\n (actionClicked)=\"actionClicked.emit($event)\"\n (emptyStateActionClicked)=\"emptyStateActionClicked.emit($event)\"/>\n }\n </div>\n }\n }\n @if (navSelectorState.expanded() && navSelectorState.noResults()) {\n <div class=\"no-result\">{{ translatedTexts().noResults }}</div>\n }\n </div>\n\n @if (displayFooter() && footerProjectionNotNull) {\n <div class=\"nav-selector__footer\">\n <ng-container\n [ngTemplateOutlet]=\"footerProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n </div>\n }\n</nav>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.NavSelectorState","i1.NavSelectorLeafDetailPresenter","i2.TreeNodeAccessibilityDirective","i1.NavSelectorLeafDetailsPresenter","i1.NavSelectorLeafPresenter","i1.NavSelectorGroupPresenter","i1.NavSelectorCategoryPresenter","apFeatureLock","i1"],"mappings":"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"}