@acorex/components 20.3.24 → 20.3.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-components-kanban.mjs +9 -7
- package/fesm2022/acorex-components-kanban.mjs.map +1 -1
- package/fesm2022/acorex-components-popover.mjs +21 -16
- package/fesm2022/acorex-components-popover.mjs.map +1 -1
- package/kanban/index.d.ts +2 -1
- package/package.json +11 -11
- package/popover/index.d.ts +1 -3
|
@@ -258,6 +258,7 @@ class AXKanbanComponent extends NXComponent {
|
|
|
258
258
|
* @returns Promise<boolean> - true if the drop should proceed, false if it should be canceled
|
|
259
259
|
*/
|
|
260
260
|
async emitBeforeDropEvent(item, previousStatusKey, currentStatusKey, previousIndex, currentIndex, nativeEvent) {
|
|
261
|
+
const pendingPromises = [];
|
|
261
262
|
const beforeDropEvent = {
|
|
262
263
|
sender: this,
|
|
263
264
|
nativeEvent,
|
|
@@ -267,17 +268,18 @@ class AXKanbanComponent extends NXComponent {
|
|
|
267
268
|
previousIndex,
|
|
268
269
|
currentIndex,
|
|
269
270
|
canceled: false,
|
|
271
|
+
wait: (promise) => {
|
|
272
|
+
pendingPromises.push(promise);
|
|
273
|
+
},
|
|
270
274
|
};
|
|
271
275
|
// Emit the event - handlers can call event.wait() to register async operations
|
|
272
276
|
this.onBeforeDrop.emit(beforeDropEvent);
|
|
273
|
-
|
|
274
|
-
if (
|
|
275
|
-
|
|
277
|
+
// Wait for all registered async operations to complete
|
|
278
|
+
if (pendingPromises.length > 0) {
|
|
279
|
+
await Promise.all(pendingPromises);
|
|
276
280
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
}
|
|
280
|
-
return !isCanceled;
|
|
281
|
+
// After all async operations complete, check if the drop was canceled
|
|
282
|
+
return !beforeDropEvent.canceled;
|
|
281
283
|
}
|
|
282
284
|
getItemsById(key) {
|
|
283
285
|
return this.items().filter((e) => e.statusKey === key);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-components-kanban.mjs","sources":["../tmp-esm2022/kanban/lib/kanban.component.js","../tmp-esm2022/kanban/acorex-components-kanban.js"],"sourcesContent":["import { NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropListDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent, AXDecoratorHeadingComponent, AXDecoratorIconComponent, } from '@acorex/components/decorators';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, input, output, ViewEncapsulation } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXKanbanComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.statuses = input([], ...(ngDevMode ? [{ debugName: \"statuses\" }] : []));\n this.itemTemplate = input(...(ngDevMode ? [undefined, { debugName: \"itemTemplate\" }] : []));\n this.dataSource = input(...(ngDevMode ? [undefined, { debugName: \"dataSource\" }] : []));\n this.keyField = input('id', ...(ngDevMode ? [{ debugName: \"keyField\" }] : []));\n this.indexField = input('index', ...(ngDevMode ? [{ debugName: \"indexField\" }] : []));\n this.titleField = input('title', ...(ngDevMode ? [{ debugName: \"titleField\" }] : []));\n this.cssClassField = input('cssClass', ...(ngDevMode ? [{ debugName: \"cssClassField\" }] : []));\n this.priorityField = input('priority', ...(ngDevMode ? [{ debugName: \"priorityField\" }] : []));\n this.statusKeyField = input('statusKey', ...(ngDevMode ? [{ debugName: \"statusKeyField\" }] : []));\n this.descriptionField = input('description', ...(ngDevMode ? [{ debugName: \"descriptionField\" }] : []));\n this.emptyTemplate = input(...(ngDevMode ? [undefined, { debugName: \"emptyTemplate\" }] : []));\n this.headerTemplate = input(...(ngDevMode ? [undefined, { debugName: \"headerTemplate\" }] : []));\n this.footerTemplate = input(...(ngDevMode ? [undefined, { debugName: \"footerTemplate\" }] : []));\n this.contentFooterTemplate = input(...(ngDevMode ? [undefined, { debugName: \"contentFooterTemplate\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\n this.onBeforeDrop = output();\n this.onSortChanged = output();\n this.onItemClick = output();\n this.onActionClick = output();\n this.onItemDblClick = output();\n this.onItemRightClick = output();\n this.items = computed(() => {\n // ... your excellent gap-filling index logic remains the same ...\n const dataSource = this.dataSource() || [];\n const mappedItems = dataSource.map((item) => ({\n id: item[this.keyField()],\n index: item[this.indexField()],\n title: item[this.titleField()],\n cssClass: item[this.cssClassField()],\n priority: item[this.priorityField()],\n statusKey: item[this.statusKeyField()],\n description: item[this.descriptionField()],\n }));\n const itemsByStatus = new Map();\n for (const item of mappedItems) {\n if (!itemsByStatus.has(item.statusKey)) {\n itemsByStatus.set(item.statusKey, []);\n }\n itemsByStatus.get(item.statusKey).push(item);\n }\n const finalProcessedItems = [];\n for (const group of itemsByStatus.values()) {\n const correctlyIndexedItems = [];\n const itemsToBeIndexed = [];\n const takenIndices = new Set();\n for (const item of group) {\n const hasValidIndex = item.index != null && typeof item.index === 'number' && !takenIndices.has(item.index);\n if (hasValidIndex) {\n takenIndices.add(item.index);\n correctlyIndexedItems.push(item);\n }\n else {\n itemsToBeIndexed.push(item);\n }\n }\n let currentIndex = 0;\n for (const item of itemsToBeIndexed) {\n while (takenIndices.has(currentIndex)) {\n currentIndex++;\n }\n item.index = currentIndex;\n currentIndex++;\n }\n const processedGroup = [...correctlyIndexedItems, ...itemsToBeIndexed];\n processedGroup.sort((a, b) => a.index - b.index);\n finalProcessedItems.push(...processedGroup);\n }\n return finalProcessedItems;\n }, ...(ngDevMode ? [{ debugName: \"items\" }] : []));\n this.filteredStatuses = computed(() => this.statuses().sort((a, b) => a.index - b.index), ...(ngDevMode ? [{ debugName: \"filteredStatuses\" }] : []));\n }\n /**\n * Handles a drop operation to reorder items or move them between statuses.\n * It uses the component's current rendered state (`this.items`) as the source\n * of truth, performs precise re-indexing, and emits a comprehensive event with\n * the updated data source.\n *\n * @param event AXDropListDroppedEvent - The drag-and-drop event including indices and container information.\n * @returns Promise<void>\n */\n async drop(event) {\n const { item: droppedItemDirective, currentIndex, previousIndex, container, previousContainer } = event;\n // --- 1. Get identifiers and the item's original data ---\n const currentStatusKey = JSON.parse(container.element.id);\n const previousStatusKey = JSON.parse(previousContainer.element.id);\n const movedItemOriginalData = droppedItemDirective.dragData();\n if (!movedItemOriginalData) {\n console.warn('AXKanban: Dragged item has no [dragData]. Sort event cannot be emitted.');\n return;\n }\n // --- 2. Get the original item from dataSource ---\n const originalItemFromDataSource = this.dataSource().find((item) => item[this.keyField()] === movedItemOriginalData.id);\n if (!originalItemFromDataSource) {\n console.warn('AXKanban: Item not found in dataSource.');\n return;\n }\n // --- 3. Perform the move operation ---\n await this.performMove(originalItemFromDataSource, previousStatusKey, currentStatusKey, previousIndex, currentIndex, event.nativeEvent);\n }\n /**\n * Programmatically move an item to a different status or reorder within the same status.\n * @param itemId The ID of the item to move (using keyField)\n * @param targetStatusKey The target status key to move the item to\n * @param targetIndex Optional target index within the target status. If not provided, item will be appended to the end.\n * @returns Promise<boolean> - true if the move was successful, false otherwise\n */\n async moveItem(itemId, targetStatusKey, targetIndex) {\n const keyField = this.keyField();\n const originalItem = this.dataSource().find((item) => item[keyField] === itemId);\n if (!originalItem) {\n console.warn(`AXKanban: Item with id \"${itemId}\" not found in dataSource.`);\n return false;\n }\n // Get current status from dataSource\n const statusKeyField = this.statusKeyField();\n const previousStatusKey = originalItem[statusKeyField];\n // Get current index from the computed items state (more accurate than dataSource field)\n const currentItem = this.items().find((i) => i.id === itemId);\n const previousIndex = currentItem?.index ?? 0;\n // If target index is not provided, append to the end\n let currentIndex = targetIndex;\n if (currentIndex === undefined) {\n const targetStatusItems = this.items().filter((i) => i.statusKey === targetStatusKey);\n currentIndex = targetStatusItems.length;\n }\n // Perform the move\n return await this.performMove(originalItem, previousStatusKey, targetStatusKey, previousIndex, currentIndex, null);\n }\n /**\n * Programmatically reorder an item within the same status.\n * @param itemId The ID of the item to reorder (using keyField)\n * @param newIndex The new index position within the same status\n * @returns Promise<boolean> - true if the reorder was successful, false otherwise\n */\n async reorderItem(itemId, newIndex) {\n const keyField = this.keyField();\n const originalItem = this.dataSource().find((item) => item[keyField] === itemId);\n if (!originalItem) {\n console.warn(`AXKanban: Item with id \"${itemId}\" not found in dataSource.`);\n return false;\n }\n // Get current status from dataSource\n const statusKeyField = this.statusKeyField();\n const statusKey = originalItem[statusKeyField];\n // Get current index from the computed items state (more accurate than dataSource field)\n const currentItem = this.items().find((i) => i.id === itemId);\n const previousIndex = currentItem?.index ?? 0;\n // Perform the move (same status, different index)\n return await this.performMove(originalItem, statusKey, statusKey, previousIndex, newIndex, null);\n }\n /**\n * Programmatically move an item to a different status.\n * @param itemId The ID of the item to move (using keyField)\n * @param targetStatusKey The target status key to move the item to\n * @param targetIndex Optional target index within the target status. If not provided, item will be appended to the end.\n * @returns Promise<boolean> - true if the move was successful, false otherwise\n */\n async moveItemToStatus(itemId, targetStatusKey, targetIndex) {\n return await this.moveItem(itemId, targetStatusKey, targetIndex);\n }\n /**\n * Core method that performs the move operation, handles re-indexing, and emits events.\n * This is used by both drag-and-drop operations and programmatic moves.\n *\n * @param originalItem The original item from dataSource that is being moved\n * @param previousStatusKey The status key the item is moving from\n * @param currentStatusKey The status key the item is moving to\n * @param previousIndex The index the item is moving from\n * @param currentIndex The index the item is moving to\n * @param nativeEvent The native mouse event (null for programmatic moves)\n * @returns Promise<boolean> - true if the move was successful, false otherwise\n */\n async performMove(originalItem, previousStatusKey, currentStatusKey, previousIndex, currentIndex, nativeEvent) {\n // --- 1. Emit beforeDrop event and check if drop should be canceled ---\n const shouldProceed = await this.emitBeforeDropEvent(originalItem, previousStatusKey, currentStatusKey, previousIndex, currentIndex, nativeEvent);\n if (!shouldProceed) {\n return false;\n }\n // --- 2. Use the `items` computed property as the source of truth for the operation ---\n // This is the CRUCIAL FIX. We operate on the data as it was rendered.\n const currentItemsState = structuredClone(this.items());\n // --- 3. Perform the move operation based on the scenario ---\n if (previousStatusKey === currentStatusKey) {\n // --- Scenario A: Reordering within the same list ---\n const list = currentItemsState.filter((i) => i.statusKey === currentStatusKey);\n // Remove from the old position and insert into the new position\n const [movedItem] = list.splice(previousIndex, 1);\n list.splice(currentIndex, 0, movedItem);\n // Re-index only this modified list\n list.forEach((item, idx) => (item.index = idx));\n }\n else {\n // --- Scenario B: Moving to a different list ---\n const sourceList = currentItemsState.filter((i) => i.statusKey === previousStatusKey);\n const destList = currentItemsState.filter((i) => i.statusKey === currentStatusKey);\n // Remove from source list\n const [movedItem] = sourceList.splice(previousIndex, 1);\n // Update its status and add to destination list\n movedItem.statusKey = currentStatusKey;\n destList.splice(currentIndex, 0, movedItem);\n // Re-index both affected lists\n sourceList.forEach((item, idx) => (item.index = idx));\n destList.forEach((item, idx) => (item.index = idx));\n }\n // --- 4. Map the changes back to a new version of the original dataSource ---\n // This preserves any extra properties the user might have on their data objects.\n const keyField = this.keyField();\n const statusKeyField = this.statusKeyField();\n const indexField = this.indexField();\n const updatedItemsMap = new Map(currentItemsState.map((i) => [i.id, i]));\n const finalDataSource = structuredClone(this.dataSource());\n finalDataSource.forEach((originalItem) => {\n const updatedItem = updatedItemsMap.get(originalItem[keyField]);\n if (updatedItem) {\n originalItem[indexField] = updatedItem.index;\n originalItem[statusKeyField] = updatedItem.statusKey;\n }\n });\n const movedItemId = originalItem[keyField];\n const finalOriginalItemFromDataSource = finalDataSource.find((item) => item[keyField] === movedItemId);\n // --- 5. Emit the final, comprehensive event ---\n this.onSortChanged.emit({\n sender: this,\n nativeEvent: nativeEvent,\n // The original data object that was moved\n item: finalOriginalItemFromDataSource,\n // The complete, precisely re-indexed data source, ready for state update\n allItems: finalDataSource,\n currentIndex,\n previousIndex,\n currentStatusKey,\n previousStatusKey,\n });\n return true;\n }\n /**\n * Emit beforeDrop event and return whether to continue with the drop operation.\n * Supports both synchronous and asynchronous event handlers via the `wait()` method.\n * @param item The original item from dataSource that is being moved\n * @param previousStatusKey The status key the item is moving from\n * @param currentStatusKey The status key the item is moving to\n * @param previousIndex The index the item is moving from\n * @param currentIndex The index the item is moving to\n * @param nativeEvent The native mouse event (null for programmatic moves)\n * @returns Promise<boolean> - true if the drop should proceed, false if it should be canceled\n */\n async emitBeforeDropEvent(item, previousStatusKey, currentStatusKey, previousIndex, currentIndex, nativeEvent) {\n const beforeDropEvent = {\n sender: this,\n nativeEvent,\n item,\n previousStatusKey,\n currentStatusKey,\n previousIndex,\n currentIndex,\n canceled: false,\n };\n // Emit the event - handlers can call event.wait() to register async operations\n this.onBeforeDrop.emit(beforeDropEvent);\n let isCanceled;\n if (typeof beforeDropEvent.canceled === 'function') {\n isCanceled = await beforeDropEvent.canceled();\n }\n else {\n isCanceled = (beforeDropEvent.canceled || false);\n }\n return !isCanceled;\n }\n getItemsById(key) {\n return this.items().filter((e) => e.statusKey === key);\n }\n getOriginalItemsById(key) {\n return this.dataSource().filter((e) => e[this.statusKeyField()] === key);\n }\n stringify(value) {\n return JSON.stringify(value);\n }\n handleActionClick(event, item) {\n const originalItemFromDataSource = this.dataSource().find((originalItem) => originalItem[this.keyField()] === item.id);\n this.onActionClick.emit({ item: originalItemFromDataSource, nativeEvent: event, sender: this });\n }\n handleClick(event, item) {\n const originalItemFromDataSource = this.dataSource().find((originalItem) => originalItem[this.keyField()] === item.id);\n this.onItemClick.emit({ item: originalItemFromDataSource, nativeEvent: event, sender: this });\n }\n handleDblClick(event, item) {\n const originalItemFromDataSource = this.dataSource().find((originalItem) => originalItem[this.keyField()] === item.id);\n this.onItemDblClick.emit({ item: originalItemFromDataSource, nativeEvent: event, sender: this });\n }\n handleRightClick(event, item) {\n const originalItemFromDataSource = this.dataSource().find((originalItem) => originalItem[this.keyField()] === item.id);\n this.onItemRightClick.emit({ item: originalItemFromDataSource, nativeEvent: event, sender: this });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXKanbanComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXKanbanComponent, isStandalone: true, selector: \"ax-kanban\", inputs: { hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, statuses: { classPropertyName: \"statuses\", publicName: \"statuses\", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: \"itemTemplate\", publicName: \"itemTemplate\", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: \"dataSource\", publicName: \"dataSource\", isSignal: true, isRequired: false, transformFunction: null }, keyField: { classPropertyName: \"keyField\", publicName: \"keyField\", isSignal: true, isRequired: false, transformFunction: null }, indexField: { classPropertyName: \"indexField\", publicName: \"indexField\", isSignal: true, isRequired: false, transformFunction: null }, titleField: { classPropertyName: \"titleField\", publicName: \"titleField\", isSignal: true, isRequired: false, transformFunction: null }, cssClassField: { classPropertyName: \"cssClassField\", publicName: \"cssClassField\", isSignal: true, isRequired: false, transformFunction: null }, priorityField: { classPropertyName: \"priorityField\", publicName: \"priorityField\", isSignal: true, isRequired: false, transformFunction: null }, statusKeyField: { classPropertyName: \"statusKeyField\", publicName: \"statusKeyField\", isSignal: true, isRequired: false, transformFunction: null }, descriptionField: { classPropertyName: \"descriptionField\", publicName: \"descriptionField\", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: \"emptyTemplate\", publicName: \"emptyTemplate\", isSignal: true, isRequired: false, transformFunction: null }, headerTemplate: { classPropertyName: \"headerTemplate\", publicName: \"headerTemplate\", isSignal: true, isRequired: false, transformFunction: null }, footerTemplate: { classPropertyName: \"footerTemplate\", publicName: \"footerTemplate\", isSignal: true, isRequired: false, transformFunction: null }, contentFooterTemplate: { classPropertyName: \"contentFooterTemplate\", publicName: \"contentFooterTemplate\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onBeforeDrop: \"onBeforeDrop\", onSortChanged: \"onSortChanged\", onItemClick: \"onItemClick\", onActionClick: \"onActionClick\", onItemDblClick: \"onItemDblClick\", onItemRightClick: \"onItemRightClick\" }, usesInheritance: true, ngImport: i0, template: \"@for (status of filteredStatuses(); track status.key) {\\n <div class=\\\"ax-kanban-status {{ status.cssClass }}\\\">\\n <ax-header>\\n @if (headerTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"headerTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n } @else {\\n <ax-title>{{ status.title }}</ax-title>\\n }\\n </ax-header>\\n <ax-content axDropList dropListGroup=\\\"kanban\\\" [id]=\\\"stringify(status.key)\\\" (dropListDropped)=\\\"drop($event)\\\">\\n @if (emptyTemplate() && getOriginalItemsById(status.key).length === 0) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"emptyTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n }\\n @if (itemTemplate()) {\\n @for (item of getOriginalItemsById(status.key); track item[keyField()]) {\\n <div\\n axDrag\\n [dragData]=\\\"item\\\"\\n class=\\\"{{ item.cssClass }}\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [axTooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n [axTooltipContext]=\\\"item\\\"\\n (click)=\\\"handleClick($event, item)\\\"\\n (dblclick)=\\\"handleDblClick($event, item)\\\"\\n (contextmenu)=\\\"handleRightClick($event, item)\\\"\\n >\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: item }\\\"\\n ></ng-container>\\n </div>\\n }\\n } @else {\\n @for (item of getItemsById(status.key); track item.id) {\\n <div\\n axDrag\\n [dragData]=\\\"item\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n class=\\\"ax-kanban-item {{ item.cssClass }}\\\"\\n [ngClass]=\\\"`ax-kanban-${item.priority ?? 'primary'}-periority`\\\"\\n [axTooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n [axTooltipContext]=\\\"item\\\"\\n (click)=\\\"handleClick($event, item)\\\"\\n (dblclick)=\\\"handleDblClick($event, item)\\\"\\n (contextmenu)=\\\"handleRightClick($event, item)\\\"\\n >\\n <ax-heading>\\n <ax-title>\\n <span class=\\\"ax-kanban-truncate\\\">{{ item.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n class=\\\"ax-icon ax-icon-more-horizontal ax-kanban-action-icon\\\"\\n (click)=\\\"handleActionClick($event, item)\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>{{ item.description }}</ax-subtitle>\\n </ax-heading>\\n </div>\\n }\\n }\\n @if (contentFooterTemplate()) {\\n <ax-footer>\\n <ng-container\\n [ngTemplateOutlet]=\\\"contentFooterTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n </ax-footer>\\n }\\n </ax-content>\\n @if (footerTemplate()) {\\n <ax-footer>\\n <ng-container\\n [ngTemplateOutlet]=\\\"footerTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n </ax-footer>\\n }\\n </div>\\n}\\n\", styles: [\".ax-dark ax-kanban{--ax-comp-kanban-item-bg-color: var(--ax-sys-color-surface);--ax-comp-kanban-item-text-color: var(--ax-sys-color-on-surface)}:root{--ax-comp-kanban-gap: 1rem;--ax-comp-kanban-status-gap: .5rem;--ax-comp-kanban-status-min-width: 20rem;--ax-comp-kanban-status-min-height: 30rem;--ax-comp-kanban-status-padding-block: .5rem;--ax-comp-kanban-status-padding-inline: .5rem;--ax-comp-kanban-item-padding-block: .25rem;--ax-comp-kanban-item-padding-inline: .5rem;--ax-comp-kanban-item-indicator-size: .125rem;--ax-comp-kanban-status-bg-color: var(--ax-sys-color-lighter-surface);--ax-comp-kanban-status-text-color: var(--ax-sys-color-on-lighter-surface);--ax-comp-kanban-item-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-kanban-item-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-kanban-primary-periority-color: var(--ax-sys-color-primary-surface);--ax-comp-kanban-highest-periority-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-kanban-high-periority-color: var(--ax-sys-color-danger-surface);--ax-comp-kanban-medium-periority-color: var(--ax-sys-color-warning-surface);--ax-comp-kanban-low-periority-color: var(--ax-sys-color-success-light-surface);--ax-comp-kanban-lowest-periority-color: var(--ax-sys-color-success-lightest-surface)}ax-kanban{display:grid;overflow-x:auto;grid-auto-flow:column;gap:var(--ax-comp-kanban-gap);grid-auto-columns:var(--ax-comp-kanban-status-min-width)}ax-kanban .ax-kanban-status{display:flex;overflow-y:auto;flex-direction:column;gap:var(--ax-comp-kanban-status-gap);border-radius:var(--ax-sys-border-radius);height:var(--ax-comp-kanban-status-min-height);color:rgba(var(--ax-comp-kanban-status-text-color));clip-path:inset(0 round var(--ax-sys-border-radius));background-color:rgba(var(--ax-comp-kanban-status-bg-color))}ax-kanban .ax-kanban-status>ax-header{top:0;z-index:2;position:sticky;background-color:inherit}ax-kanban .ax-kanban-status>ax-header>ax-title{width:100%;display:block;font-weight:600;font-size:1.25rem;text-align:center;padding-block-start:var(--ax-comp-kanban-status-padding-block)}ax-kanban .ax-kanban-status ax-content{flex:1;display:flex;flex-direction:column;gap:var(--ax-comp-kanban-status-gap);padding-inline:var(--ax-comp-kanban-status-padding-inline)}ax-kanban .ax-kanban-status ax-content ax-popover{display:none}ax-kanban .ax-kanban-status ax-content .ax-kanban-item{width:100%;position:relative;box-shadow:0 1px 2px #0000000d;color:rgba(var(--ax-comp-kanban-item-text-color));border-radius:calc(var(--ax-sys-border-radius) / 2);padding-block:var(--ax-comp-kanban-item-padding-block);padding-inline:var(--ax-comp-kanban-item-padding-inline);background-color:rgba(var(--ax-comp-kanban-item-bg-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item:before{content:\\\"\\\";position:absolute;border-radius:9999px;inset-inline-start:.125rem;width:var(--ax-comp-kanban-item-indicator-size);height:calc(100% - var(--ax-comp-kanban-item-padding-inline))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-primary-periority:before{background-color:rgba(var(--ax-comp-kanban-primary-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-highest-periority:before{background-color:rgba(var(--ax-comp-kanban-highest-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-high-periority:before{background-color:rgba(var(--ax-comp-kanban-high-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-medium-periority:before{background-color:rgba(var(--ax-comp-kanban-medium-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-low-periority:before{background-color:rgba(var(--ax-comp-kanban-low-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-lowest-periority:before{background-color:rgba(var(--ax-comp-kanban-lowest-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item>ax-heading>ax-title{display:flex;font-size:1rem;font-weight:500;align-items:center;justify-content:space-between}ax-kanban .ax-kanban-status ax-content .ax-kanban-item>ax-heading>ax-title .ax-kanban-action-icon{cursor:pointer}ax-kanban .ax-kanban-status>ax-footer{bottom:0;z-index:2;position:sticky;background-color:inherit}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"axDrag\", \"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropListDirective, selector: \"[axDropList]\", inputs: [\"axDropList\", \"sortingDisabled\", \"dropListGroup\", \"dropListOrientation\"], outputs: [\"dropListDropped\"], exportAs: [\"axDropList\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"component\", type: AXDecoratorHeadingComponent, selector: \"ax-heading\", inputs: [\"darkMode\", \"color\", \"weight\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltipDisabled\", \"axTooltip\", \"axTooltipContext\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXKanbanComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-kanban', encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n NgTemplateOutlet,\n AXDragDirective,\n AXDropListDirective,\n AXDecoratorGenericComponent,\n AXDecoratorHeadingComponent,\n AXDecoratorIconComponent,\n AXTooltipDirective,\n ], template: \"@for (status of filteredStatuses(); track status.key) {\\n <div class=\\\"ax-kanban-status {{ status.cssClass }}\\\">\\n <ax-header>\\n @if (headerTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"headerTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n } @else {\\n <ax-title>{{ status.title }}</ax-title>\\n }\\n </ax-header>\\n <ax-content axDropList dropListGroup=\\\"kanban\\\" [id]=\\\"stringify(status.key)\\\" (dropListDropped)=\\\"drop($event)\\\">\\n @if (emptyTemplate() && getOriginalItemsById(status.key).length === 0) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"emptyTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n }\\n @if (itemTemplate()) {\\n @for (item of getOriginalItemsById(status.key); track item[keyField()]) {\\n <div\\n axDrag\\n [dragData]=\\\"item\\\"\\n class=\\\"{{ item.cssClass }}\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [axTooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n [axTooltipContext]=\\\"item\\\"\\n (click)=\\\"handleClick($event, item)\\\"\\n (dblclick)=\\\"handleDblClick($event, item)\\\"\\n (contextmenu)=\\\"handleRightClick($event, item)\\\"\\n >\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: item }\\\"\\n ></ng-container>\\n </div>\\n }\\n } @else {\\n @for (item of getItemsById(status.key); track item.id) {\\n <div\\n axDrag\\n [dragData]=\\\"item\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n class=\\\"ax-kanban-item {{ item.cssClass }}\\\"\\n [ngClass]=\\\"`ax-kanban-${item.priority ?? 'primary'}-periority`\\\"\\n [axTooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n [axTooltipContext]=\\\"item\\\"\\n (click)=\\\"handleClick($event, item)\\\"\\n (dblclick)=\\\"handleDblClick($event, item)\\\"\\n (contextmenu)=\\\"handleRightClick($event, item)\\\"\\n >\\n <ax-heading>\\n <ax-title>\\n <span class=\\\"ax-kanban-truncate\\\">{{ item.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n class=\\\"ax-icon ax-icon-more-horizontal ax-kanban-action-icon\\\"\\n (click)=\\\"handleActionClick($event, item)\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>{{ item.description }}</ax-subtitle>\\n </ax-heading>\\n </div>\\n }\\n }\\n @if (contentFooterTemplate()) {\\n <ax-footer>\\n <ng-container\\n [ngTemplateOutlet]=\\\"contentFooterTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n </ax-footer>\\n }\\n </ax-content>\\n @if (footerTemplate()) {\\n <ax-footer>\\n <ng-container\\n [ngTemplateOutlet]=\\\"footerTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n </ax-footer>\\n }\\n </div>\\n}\\n\", styles: [\".ax-dark ax-kanban{--ax-comp-kanban-item-bg-color: var(--ax-sys-color-surface);--ax-comp-kanban-item-text-color: var(--ax-sys-color-on-surface)}:root{--ax-comp-kanban-gap: 1rem;--ax-comp-kanban-status-gap: .5rem;--ax-comp-kanban-status-min-width: 20rem;--ax-comp-kanban-status-min-height: 30rem;--ax-comp-kanban-status-padding-block: .5rem;--ax-comp-kanban-status-padding-inline: .5rem;--ax-comp-kanban-item-padding-block: .25rem;--ax-comp-kanban-item-padding-inline: .5rem;--ax-comp-kanban-item-indicator-size: .125rem;--ax-comp-kanban-status-bg-color: var(--ax-sys-color-lighter-surface);--ax-comp-kanban-status-text-color: var(--ax-sys-color-on-lighter-surface);--ax-comp-kanban-item-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-kanban-item-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-kanban-primary-periority-color: var(--ax-sys-color-primary-surface);--ax-comp-kanban-highest-periority-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-kanban-high-periority-color: var(--ax-sys-color-danger-surface);--ax-comp-kanban-medium-periority-color: var(--ax-sys-color-warning-surface);--ax-comp-kanban-low-periority-color: var(--ax-sys-color-success-light-surface);--ax-comp-kanban-lowest-periority-color: var(--ax-sys-color-success-lightest-surface)}ax-kanban{display:grid;overflow-x:auto;grid-auto-flow:column;gap:var(--ax-comp-kanban-gap);grid-auto-columns:var(--ax-comp-kanban-status-min-width)}ax-kanban .ax-kanban-status{display:flex;overflow-y:auto;flex-direction:column;gap:var(--ax-comp-kanban-status-gap);border-radius:var(--ax-sys-border-radius);height:var(--ax-comp-kanban-status-min-height);color:rgba(var(--ax-comp-kanban-status-text-color));clip-path:inset(0 round var(--ax-sys-border-radius));background-color:rgba(var(--ax-comp-kanban-status-bg-color))}ax-kanban .ax-kanban-status>ax-header{top:0;z-index:2;position:sticky;background-color:inherit}ax-kanban .ax-kanban-status>ax-header>ax-title{width:100%;display:block;font-weight:600;font-size:1.25rem;text-align:center;padding-block-start:var(--ax-comp-kanban-status-padding-block)}ax-kanban .ax-kanban-status ax-content{flex:1;display:flex;flex-direction:column;gap:var(--ax-comp-kanban-status-gap);padding-inline:var(--ax-comp-kanban-status-padding-inline)}ax-kanban .ax-kanban-status ax-content ax-popover{display:none}ax-kanban .ax-kanban-status ax-content .ax-kanban-item{width:100%;position:relative;box-shadow:0 1px 2px #0000000d;color:rgba(var(--ax-comp-kanban-item-text-color));border-radius:calc(var(--ax-sys-border-radius) / 2);padding-block:var(--ax-comp-kanban-item-padding-block);padding-inline:var(--ax-comp-kanban-item-padding-inline);background-color:rgba(var(--ax-comp-kanban-item-bg-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item:before{content:\\\"\\\";position:absolute;border-radius:9999px;inset-inline-start:.125rem;width:var(--ax-comp-kanban-item-indicator-size);height:calc(100% - var(--ax-comp-kanban-item-padding-inline))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-primary-periority:before{background-color:rgba(var(--ax-comp-kanban-primary-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-highest-periority:before{background-color:rgba(var(--ax-comp-kanban-highest-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-high-periority:before{background-color:rgba(var(--ax-comp-kanban-high-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-medium-periority:before{background-color:rgba(var(--ax-comp-kanban-medium-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-low-periority:before{background-color:rgba(var(--ax-comp-kanban-low-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-lowest-periority:before{background-color:rgba(var(--ax-comp-kanban-lowest-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item>ax-heading>ax-title{display:flex;font-size:1rem;font-weight:500;align-items:center;justify-content:space-between}ax-kanban .ax-kanban-status ax-content .ax-kanban-item>ax-heading>ax-title .ax-kanban-action-icon{cursor:pointer}ax-kanban .ax-kanban-status>ax-footer{bottom:0;z-index:2;position:sticky;background-color:inherit}\\n\"] }]\n }], propDecorators: { hasActions: [{ type: i0.Input, args: [{ isSignal: true, alias: \"hasActions\", required: false }] }], dragStartDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragStartDelay\", required: false }] }], statuses: [{ type: i0.Input, args: [{ isSignal: true, alias: \"statuses\", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"itemTemplate\", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dataSource\", required: false }] }], keyField: [{ type: i0.Input, args: [{ isSignal: true, alias: \"keyField\", required: false }] }], indexField: [{ type: i0.Input, args: [{ isSignal: true, alias: \"indexField\", required: false }] }], titleField: [{ type: i0.Input, args: [{ isSignal: true, alias: \"titleField\", required: false }] }], cssClassField: [{ type: i0.Input, args: [{ isSignal: true, alias: \"cssClassField\", required: false }] }], priorityField: [{ type: i0.Input, args: [{ isSignal: true, alias: \"priorityField\", required: false }] }], statusKeyField: [{ type: i0.Input, args: [{ isSignal: true, alias: \"statusKeyField\", required: false }] }], descriptionField: [{ type: i0.Input, args: [{ isSignal: true, alias: \"descriptionField\", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"emptyTemplate\", required: false }] }], headerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"headerTemplate\", required: false }] }], footerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"footerTemplate\", required: false }] }], contentFooterTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"contentFooterTemplate\", required: false }] }], tooltipTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"tooltipTemplate\", required: false }] }], onBeforeDrop: [{ type: i0.Output, args: [\"onBeforeDrop\"] }], onSortChanged: [{ type: i0.Output, args: [\"onSortChanged\"] }], onItemClick: [{ type: i0.Output, args: [\"onItemClick\"] }], onActionClick: [{ type: i0.Output, args: [\"onActionClick\"] }], onItemDblClick: [{ type: i0.Output, args: [\"onItemDblClick\"] }], onItemRightClick: [{ type: i0.Output, args: [\"onItemRightClick\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FuYmFuLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMva2FuYmFuL3NyYy9saWIva2FuYmFuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMva2FuYmFuL3NyYy9saWIva2FuYmFuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUEwQixNQUFNLHVCQUF1QixDQUFDO0FBQ3JHLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsMkJBQTJCLEVBQzNCLHdCQUF3QixHQUN6QixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFlLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQXlCbkcsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFoQmxEOztRQWlCRSxlQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssc0RBQUMsQ0FBQztRQUMxQixtQkFBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLDBEQUFDLENBQUM7UUFDMUIsYUFBUSxHQUFHLEtBQUssQ0FBbUIsRUFBRSxvREFBQyxDQUFDO1FBQ3ZDLGlCQUFZLEdBQUcsS0FBSyxrRUFBd0IsQ0FBQztRQUM3QyxlQUFVLEdBQUcsS0FBSyxnRUFBMEIsQ0FBQztRQUU3QyxhQUFRLEdBQUcsS0FBSyxDQUFTLElBQUksb0RBQUMsQ0FBQztRQUMvQixlQUFVLEdBQUcsS0FBSyxD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Q0FBQyxDQUFDO0lBQ25HLENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxLQUFpQixFQUFFLElBQWtCO1FBQzlELE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FDdkQsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUM1RCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSwwQkFBMEIsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7K0dBMVhVLGlCQUFpQjttR0FBakIsaUJBQWlCLHFyRkNsQzlCLG8zR0EwRkEsb3ZJRGxFSSxPQUFPLG9GQUNQLGdCQUFnQixvSkFDaEIsZUFBZSxxVUFDZixtQkFBbUIsb01BQ25CLDJCQUEyQix5TEFDM0IsMkJBQTJCLGdHQUMzQix3QkFBd0Isc0VBQ3hCLGtCQUFrQjs7NEZBR1QsaUJBQWlCO2tCQWhCN0IsU0FBUzsrQkFDRSxXQUFXLGlCQUdOLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsT0FBTzt3QkFDUCxnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQiwyQkFBMkI7d0JBQzNCLDJCQUEyQjt3QkFDM0Isd0JBQXdCO3dCQUN4QixrQkFBa0I7cUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlLCBBWERyb3BMaXN0RGlyZWN0aXZlLCBBWERyb3BMaXN0RHJvcHBlZEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7XG4gIEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCxcbiAgQVhEZWNvcmF0b3JIZWFkaW5nQ29tcG9uZW50LFxuICBBWERlY29yYXRvckljb25Db21wb25lbnQsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQsIG91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBWEthbmJhbkJlZm9yZURyb3BFdmVudCxcbiAgQVhLYW5iYW5JdGVtLFxuICBBWEthbmJhbk1vdXNlRXZlbnQsXG4gIEFYS2FuYmFuU29ydEV2ZW50LFxuICBBWEthbmJhblN0YXR1cyxcbn0gZnJvbSAnLi9rYW5iYW4uY2xhc3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1rYW5iYW4nLFxuICB0ZW1wbGF0ZVVybDogJy4va2FuYmFuLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4va2FuYmFuLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcExpc3REaXJlY3RpdmUsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFYRGVjb3JhdG9ySGVhZGluZ0NvbXBvbmVudCxcbiAgICBBWERlY29yYXRvckljb25Db21wb25lbnQsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWEthbmJhbkNvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgaGFzQWN0aW9ucyA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ1N0YXJ0RGVsYXkgPSBpbnB1dCgwKTtcbiAgc3RhdHVzZXMgPSBpbnB1dDxBWEthbmJhblN0YXR1c1tdPihbXSk7XG4gIGl0ZW1UZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuICBkYXRhU291cmNlID0gaW5wdXQ8QVhLYW5iYW5JdGVtW10gfCBhbnlbXT4oKTtcblxuICBrZXlGaWVsZCA9IGlucHV0PHN0cmluZz4oJ2lkJyk7XG4gIGluZGV4RmllbGQgPSBpbnB1dDxzdHJpbmc+KCdpbmRleCcpO1xuICB0aXRsZUZpZWxkID0gaW5wdXQ8c3RyaW5nPigndGl0bGUnKTtcbiAgY3NzQ2xhc3NGaWVsZCA9IGlucHV0PHN0cmluZz4oJ2Nzc0NsYXNzJyk7XG4gIHByaW9yaXR5RmllbGQgPSBpbnB1dDxzdHJpbmc+KCdwcmlvcml0eScpO1xuICBzdGF0dXNLZXlGaWVsZCA9IGlucHV0PHN0cmluZz4oJ3N0YXR1c0tleScpO1xuICBkZXNjcmlwdGlvbkZpZWxkID0gaW5wdXQ8c3RyaW5nPignZGVzY3JpcHRpb24nKTtcbiAgZW1wdHlUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuICBoZWFkZXJUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuICBmb290ZXJUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuICBjb250ZW50Rm9vdGVyVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcbiAgdG9vbHRpcFRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG5cbiAgb25CZWZvcmVEcm9wID0gb3V0cHV0PEFYS2FuYmFuQmVmb3JlRHJvcEV2ZW50PigpO1xuICBvblNvcnRDaGFuZ2VkID0gb3V0cHV0PEFYS2FuYmFuU29ydEV2ZW50PigpO1xuICBvbkl0ZW1DbGljayA9IG91dHB1dDxBWEthbmJhbk1vdXNlRXZlbnQ+KCk7XG4gIG9uQWN0aW9uQ2xpY2sgPSBvdXRwdXQ8QVhLYW5iYW5Nb3VzZUV2ZW50PigpO1xuICBvbkl0ZW1EYmxDbGljayA9IG91dHB1dDxBWEthbmJhbk1vdXNlRXZlbnQ+KCk7XG4gIG9uSXRlbVJpZ2h0Q2xpY2sgPSBvdXRwdXQ8QVhLYW5iYW5Nb3VzZUV2ZW50PigpO1xuXG4gIHByb3RlY3RlZCBpdGVtcyA9IGNvbXB1dGVkPEFYS2FuYmFuSXRlbVtdPigoKSA9PiB7XG4gICAgLy8gLi4uIHlvdXIgZXhjZWxsZW50IGdhcC1maWxsaW5nIGluZGV4IGxvZ2ljIHJlbWFpbnMgdGhlIHNhbWUgLi4uXG4gICAgY29uc3QgZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZSgpIHx8IFtdO1xuICAgIGNvbnN0IG1hcHBlZEl0ZW1zID0gZGF0YVNvdXJjZS5tYXA8QVhLYW5iYW5JdGVtPigoaXRlbTogYW55KSA9PiAoe1xuICAgICAgaWQ6IGl0ZW1bdGhpcy5rZXlGaWVsZCgpXSxcbiAgICAgIGluZGV4OiBpdGVtW3RoaXMuaW5kZXhGaWVsZCgpXSxcbiAgICAgIHRpdGxlOiBpdGVtW3RoaXMudGl0bGVGaWVsZCgpXSxcbiAgICAgIGNzc0NsYXNzOiBpdGVtW3RoaXMuY3NzQ2xhc3NGaWVsZCgpXSxcbiAgICAgIHByaW9yaXR5OiBpdGVtW3RoaXMucHJpb3JpdHlGaWVsZCgpXSxcbiAgICAgIHN0YXR1c0tleTogaXRlbVt0aGlzLnN0YXR1c0tleUZpZWxkKCldLFxuICAgICAgZGVzY3JpcHRpb246IGl0ZW1bdGhpcy5kZXNjcmlwdGlvbkZpZWxkKCldLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGl0ZW1zQnlTdGF0dXMgPSBuZXcgTWFwPGFueSwgQVhLYW5iYW5JdGVtW10+KCk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIG1hcHBlZEl0ZW1zKSB7XG4gICAgICBpZiAoIWl0ZW1zQnlTdGF0dXMuaGFzKGl0ZW0uc3RhdHVzS2V5KSkge1xuICAgICAgICBpdGVtc0J5U3RhdHVzLnNldChpdGVtLnN0YXR1c0tleSwgW10pO1xuICAgICAgfVxuICAgICAgaXRlbXNCeVN0YXR1cy5nZXQoaXRlbS5zdGF0dXNLZXkpLnB1c2goaXRlbSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmluYWxQcm9jZXNzZWRJdGVtczogQVhLYW5iYW5JdGVtW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGl0ZW1zQnlTdGF0dXMudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNvcnJlY3RseUluZGV4ZWRJdGVtczogQVhLYW5iYW5JdGVtW10gPSBbXTtcbiAgICAgIGNvbnN0IGl0ZW1zVG9CZUluZGV4ZWQ6IEFYS2FuYmFuSXRlbVtdID0gW107XG4gICAgICBjb25zdCB0YWtlbkluZGljZXMgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBncm91cCkge1xuICAgICAgICBjb25zdCBoYXNWYWxpZEluZGV4ID0gaXRlbS5pbmRleCAhPSBudWxsICYmIHR5cGVvZiBpdGVtLmluZGV4ID09PSAnbnVtYmVyJyAmJiAhdGFrZW5JbmRpY2VzLmhhcyhpdGVtLmluZGV4KTtcbiAgICAgICAgaWYgKGhhc1ZhbGlkSW5kZXgpIHtcbiAgICAgICAgICB0YWtlbkluZGljZXMuYWRkKGl0ZW0uaW5kZXgpO1xuICAgICAgICAgIGNvcnJlY3RseUluZGV4ZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1zVG9CZUluZGV4ZWQucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IDA7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXNUb0JlSW5kZXhlZCkge1xuICAgICAgICB3aGlsZSAodGFrZW5JbmRpY2VzLmhhcyhjdXJyZW50SW5kZXgpKSB7XG4gICAgICAgICAgY3VycmVudEluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbS5pbmRleCA9IGN1cnJlbnRJbmRleDtcbiAgICAgICAgY3VycmVudEluZGV4Kys7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm9jZXNzZWRHcm91cCA9IFsuLi5jb3JyZWN0bHlJbmRleGVkSXRlbXMsIC4uLml0ZW1zVG9CZUluZGV4ZWRdO1xuICAgICAgcHJvY2Vzc2VkR3JvdXAuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuICAgICAgZmluYWxQcm9jZXNzZWRJdGVtcy5wdXNoKC4uLnByb2Nlc3NlZEdyb3VwKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbmFsUHJvY2Vzc2VkSXRlbXM7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBmaWx0ZXJlZFN0YXR1c2VzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0dXNlcygpLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KSk7XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgYSBkcm9wIG9wZXJhdGlvbiB0byByZW9yZGVyIGl0ZW1zIG9yIG1vdmUgdGhlbSBiZXR3ZWVuIHN0YXR1c2VzLlxuICAgKiBJdCB1c2VzIHRoZSBjb21wb25lbnQncyBjdXJyZW50IHJlbmRlcmVkIHN0YXRlIChgdGhpcy5pdGVtc2ApIGFzIHRoZSBzb3VyY2VcbiAgICogb2YgdHJ1dGgsIHBlcmZvcm1zIHByZWNpc2UgcmUtaW5kZXhpbmcsIGFuZCBlbWl0cyBhIGNvbXByZWhlbnNpdmUgZXZlbnQgd2l0aFxuICAgKiB0aGUgdXBkYXRlZCBkYXRhIHNvdXJjZS5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IEFYRHJvcExpc3REcm9wcGVkRXZlbnQgLSBUaGUgZHJhZy1hbmQtZHJvcCBldmVudCBpbmNsdWRpbmcgaW5kaWNlcyBhbmQgY29udGFpbmVyIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyBQcm9taXNlPHZvaWQ+XG4gICAqL1xuICBhc3luYyBkcm9wKGV2ZW50OiBBWERyb3BMaXN0RHJvcHBlZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBpdGVtOiBkcm9wcGVkSXRlbURpcmVjdGl2ZSwgY3VycmVudEluZGV4LCBwcmV2aW91c0luZGV4LCBjb250YWluZXIsIHByZXZpb3VzQ29udGFpbmVyIH0gPSBldmVudDtcblxuICAgIC8vIC0tLSAxLiBHZXQgaWRlbnRpZmllcnMgYW5kIHRoZSBpdGVtJ3Mgb3JpZ2luYWwgZGF0YSAtLS1cbiAgICBjb25zdCBjdXJyZW50U3RhdHVzS2V5ID0gSlNPTi5wYXJzZShjb250YWluZXIuZWxlbWVudC5pZCk7XG4gICAgY29uc3QgcHJldmlvdXNTdGF0dXNLZXkgPSBKU09OLnBhcnNlKHByZXZpb3VzQ29udGFpbmVyLmVsZW1lbnQuaWQpO1xuICAgIGNvbnN0IG1vdmVkSXRlbU9yaWdpbmFsRGF0YSA9IGRyb3BwZWRJdGVtRGlyZWN0aXZlLmRyYWdEYXRhKCkgYXMgQVhLYW5iYW5JdGVtO1xuXG4gICAgaWYgKCFtb3ZlZEl0ZW1PcmlnaW5hbERhdGEpIHtcbiAgICAgIGNvbnNvbGUud2FybignQVhLYW5iYW46IERyYWdnZWQgaXRlbSBoYXMgbm8gW2RyYWdEYXRhXS4gU29ydCBldmVudCBjYW5ub3QgYmUgZW1pdHRlZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyAtLS0gMi4gR2V0IHRoZSBvcmlnaW5hbCBpdGVtIGZyb20gZGF0YVNvdXJjZSAtLS1cbiAgICBjb25zdCBvcmlnaW5hbEl0ZW1Gcm9tRGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZSgpLmZpbmQoXG4gICAgICAoaXRlbSkgPT4gaXRlbVt0aGlzLmtleUZpZWxkKCldID09PSBtb3ZlZEl0ZW1PcmlnaW5hbERhdGEuaWQsXG4gICAgKTtcblxuICAgIGlmICghb3JpZ2luYWxJdGVtRnJvbURhdGFTb3VyY2UpIHtcbiAgICAgIGNvbnNvbGUud2FybignQVhLYW5iYW46IEl0ZW0gbm90IGZvdW5kIGluIGRhdGFTb3VyY2UuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gLS0tIDMuIFBlcmZvcm0gdGhlIG1vdmUgb3BlcmF0aW9uIC0tLVxuICAgIGF3YWl0IHRoaXMucGVyZm9ybU1vdmUoXG4gICAgICBvcmlnaW5hbEl0ZW1Gcm9tRGF0YVNvdXJjZSxcbiAgICAgIHByZXZpb3VzU3RhdHVzS2V5LFxuICAgICAgY3VycmVudFN0YXR1c0tleSxcbiAgICAgIHByZXZpb3VzSW5kZXgsXG4gICAgICBjdXJyZW50SW5kZXgsXG4gICAgICBldmVudC5uYXRpdmVFdmVudCxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2dyYW1tYXRpY2FsbHkgbW92ZSBhbiBpdGVtIHRvIGEgZGlmZmVyZW50IHN0YXR1cyBvciByZW9yZGVyIHdpdGhpbiB0aGUgc2FtZSBzdGF0dXMuXG4gICAqIEBwYXJhbSBpdGVtSWQgVGhlIElEIG9mIHRoZSBpdGVtIHRvIG1vdmUgKHVzaW5nIGtleUZpZWxkKVxuICAgKiBAcGFyYW0gdGFyZ2V0U3RhdHVzS2V5IFRoZSB0YXJnZXQgc3RhdHVzIGtleSB0byBtb3ZlIHRoZSBpdGVtIHRvXG4gICAqIEBwYXJhbSB0YXJnZXRJbmRleCBPcHRpb25hbCB0YXJnZXQgaW5kZXggd2l0aGluIHRoZSB0YXJnZXQgc3RhdHVzLiBJZiBub3QgcHJvdmlkZWQsIGl0ZW0gd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZW5kLlxuICAgKiBAcmV0dXJucyBQcm9taXNlPGJvb2xlYW4+IC0gdHJ1ZSBpZiB0aGUgbW92ZSB3YXMgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBhc3luYyBtb3ZlSXRlbShpdGVtSWQ6IGFueSwgdGFyZ2V0U3RhdHVzS2V5OiBhbnksIHRhcmdldEluZGV4PzogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qga2V5RmllbGQgPSB0aGlzLmtleUZpZWxkKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxJdGVtID0gdGhpcy5kYXRhU291cmNlKCkuZmluZCgoaXRlbSkgPT4gaXRlbVtrZXlGaWVsZF0gPT09IGl0ZW1JZCk7XG5cbiAgICBpZiAoIW9yaWdpbmFsSXRlbSkge1xuICAgICAgY29uc29sZS53YXJuKGBBWEthbmJhbjogSXRlbSB3aXRoIGlkIFwiJHtpdGVtSWR9XCIgbm90IGZvdW5kIGluIGRhdGFTb3VyY2UuYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gR2V0IGN1cnJlbnQgc3RhdHVzIGZyb20gZGF0YVNvdXJjZVxuICAgIGNvbnN0IHN0YXR1c0tleUZpZWxkID0gdGhpcy5zdGF0dXNLZXlGaWVsZCgpO1xuICAgIGNvbnN0IHByZXZpb3VzU3RhdHVzS2V5ID0gb3JpZ2luYWxJdGVtW3N0YXR1c0tleUZpZWxkXTtcblxuICAgIC8vIEdldCBjdXJyZW50IGluZGV4IGZyb20gdGhlIGNvbXB1dGVkIGl0ZW1zIHN0YXRlIChtb3JlIGFjY3VyYXRlIHRoYW4gZGF0YVNvdXJjZSBmaWVsZClcbiAgICBjb25zdCBjdXJyZW50SXRlbSA9IHRoaXMuaXRlbXMoKS5maW5kKChpKSA9PiBpLmlkID09PSBpdGVtSWQpO1xuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBjdXJyZW50SXRlbT8uaW5kZXggPz8gMDtcblxuICAgIC8vIElmIHRhcmdldCBpbmRleCBpcyBub3QgcHJvdmlkZWQsIGFwcGVuZCB0byB0aGUgZW5kXG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IHRhcmdldEluZGV4O1xuICAgIGlmIChjdXJyZW50SW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdGFyZ2V0U3RhdHVzSXRlbXMgPSB0aGlzLml0ZW1zKCkuZmlsdGVyKChpKSA9PiBpLnN0YXR1c0tleSA9PT0gdGFyZ2V0U3RhdHVzS2V5KTtcbiAgICAgIGN1cnJlbnRJbmRleCA9IHRhcmdldFN0YXR1c0l0ZW1zLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIHRoZSBtb3ZlXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucGVyZm9ybU1vdmUob3JpZ2luYWxJdGVtLCBwcmV2aW91c1N0YXR1c0tleSwgdGFyZ2V0U3RhdHVzS2V5LCBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXgsIG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2dyYW1tYXRpY2FsbHkgcmVvcmRlciBhbiBpdGVtIHdpdGhpbiB0aGUgc2FtZSBzdGF0dXMuXG4gICAqIEBwYXJhbSBpdGVtSWQgVGhlIElEIG9mIHRoZSBpdGVtIHRvIHJlb3JkZXIgKHVzaW5nIGtleUZpZWxkKVxuICAgKiBAcGFyYW0gbmV3SW5kZXggVGhlIG5ldyBpbmRleCBwb3NpdGlvbiB3aXRoaW4gdGhlIHNhbWUgc3RhdHVzXG4gICAqIEByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj4gLSB0cnVlIGlmIHRoZSByZW9yZGVyIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGFzeW5jIHJlb3JkZXJJdGVtKGl0ZW1JZDogYW55LCBuZXdJbmRleDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qga2V5RmllbGQgPSB0aGlzLmtleUZpZWxkKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxJdGVtID0gdGhpcy5kYXRhU291cmNlKCkuZmluZCgoaXRlbSkgPT4gaXRlbVtrZXlGaWVsZF0gPT09IGl0ZW1JZCk7XG5cbiAgICBpZiAoIW9yaWdpbmFsSXRlbSkge1xuICAgICAgY29uc29sZS53YXJuKGBBWEthbmJhbjogSXRlbSB3aXRoIGlkIFwiJHtpdGVtSWR9XCIgbm90IGZvdW5kIGluIGRhdGFTb3VyY2UuYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gR2V0IGN1cnJlbnQgc3RhdHVzIGZyb20gZGF0YVNvdXJjZVxuICAgIGNvbnN0IHN0YXR1c0tleUZpZWxkID0gdGhpcy5zdGF0dXNLZXlGaWVsZCgpO1xuICAgIGNvbnN0IHN0YXR1c0tleSA9IG9yaWdpbmFsSXRlbVtzdGF0dXNLZXlGaWVsZF07XG5cbiAgICAvLyBHZXQgY3VycmVudCBpbmRleCBmcm9tIHRoZSBjb21wdXRlZCBpdGVtcyBzdGF0ZSAobW9yZSBhY2N1cmF0ZSB0aGFuIGRhdGFTb3VyY2UgZmllbGQpXG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSB0aGlzLml0ZW1zKCkuZmluZCgoaSkgPT4gaS5pZCA9PT0gaXRlbUlkKTtcbiAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gY3VycmVudEl0ZW0/LmluZGV4ID8/IDA7XG5cbiAgICAvLyBQZXJmb3JtIHRoZSBtb3ZlIChzYW1lIHN0YXR1cywgZGlmZmVyZW50IGluZGV4KVxuICAgIHJldHVybiBhd2FpdCB0aGlzLnBlcmZvcm1Nb3ZlKG9yaWdpbmFsSXRlbSwgc3RhdHVzS2V5LCBzdGF0dXNLZXksIHByZXZpb3VzSW5kZXgsIG5ld0luZGV4LCBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9ncmFtbWF0aWNhbGx5IG1vdmUgYW4gaXRlbSB0byBhIGRpZmZlcmVudCBzdGF0dXMuXG4gICAqIEBwYXJhbSBpdGVtSWQgVGhlIElEIG9mIHRoZSBpdGVtIHRvIG1vdmUgKHVzaW5nIGtleUZpZWxkKVxuICAgKiBAcGFyYW0gdGFyZ2V0U3RhdHVzS2V5IFRoZSB0YXJnZXQgc3RhdHVzIGtleSB0byBtb3ZlIHRoZSBpdGVtIHRvXG4gICAqIEBwYXJhbSB0YXJnZXRJbmRleCBPcHRpb25hbCB0YXJnZXQgaW5kZXggd2l0aGluIHRoZSB0YXJnZXQgc3RhdHVzLiBJZiBub3QgcHJvdmlkZWQsIGl0ZW0gd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZW5kLlxuICAgKiBAcmV0dXJucyBQcm9taXNlPGJvb2xlYW4+IC0gdHJ1ZSBpZiB0aGUgbW92ZSB3YXMgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBhc3luYyBtb3ZlSXRlbVRvU3RhdHVzKGl0ZW1JZDogYW55LCB0YXJnZXRTdGF0dXNLZXk6IGFueSwgdGFyZ2V0SW5kZXg/OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5tb3ZlSXRlbShpdGVtSWQsIHRhcmdldFN0YXR1c0tleSwgdGFyZ2V0SW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcmUgbWV0aG9kIHRoYXQgcGVyZm9ybXMgdGhlIG1vdmUgb3BlcmF0aW9uLCBoYW5kbGVzIHJlLWluZGV4aW5nLCBhbmQgZW1pdHMgZXZlbnRzLlxuICAgKiBUaGlzIGlzIHVzZWQgYnkgYm90aCBkcmFnLWFuZC1kcm9wIG9wZXJhdGlvbnMgYW5kIHByb2dyYW1tYXRpYyBtb3Zlcy5cbiAgICpcbiAgICogQHBhcmFtIG9yaWdpbmFsSXRlbSBUaGUgb3JpZ2luYWwgaXRlbSBmcm9tIGRhdGFTb3VyY2UgdGhhdCBpcyBiZWluZyBtb3ZlZFxuICAgKiBAcGFyYW0gcHJldmlvdXNTdGF0dXNLZXkgVGhlIHN0YXR1cyBrZXkgdGhlIGl0ZW0gaXMgbW92aW5nIGZyb21cbiAgICogQHBhcmFtIGN1cnJlbnRTdGF0dXNLZXkgVGhlIHN0YXR1cyBrZXkgdGhlIGl0ZW0gaXMgbW92aW5nIHRvXG4gICAqIEBwYXJhbSBwcmV2aW91c0luZGV4IFRoZSBpbmRleCB0aGUgaXRlbSBpcyBtb3ZpbmcgZnJvbVxuICAgKiBAcGFyYW0gY3VycmVudEluZGV4IFRoZSBpbmRleCB0aGUgaXRlbSBpcyBtb3ZpbmcgdG9cbiAgICogQHBhcmFtIG5hdGl2ZUV2ZW50IFRoZSBuYXRpdmUgbW91c2UgZXZlbnQgKG51bGwgZm9yIHByb2dyYW1tYXRpYyBtb3ZlcylcbiAgICogQHJldHVybnMgUHJvbWlzZTxib29sZWFuPiAtIHRydWUgaWYgdGhlIG1vdmUgd2FzIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtTW92ZShcbiAgICBvcmlnaW5hbEl0ZW06IGFueSxcbiAgICBwcmV2aW91c1N0YXR1c0tleTogYW55LFxuICAgIGN1cnJlbnRTdGF0dXNLZXk6IGFueSxcbiAgICBwcmV2aW91c0luZGV4OiBudW1iZXIsXG4gICAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gICAgbmF0aXZlRXZlbnQ6IE1vdXNlRXZlbnQgfCBudWxsLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyAtLS0gMS4gRW1pdCBiZWZvcmVEcm9wIGV2ZW50IGFuZCBjaGVjayBpZiBkcm9wIHNob3VsZCBiZSBjYW5jZWxlZCAtLS1cbiAgICBjb25zdCBzaG91bGRQcm9jZWVkID0gYXdhaXQgdGhpcy5lbWl0QmVmb3JlRHJvcEV2ZW50KFxuICAgICAgb3JpZ2luYWxJdGVtLFxuICAgICAgcHJldmlvdXNTdGF0dXNLZXksXG4gICAgICBjdXJyZW50U3RhdHVzS2V5LFxuICAgICAgcHJldmlvdXNJbmRleCxcbiAgICAgIGN1cnJlbnRJbmRleCxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICk7XG4gICAgaWYgKCFzaG91bGRQcm9jZWVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gLS0tIDIuIFVzZSB0aGUgYGl0ZW1zYCBjb21wdXRlZCBwcm9wZXJ0eSBhcyB0aGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgb3BlcmF0aW9uIC0tLVxuICAgIC8vIFRoaXMgaXMgdGhlIENSVUNJQUwgRklYLiBXZSBvcGVyYXRlIG9uIHRoZSBkYXRhIGFzIGl0IHdhcyByZW5kZXJlZC5cbiAgICBjb25zdCBjdXJyZW50SXRlbXNTdGF0ZSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLml0ZW1zKCkpO1xuXG4gICAgLy8gLS0tIDMuIFBlcmZvcm0gdGhlIG1vdmUgb3BlcmF0aW9uIGJhc2VkIG9uIHRoZSBzY2VuYXJpbyAtLS1cbiAgICBpZiAocHJldmlvdXNTdGF0dXNLZXkgPT09IGN1cnJlbnRTdGF0dXNLZXkpIHtcbiAgICAgIC8vIC0tLSBTY2VuYXJpbyBBOiBSZW9yZGVyaW5nIHdpdGhpbiB0aGUgc2FtZSBsaXN0IC0tLVxuICAgICAgY29uc3QgbGlzdCA9IGN1cnJlbnRJdGVtc1N0YXRlLmZpbHRlcigoaSkgPT4gaS5zdGF0dXNLZXkgPT09IGN1cnJlbnRTdGF0dXNLZXkpO1xuXG4gICAgICAvLyBSZW1vdmUgZnJvbSB0aGUgb2xkIHBvc2l0aW9uIGFuZCBpbnNlcnQgaW50byB0aGUgbmV3IHBvc2l0aW9uXG4gICAgICBjb25zdCBbbW92ZWRJdGVtXSA9IGxpc3Quc3BsaWNlKHByZXZpb3VzSW5kZXgsIDEpO1xuICAgICAgbGlzdC5zcGxpY2UoY3VycmVudEluZGV4LCAwLCBtb3ZlZEl0ZW0pO1xuXG4gICAgICAvLyBSZS1pbmRleCBvbmx5IHRoaXMgbW9kaWZpZWQgbGlzdFxuICAgICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpZHgpID0+IChpdGVtLmluZGV4ID0gaWR4KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC0tLSBTY2VuYXJpbyBCOiBNb3ZpbmcgdG8gYSBkaWZmZXJlbnQgbGlzdCAtLS1cbiAgICAgIGNvbnN0IHNvdXJjZUxpc3QgPSBjdXJyZW50SXRlbXNTdGF0ZS5maWx0ZXIoKGkpID0+IGkuc3RhdHVzS2V5ID09PSBwcmV2aW91c1N0YXR1c0tleSk7XG4gICAgICBjb25zdCBkZXN0TGlzdCA9IGN1cnJlbnRJdGVtc1N0YXRlLmZpbHRlcigoaSkgPT4gaS5zdGF0dXNLZXkgPT09IGN1cnJlbnRTdGF0dXNLZXkpO1xuXG4gICAgICAvLyBSZW1vdmUgZnJvbSBzb3VyY2UgbGlzdFxuICAgICAgY29uc3QgW21vdmVkSXRlbV0gPSBzb3VyY2VMaXN0LnNwbGljZShwcmV2aW91c0luZGV4LCAxKTtcblxuICAgICAgLy8gVXBkYXRlIGl0cyBzdGF0dXMgYW5kIGFkZCB0byBkZXN0aW5hdGlvbiBsaXN0XG4gICAgICBtb3ZlZEl0ZW0uc3RhdHVzS2V5ID0gY3VycmVudFN0YXR1c0tleTtcbiAgICAgIGRlc3RMaXN0LnNwbGljZShjdXJyZW50SW5kZXgsIDAsIG1vdmVkSXRlbSk7XG5cbiAgICAgIC8vIFJlLWluZGV4IGJvdGggYWZmZWN0ZWQgbGlzdHNcbiAgICAgIHNvdXJjZUxpc3QuZm9yRWFjaCgoaXRlbSwgaWR4KSA9PiAoaXRlbS5pbmRleCA9IGlkeCkpO1xuICAgICAgZGVzdExpc3QuZm9yRWFjaCgoaXRlbSwgaWR4KSA9PiAoaXRlbS5pbmRleCA9IGlkeCkpO1xuICAgIH1cblxuICAgIC8vIC0tLSA0LiBNYXAgdGhlIGNoYW5nZXMgYmFjayB0byBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBvcmlnaW5hbCBkYXRhU291cmNlIC0tLVxuICAgIC8vIFRoaXMgcHJlc2VydmVzIGFueSBleHRyYSBwcm9wZXJ0aWVzIHRoZSB1c2VyIG1pZ2h0IGhhdmUgb24gdGhlaXIgZGF0YSBvYmplY3RzLlxuICAgIGNvbnN0IGtleUZpZWxkID0gdGhpcy5rZXlGaWVsZCgpO1xuICAgIGNvbnN0IHN0YXR1c0tleUZpZWxkID0gdGhpcy5zdGF0dXNLZXlGaWVsZCgpO1xuICAgIGNvbnN0IGluZGV4RmllbGQgPSB0aGlzLmluZGV4RmllbGQoKTtcblxuICAgIGNvbnN0IHVwZGF0ZWRJdGVtc01hcCA9IG5ldyBNYXAoY3VycmVudEl0ZW1zU3RhdGUubWFwKChpKSA9PiBbaS5pZCwgaV0pKTtcbiAgICBjb25zdCBmaW5hbERhdGFTb3VyY2UgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5kYXRhU291cmNlKCkpO1xuXG4gICAgZmluYWxEYXRhU291cmNlLmZvckVhY2goKG9yaWdpbmFsSXRlbSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlZEl0ZW0gPSB1cGRhdGVkSXRlbXNNYXAuZ2V0KG9yaWdpbmFsSXRlbVtrZXlGaWVsZF0pO1xuICAgICAgaWYgKHVwZGF0ZWRJdGVtKSB7XG4gICAgICAgIG9yaWdpbmFsSXRlbVtpbmRleEZpZWxkXSA9IHVwZGF0ZWRJdGVtLmluZGV4O1xuICAgICAgICBvcmlnaW5hbEl0ZW1bc3RhdHVzS2V5RmllbGRdID0gdXBkYXRlZEl0ZW0uc3RhdHVzS2V5O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgbW92ZWRJdGVtSWQgPSBvcmlnaW5hbEl0ZW1ba2V5RmllbGRdO1xuICAgIGNvbnN0IGZpbmFsT3JpZ2luYWxJdGVtRnJvbURhdGFTb3VyY2UgPSBmaW5hbERhdGFTb3VyY2UuZmluZCgoaXRlbSkgPT4gaXRlbVtrZXlGaWVsZF0gPT09IG1vdmVkSXRlbUlkKTtcblxuICAgIC8vIC0tLSA1LiBFbWl0IHRoZSBmaW5hbCwgY29tcHJlaGVuc2l2ZSBldmVudCAtLS1cbiAgICB0aGlzLm9uU29ydENoYW5nZWQuZW1pdCh7XG4gICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICBuYXRpdmVFdmVudDogbmF0aXZlRXZlbnQsXG4gICAgICAvLyBUaGUgb3JpZ2luYWwgZGF0YSBvYmplY3QgdGhhdCB3YXMgbW92ZWRcbiAgICAgIGl0ZW06IGZpbmFsT3JpZ2luYWxJdGVtRnJvbURhdGFTb3VyY2UsXG4gICAgICAvLyBUaGUgY29tcGxldGUsIHByZWNpc2VseSByZS1pbmRleGVkIGRhdGEgc291cmNlLCByZWFkeSBmb3Igc3RhdGUgdXBkYXRlXG4gICAgICBhbGxJdGVtczogZmluYWxEYXRhU291cmNlLFxuICAgICAgY3VycmVudEluZGV4LFxuICAgICAgcHJldmlvdXNJbmRleCxcbiAgICAgIGN1cnJlbnRTdGF0dXNLZXksXG4gICAgICBwcmV2aW91c1N0YXR1c0tleSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXQgYmVmb3JlRHJvcCBldmVudCBhbmQgcmV0dXJuIHdoZXRoZXIgdG8gY29udGludWUgd2l0aCB0aGUgZHJvcCBvcGVyYXRpb24uXG4gICAqIFN1cHBvcnRzIGJvdGggc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBldmVudCBoYW5kbGVycyB2aWEgdGhlIGB3YWl0KClgIG1ldGhvZC5cbiAgICogQHBhcmFtIGl0ZW0gVGhlIG9yaWdpbmFsIGl0ZW0gZnJvbSBkYXRhU291cmNlIHRoYXQgaXMgYmVpbmcgbW92ZWRcbiAgICogQHBhcmFtIHByZXZpb3VzU3RhdHVzS2V5IFRoZSBzdGF0dXMga2V5IHRoZSBpdGVtIGlzIG1vdmluZyBmcm9tXG4gICAqIEBwYXJhbSBjdXJyZW50U3RhdHVzS2V5IFRoZSBzdGF0dXMga2V5IHRoZSBpdGVtIGlzIG1vdmluZyB0b1xuICAgKiBAcGFyYW0gcHJldmlvdXNJbmRleCBUaGUgaW5kZXggdGhlIGl0ZW0gaXMgbW92aW5nIGZyb21cbiAgICogQHBhcmFtIGN1cnJlbnRJbmRleCBUaGUgaW5kZXggdGhlIGl0ZW0gaXMgbW92aW5nIHRvXG4gICAqIEBwYXJhbSBuYXRpdmVFdmVudCBUaGUgbmF0aXZlIG1vdXNlIGV2ZW50IChudWxsIGZvciBwcm9ncmFtbWF0aWMgbW92ZXMpXG4gICAqIEByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj4gLSB0cnVlIGlmIHRoZSBkcm9wIHNob3VsZCBwcm9jZWVkLCBmYWxzZSBpZiBpdCBzaG91bGQgYmUgY2FuY2VsZWRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW1pdEJlZm9yZURyb3BFdmVudChcbiAgICBpdGVtOiBhbnksXG4gICAgcHJldmlvdXNTdGF0dXNLZXk6IGFueSxcbiAgICBjdXJyZW50U3RhdHVzS2V5OiBhbnksXG4gICAgcHJldmlvdXNJbmRleDogbnVtYmVyLFxuICAgIGN1cnJlbnRJbmRleDogbnVtYmVyLFxuICAgIG5hdGl2ZUV2ZW50OiBNb3VzZUV2ZW50IHwgbnVsbCxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgYmVmb3JlRHJvcEV2ZW50OiBBWEthbmJhbkJlZm9yZURyb3BFdmVudCA9IHtcbiAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgaXRlbSxcbiAgICAgIHByZXZpb3VzU3RhdHVzS2V5LFxuICAgICAgY3VycmVudFN0YXR1c0tleSxcbiAgICAgIHByZXZpb3VzSW5kZXgsXG4gICAgICBjdXJyZW50SW5kZXgsXG4gICAgICBjYW5jZWxlZDogZmFsc2UsXG4gICAgfTtcblxuICAgIC8vIEVtaXQgdGhlIGV2ZW50IC0gaGFuZGxlcnMgY2FuIGNhbGwgZXZlbnQud2FpdCgpIHRvIHJlZ2lzdGVyIGFzeW5jIG9wZXJhdGlvbnNcbiAgICB0aGlzLm9uQmVmb3JlRHJvcC5lbWl0KGJlZm9yZURyb3BFdmVudCk7XG5cbiAgICBsZXQgaXNDYW5jZWxlZDtcbiAgICBpZiAodHlwZW9mIGJlZm9yZURyb3BFdmVudC5jYW5jZWxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaXNDYW5jZWxlZCA9IGF3YWl0IGJlZm9yZURyb3BFdmVudC5jYW5jZWxlZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc0NhbmNlbGVkID0gKGJlZm9yZURyb3BFdmVudC5jYW5jZWxlZCB8fCBmYWxzZSkgYXMgYm9vbGVhbjtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzQ2FuY2VsZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SXRlbXNCeUlkKGtleTogYW55KTogQVhLYW5iYW5JdGVtW10ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zKCkuZmlsdGVyKChlKSA9PiBlLnN0YXR1c0tleSA9PT0ga2V5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRPcmlnaW5hbEl0ZW1zQnlJZChrZXk6IGFueSk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlKCkuZmlsdGVyKChlKSA9PiBlW3RoaXMuc3RhdHVzS2V5RmllbGQoKV0gPT09IGtleSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RyaW5naWZ5KHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IEFYS2FuYmFuSXRlbSkge1xuICAgIGNvbnN0IG9yaWdpbmFsSXRlbUZyb21EYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlKCkuZmluZChcbiAgICAgIChvcmlnaW5hbEl0ZW0pID0+IG9yaWdpbmFsSXRlbVt0aGlzLmtleUZpZWxkKCldID09PSBpdGVtLmlkLFxuICAgICk7XG4gICAgdGhpcy5vbkFjdGlvbkNsaWNrLmVtaXQoeyBpdGVtOiBvcmlnaW5hbEl0ZW1Gcm9tRGF0YVNvdXJjZSwgbmF0aXZlRXZlbnQ6IGV2ZW50LCBzZW5kZXI6IHRoaXMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IEFYS2FuYmFuSXRlbSkge1xuICAgIGNvbnN0IG9yaWdpbmFsSXRlbUZyb21EYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlKCkuZmluZChcbiAgICAgIChvcmlnaW5hbEl0ZW0pID0+IG9yaWdpbmFsSXRlbVt0aGlzLmtleUZpZWxkKCldID09PSBpdGVtLmlkLFxuICAgICk7XG4gICAgdGhpcy5vbkl0ZW1DbGljay5lbWl0KHsgaXRlbTogb3JpZ2luYWxJdGVtRnJvbURhdGFTb3VyY2UsIG5hdGl2ZUV2ZW50OiBldmVudCwgc2VuZGVyOiB0aGlzIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZURibENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBBWEthbmJhbkl0ZW0pIHtcbiAgICBjb25zdCBvcmlnaW5hbEl0ZW1Gcm9tRGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZSgpLmZpbmQoXG4gICAgICAob3JpZ2luYWxJdGVtKSA9PiBvcmlnaW5hbEl0ZW1bdGhpcy5rZXlGaWVsZCgpXSA9PT0gaXRlbS5pZCxcbiAgICApO1xuICAgIHRoaXMub25JdGVtRGJsQ2xpY2suZW1pdCh7IGl0ZW06IG9yaWdpbmFsSXRlbUZyb21EYXRhU291cmNlLCBuYXRpdmVFdmVudDogZXZlbnQsIHNlbmRlcjogdGhpcyB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVSaWdodENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBBWEthbmJhbkl0ZW0pIHtcbiAgICBjb25zdCBvcmlnaW5hbEl0ZW1Gcm9tRGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZSgpLmZpbmQoXG4gICAgICAob3JpZ2luYWxJdGVtKSA9PiBvcmlnaW5hbEl0ZW1bdGhpcy5rZXlGaWVsZCgpXSA9PT0gaXRlbS5pZCxcbiAgICApO1xuICAgIHRoaXMub25JdGVtUmlnaHRDbGljay5lbWl0KHsgaXRlbTogb3JpZ2luYWxJdGVtRnJvbURhdGFTb3VyY2UsIG5hdGl2ZUV2ZW50OiBldmVudCwgc2VuZGVyOiB0aGlzIH0pO1xuICB9XG59XG4iLCJAZm9yIChzdGF0dXMgb2YgZmlsdGVyZWRTdGF0dXNlcygpOyB0cmFjayBzdGF0dXMua2V5KSB7XG4gIDxkaXYgY2xhc3M9XCJheC1rYW5iYW4tc3RhdHVzIHt7IHN0YXR1cy5jc3NDbGFzcyB9fVwiPlxuICAgIDxheC1oZWFkZXI+XG4gICAgICBAaWYgKGhlYWRlclRlbXBsYXRlKCkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlYWRlclRlbXBsYXRlKClcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogc3RhdHVzIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGF4LXRpdGxlPnt7IHN0YXR1cy50aXRsZSB9fTwvYXgtdGl0bGU+XG4gICAgICB9XG4gICAgPC9heC1oZWFkZXI+XG4gICAgPGF4LWNvbnRlbnQgYXhEcm9wTGlzdCBkcm9wTGlzdEdyb3VwPVwia2FuYmFuXCIgW2lkXT1cInN0cmluZ2lmeShzdGF0dXMua2V5KVwiIChkcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XG4gICAgICBAaWYgKGVtcHR5VGVtcGxhdGUoKSAmJiBnZXRPcmlnaW5hbEl0ZW1zQnlJZChzdGF0dXMua2V5KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5VGVtcGxhdGUoKVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBzdGF0dXMgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cbiAgICAgIEBpZiAoaXRlbVRlbXBsYXRlKCkpIHtcbiAgICAgICAgQGZvciAoaXRlbSBvZiBnZXRPcmlnaW5hbEl0ZW1zQnlJZChzdGF0dXMua2V5KTsgdHJhY2sgaXRlbVtrZXlGaWVsZCgpXSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgW2RyYWdEYXRhXT1cIml0ZW1cIlxuICAgICAgICAgICAgY2xhc3M9XCJ7eyBpdGVtLmNzc0NsYXNzIH19XCJcbiAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgIFtheFRvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgIFtheFRvb2x0aXBDb250ZXh0XT1cIml0ZW1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZURibENsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZVJpZ2h0Q2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgZ2V0SXRlbXNCeUlkKHN0YXR1cy5rZXkpOyB0cmFjayBpdGVtLmlkKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICBbZHJhZ0RhdGFdPVwiaXRlbVwiXG4gICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgY2xhc3M9XCJheC1rYW5iYW4taXRlbSAge3sgaXRlbS5jc3NDbGFzcyB9fVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJgYXgta2FuYmFuLSR7aXRlbS5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgW2F4VG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgIFtheFRvb2x0aXBdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgICAgW2F4VG9vbHRpcENvbnRleHRdPVwiaXRlbVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlRGJsQ2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlUmlnaHRDbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YXgtaGVhZGluZz5cbiAgICAgICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgta2FuYmFuLXRydW5jYXRlXCI+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LWthbmJhbi1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgIDxheC1zdWJ0aXRsZT57eyBpdGVtLmRlc2NyaXB0aW9uIH19PC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvYXgtaGVhZGluZz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQGlmIChjb250ZW50Rm9vdGVyVGVtcGxhdGUoKSkge1xuICAgICAgICA8YXgtZm9vdGVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRGb290ZXJUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogc3RhdHVzIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9heC1mb290ZXI+XG4gICAgICB9XG4gICAgPC9heC1jb250ZW50PlxuICAgIEBpZiAoZm9vdGVyVGVtcGxhdGUoKSkge1xuICAgICAgPGF4LWZvb3Rlcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZvb3RlclRlbXBsYXRlKClcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogc3RhdHVzIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2F4LWZvb3Rlcj5cbiAgICB9XG4gIDwvZGl2PlxufVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMta2FuYmFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9rYW5iYW4vc3JjL2Fjb3JleC1jb21wb25lbnRzLWthbmJhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":";;;;;;;;AAOO,MAAM,iBAAiB,SAAS,WAAW,CAAC;AACnD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACpF,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnG,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtF,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7F,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7F,QAAQ,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtG,QAAQ,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtG,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG,QAAQ,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,aAAa,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/G,QAAQ,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvG,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvG,QAAQ,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrH,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,EAAE;AACpC,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,EAAE;AACrC,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,EAAE;AACnC,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,EAAE;AACrC,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,EAAE;AACtC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,EAAE;AACxC,QAAQ,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM;AACpC;AACA,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;AACtD,YAAY,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AAC1D,gBAAgB,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzC,gBAAgB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AAC9C,gBAAgB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AAC9C,gBAAgB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AACpD,gBAAgB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AACpD,gBAAgB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AACtD,gBAAgB,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1D,aAAa,CAAC,CAAC;AACf,YAAY,MAAM,aAAa,GAAG,IAAI,GAAG,EAAE;AAC3C,YAAY,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;AAC5C,gBAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACxD,oBAAoB,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;AACzD,gBAAgB;AAChB,gBAAgB,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5D,YAAY;AACZ,YAAY,MAAM,mBAAmB,GAAG,EAAE;AAC1C,YAAY,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM,EAAE,EAAE;AACxD,gBAAgB,MAAM,qBAAqB,GAAG,EAAE;AAChD,gBAAgB,MAAM,gBAAgB,GAAG,EAAE;AAC3C,gBAAgB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAE;AAC9C,gBAAgB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC1C,oBAAoB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/H,oBAAoB,IAAI,aAAa,EAAE;AACvC,wBAAwB,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AACpD,wBAAwB,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;AACxD,oBAAoB;AACpB,yBAAyB;AACzB,wBAAwB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AACnD,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,IAAI,YAAY,GAAG,CAAC;AACpC,gBAAgB,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE;AACrD,oBAAoB,OAAO,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;AAC3D,wBAAwB,YAAY,EAAE;AACtC,oBAAoB;AACpB,oBAAoB,IAAI,CAAC,KAAK,GAAG,YAAY;AAC7C,oBAAoB,YAAY,EAAE;AAClC,gBAAgB;AAChB,gBAAgB,MAAM,cAAc,GAAG,CAAC,GAAG,qBAAqB,EAAE,GAAG,gBAAgB,CAAC;AACtF,gBAAgB,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;AAChE,gBAAgB,mBAAmB,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC;AAC3D,YAAY;AACZ,YAAY,OAAO,mBAAmB;AACtC,QAAQ,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1D,QAAQ,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5J,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE;AACtB,QAAQ,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,KAAK;AAC/G;AACA,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;AACjE,QAAQ,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1E,QAAQ,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,QAAQ,EAAE;AACrE,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,YAAY,OAAO,CAAC,IAAI,CAAC,yEAAyE,CAAC;AACnG,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,MAAM,0BAA0B,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,qBAAqB,CAAC,EAAE,CAAC;AAC/H,QAAQ,IAAI,CAAC,0BAA0B,EAAE;AACzC,YAAY,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC;AACnE,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,0BAA0B,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC;AAC/I,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE;AACzD,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AACxC,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC;AACxF,QAAQ,IAAI,CAAC,YAAY,EAAE;AAC3B,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC,wBAAwB,EAAE,MAAM,CAAC,0BAA0B,CAAC,CAAC;AACvF,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR;AACA,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AACpD,QAAQ,MAAM,iBAAiB,GAAG,YAAY,CAAC,cAAc,CAAC;AAC9D;AACA,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;AACrE,QAAQ,MAAM,aAAa,GAAG,WAAW,EAAE,KAAK,IAAI,CAAC;AACrD;AACA,QAAQ,IAAI,YAAY,GAAG,WAAW;AACtC,QAAQ,IAAI,YAAY,KAAK,SAAS,EAAE;AACxC,YAAY,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,eAAe,CAAC;AACjG,YAAY,YAAY,GAAG,iBAAiB,CAAC,MAAM;AACnD,QAAQ;AACR;AACA,QAAQ,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC;AAC1H,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE;AACxC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AACxC,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC;AACxF,QAAQ,IAAI,CAAC,YAAY,EAAE;AAC3B,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC,wBAAwB,EAAE,MAAM,CAAC,0BAA0B,CAAC,CAAC;AACvF,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR;AACA,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AACpD,QAAQ,MAAM,SAAS,GAAG,YAAY,CAAC,cAAc,CAAC;AACtD;AACA,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;AACrE,QAAQ,MAAM,aAAa,GAAG,WAAW,EAAE,KAAK,IAAI,CAAC;AACrD;AACA,QAAQ,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC;AACxG,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,gBAAgB,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE;AACjE,QAAQ,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,CAAC;AACxE,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,WAAW,CAAC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE;AACnH;AACA,QAAQ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,CAAC;AACzJ,QAAQ,IAAI,CAAC,aAAa,EAAE;AAC5B,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR;AACA;AACA,QAAQ,MAAM,iBAAiB,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAC/D;AACA,QAAQ,IAAI,iBAAiB,KAAK,gBAAgB,EAAE;AACpD;AACA,YAAY,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,gBAAgB,CAAC;AAC1F;AACA,YAAY,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;AAC7D,YAAY,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC;AACnD;AACA,YAAY,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;AAC3D,QAAQ;AACR,aAAa;AACb;AACA,YAAY,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,iBAAiB,CAAC;AACjG,YAAY,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,gBAAgB,CAAC;AAC9F;AACA,YAAY,MAAM,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;AACnE;AACA,YAAY,SAAS,CAAC,SAAS,GAAG,gBAAgB;AAClD,YAAY,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC;AACvD;AACA,YAAY,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;AACjE,YAAY,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;AAC/D,QAAQ;AACR;AACA;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AACxC,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AACpD,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AAC5C,QAAQ,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAChF,QAAQ,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AAClE,QAAQ,eAAe,CAAC,OAAO,CAAC,CAAC,YAAY,KAAK;AAClD,YAAY,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC3E,YAAY,IAAI,WAAW,EAAE;AAC7B,gBAAgB,YAAY,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,KAAK;AAC5D,gBAAgB,YAAY,CAAC,cAAc,CAAC,GAAG,WAAW,CAAC,SAAS;AACpE,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,QAAQ,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC;AAClD,QAAQ,MAAM,+BAA+B,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,WAAW,CAAC;AAC9G;AACA,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAChC,YAAY,MAAM,EAAE,IAAI;AACxB,YAAY,WAAW,EAAE,WAAW;AACpC;AACA,YAAY,IAAI,EAAE,+BAA+B;AACjD;AACA,YAAY,QAAQ,EAAE,eAAe;AACrC,YAAY,YAAY;AACxB,YAAY,aAAa;AACzB,YAAY,gBAAgB;AAC5B,YAAY,iBAAiB;AAC7B,SAAS,CAAC;AACV,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE;AACnH,QAAQ,MAAM,eAAe,GAAG;AAChC,YAAY,MAAM,EAAE,IAAI;AACxB,YAAY,WAAW;AACvB,YAAY,IAAI;AAChB,YAAY,iBAAiB;AAC7B,YAAY,gBAAgB;AAC5B,YAAY,aAAa;AACzB,YAAY,YAAY;AACxB,YAAY,QAAQ,EAAE,KAAK;AAC3B,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AAC/C,QAAQ,IAAI,UAAU;AACtB,QAAQ,IAAI,OAAO,eAAe,CAAC,QAAQ,KAAK,UAAU,EAAE;AAC5D,YAAY,UAAU,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE;AACzD,QAAQ;AACR,aAAa;AACb,YAAY,UAAU,IAAI,eAAe,CAAC,QAAQ,IAAI,KAAK,CAAC;AAC5D,QAAQ;AACR,QAAQ,OAAO,CAAC,UAAU;AAC1B,IAAI;AACJ,IAAI,YAAY,CAAC,GAAG,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC;AAC9D,IAAI;AACJ,IAAI,oBAAoB,CAAC,GAAG,EAAE;AAC9B,QAAQ,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,GAAG,CAAC;AAChF,IAAI;AACJ,IAAI,SAAS,CAAC,KAAK,EAAE;AACrB,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACpC,IAAI;AACJ,IAAI,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE;AACnC,QAAQ,MAAM,0BAA0B,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;AAC9H,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACvG,IAAI;AACJ,IAAI,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE;AAC7B,QAAQ,MAAM,0BAA0B,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;AAC9H,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACrG,IAAI;AACJ,IAAI,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE;AAChC,QAAQ,MAAM,0BAA0B,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;AAC9H,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACxG,IAAI;AACJ,IAAI,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE;AAClC,QAAQ,MAAM,0BAA0B,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;AAC9H,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1G,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACtL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,qBAAqB,EAAE,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,UAAU,EAAE,uBAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,o3GAAo3G,EAAE,MAAM,EAAE,CAAC,4rIAA4rI,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,yBAAyB,EAAE,kBAAkB,EAAE,0BAA0B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,wBAAwB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,qBAAqB,CAAC,EAAE,OAAO,EAAE,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,8IAA8I,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,mBAAmB,EAAE,WAAW,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/2X;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;AAC5H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;AAC5F,wBAAwB,OAAO;AAC/B,wBAAwB,gBAAgB;AACxC,wBAAwB,eAAe;AACvC,wBAAwB,mBAAmB;AAC3C,wBAAwB,2BAA2B;AACnD,wBAAwB,2BAA2B;AACnD,wBAAwB,wBAAwB;AAChD,wBAAwB,kBAAkB;AAC1C,qBAAqB,EAAE,QAAQ,EAAE,o3GAAo3G,EAAE,MAAM,EAAE,CAAC,4rIAA4rI,CAAC,EAAE;AAC/lP,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,qBAAqB,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;;AChU3pE;AACA;AACA;;;;"}
|
|
1
|
+
{"version":3,"file":"acorex-components-kanban.mjs","sources":["../tmp-esm2022/kanban/lib/kanban.component.js","../tmp-esm2022/kanban/acorex-components-kanban.js"],"sourcesContent":["import { NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropListDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent, AXDecoratorHeadingComponent, AXDecoratorIconComponent, } from '@acorex/components/decorators';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, input, output, ViewEncapsulation } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXKanbanComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.statuses = input([], ...(ngDevMode ? [{ debugName: \"statuses\" }] : []));\n this.itemTemplate = input(...(ngDevMode ? [undefined, { debugName: \"itemTemplate\" }] : []));\n this.dataSource = input(...(ngDevMode ? [undefined, { debugName: \"dataSource\" }] : []));\n this.keyField = input('id', ...(ngDevMode ? [{ debugName: \"keyField\" }] : []));\n this.indexField = input('index', ...(ngDevMode ? [{ debugName: \"indexField\" }] : []));\n this.titleField = input('title', ...(ngDevMode ? [{ debugName: \"titleField\" }] : []));\n this.cssClassField = input('cssClass', ...(ngDevMode ? [{ debugName: \"cssClassField\" }] : []));\n this.priorityField = input('priority', ...(ngDevMode ? [{ debugName: \"priorityField\" }] : []));\n this.statusKeyField = input('statusKey', ...(ngDevMode ? [{ debugName: \"statusKeyField\" }] : []));\n this.descriptionField = input('description', ...(ngDevMode ? [{ debugName: \"descriptionField\" }] : []));\n this.emptyTemplate = input(...(ngDevMode ? [undefined, { debugName: \"emptyTemplate\" }] : []));\n this.headerTemplate = input(...(ngDevMode ? [undefined, { debugName: \"headerTemplate\" }] : []));\n this.footerTemplate = input(...(ngDevMode ? [undefined, { debugName: \"footerTemplate\" }] : []));\n this.contentFooterTemplate = input(...(ngDevMode ? [undefined, { debugName: \"contentFooterTemplate\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\n this.onBeforeDrop = output();\n this.onSortChanged = output();\n this.onItemClick = output();\n this.onActionClick = output();\n this.onItemDblClick = output();\n this.onItemRightClick = output();\n this.items = computed(() => {\n // ... your excellent gap-filling index logic remains the same ...\n const dataSource = this.dataSource() || [];\n const mappedItems = dataSource.map((item) => ({\n id: item[this.keyField()],\n index: item[this.indexField()],\n title: item[this.titleField()],\n cssClass: item[this.cssClassField()],\n priority: item[this.priorityField()],\n statusKey: item[this.statusKeyField()],\n description: item[this.descriptionField()],\n }));\n const itemsByStatus = new Map();\n for (const item of mappedItems) {\n if (!itemsByStatus.has(item.statusKey)) {\n itemsByStatus.set(item.statusKey, []);\n }\n itemsByStatus.get(item.statusKey).push(item);\n }\n const finalProcessedItems = [];\n for (const group of itemsByStatus.values()) {\n const correctlyIndexedItems = [];\n const itemsToBeIndexed = [];\n const takenIndices = new Set();\n for (const item of group) {\n const hasValidIndex = item.index != null && typeof item.index === 'number' && !takenIndices.has(item.index);\n if (hasValidIndex) {\n takenIndices.add(item.index);\n correctlyIndexedItems.push(item);\n }\n else {\n itemsToBeIndexed.push(item);\n }\n }\n let currentIndex = 0;\n for (const item of itemsToBeIndexed) {\n while (takenIndices.has(currentIndex)) {\n currentIndex++;\n }\n item.index = currentIndex;\n currentIndex++;\n }\n const processedGroup = [...correctlyIndexedItems, ...itemsToBeIndexed];\n processedGroup.sort((a, b) => a.index - b.index);\n finalProcessedItems.push(...processedGroup);\n }\n return finalProcessedItems;\n }, ...(ngDevMode ? [{ debugName: \"items\" }] : []));\n this.filteredStatuses = computed(() => this.statuses().sort((a, b) => a.index - b.index), ...(ngDevMode ? [{ debugName: \"filteredStatuses\" }] : []));\n }\n /**\n * Handles a drop operation to reorder items or move them between statuses.\n * It uses the component's current rendered state (`this.items`) as the source\n * of truth, performs precise re-indexing, and emits a comprehensive event with\n * the updated data source.\n *\n * @param event AXDropListDroppedEvent - The drag-and-drop event including indices and container information.\n * @returns Promise<void>\n */\n async drop(event) {\n const { item: droppedItemDirective, currentIndex, previousIndex, container, previousContainer } = event;\n // --- 1. Get identifiers and the item's original data ---\n const currentStatusKey = JSON.parse(container.element.id);\n const previousStatusKey = JSON.parse(previousContainer.element.id);\n const movedItemOriginalData = droppedItemDirective.dragData();\n if (!movedItemOriginalData) {\n console.warn('AXKanban: Dragged item has no [dragData]. Sort event cannot be emitted.');\n return;\n }\n // --- 2. Get the original item from dataSource ---\n const originalItemFromDataSource = this.dataSource().find((item) => item[this.keyField()] === movedItemOriginalData.id);\n if (!originalItemFromDataSource) {\n console.warn('AXKanban: Item not found in dataSource.');\n return;\n }\n // --- 3. Perform the move operation ---\n await this.performMove(originalItemFromDataSource, previousStatusKey, currentStatusKey, previousIndex, currentIndex, event.nativeEvent);\n }\n /**\n * Programmatically move an item to a different status or reorder within the same status.\n * @param itemId The ID of the item to move (using keyField)\n * @param targetStatusKey The target status key to move the item to\n * @param targetIndex Optional target index within the target status. If not provided, item will be appended to the end.\n * @returns Promise<boolean> - true if the move was successful, false otherwise\n */\n async moveItem(itemId, targetStatusKey, targetIndex) {\n const keyField = this.keyField();\n const originalItem = this.dataSource().find((item) => item[keyField] === itemId);\n if (!originalItem) {\n console.warn(`AXKanban: Item with id \"${itemId}\" not found in dataSource.`);\n return false;\n }\n // Get current status from dataSource\n const statusKeyField = this.statusKeyField();\n const previousStatusKey = originalItem[statusKeyField];\n // Get current index from the computed items state (more accurate than dataSource field)\n const currentItem = this.items().find((i) => i.id === itemId);\n const previousIndex = currentItem?.index ?? 0;\n // If target index is not provided, append to the end\n let currentIndex = targetIndex;\n if (currentIndex === undefined) {\n const targetStatusItems = this.items().filter((i) => i.statusKey === targetStatusKey);\n currentIndex = targetStatusItems.length;\n }\n // Perform the move\n return await this.performMove(originalItem, previousStatusKey, targetStatusKey, previousIndex, currentIndex, null);\n }\n /**\n * Programmatically reorder an item within the same status.\n * @param itemId The ID of the item to reorder (using keyField)\n * @param newIndex The new index position within the same status\n * @returns Promise<boolean> - true if the reorder was successful, false otherwise\n */\n async reorderItem(itemId, newIndex) {\n const keyField = this.keyField();\n const originalItem = this.dataSource().find((item) => item[keyField] === itemId);\n if (!originalItem) {\n console.warn(`AXKanban: Item with id \"${itemId}\" not found in dataSource.`);\n return false;\n }\n // Get current status from dataSource\n const statusKeyField = this.statusKeyField();\n const statusKey = originalItem[statusKeyField];\n // Get current index from the computed items state (more accurate than dataSource field)\n const currentItem = this.items().find((i) => i.id === itemId);\n const previousIndex = currentItem?.index ?? 0;\n // Perform the move (same status, different index)\n return await this.performMove(originalItem, statusKey, statusKey, previousIndex, newIndex, null);\n }\n /**\n * Programmatically move an item to a different status.\n * @param itemId The ID of the item to move (using keyField)\n * @param targetStatusKey The target status key to move the item to\n * @param targetIndex Optional target index within the target status. If not provided, item will be appended to the end.\n * @returns Promise<boolean> - true if the move was successful, false otherwise\n */\n async moveItemToStatus(itemId, targetStatusKey, targetIndex) {\n return await this.moveItem(itemId, targetStatusKey, targetIndex);\n }\n /**\n * Core method that performs the move operation, handles re-indexing, and emits events.\n * This is used by both drag-and-drop operations and programmatic moves.\n *\n * @param originalItem The original item from dataSource that is being moved\n * @param previousStatusKey The status key the item is moving from\n * @param currentStatusKey The status key the item is moving to\n * @param previousIndex The index the item is moving from\n * @param currentIndex The index the item is moving to\n * @param nativeEvent The native mouse event (null for programmatic moves)\n * @returns Promise<boolean> - true if the move was successful, false otherwise\n */\n async performMove(originalItem, previousStatusKey, currentStatusKey, previousIndex, currentIndex, nativeEvent) {\n // --- 1. Emit beforeDrop event and check if drop should be canceled ---\n const shouldProceed = await this.emitBeforeDropEvent(originalItem, previousStatusKey, currentStatusKey, previousIndex, currentIndex, nativeEvent);\n if (!shouldProceed) {\n return false;\n }\n // --- 2. Use the `items` computed property as the source of truth for the operation ---\n // This is the CRUCIAL FIX. We operate on the data as it was rendered.\n const currentItemsState = structuredClone(this.items());\n // --- 3. Perform the move operation based on the scenario ---\n if (previousStatusKey === currentStatusKey) {\n // --- Scenario A: Reordering within the same list ---\n const list = currentItemsState.filter((i) => i.statusKey === currentStatusKey);\n // Remove from the old position and insert into the new position\n const [movedItem] = list.splice(previousIndex, 1);\n list.splice(currentIndex, 0, movedItem);\n // Re-index only this modified list\n list.forEach((item, idx) => (item.index = idx));\n }\n else {\n // --- Scenario B: Moving to a different list ---\n const sourceList = currentItemsState.filter((i) => i.statusKey === previousStatusKey);\n const destList = currentItemsState.filter((i) => i.statusKey === currentStatusKey);\n // Remove from source list\n const [movedItem] = sourceList.splice(previousIndex, 1);\n // Update its status and add to destination list\n movedItem.statusKey = currentStatusKey;\n destList.splice(currentIndex, 0, movedItem);\n // Re-index both affected lists\n sourceList.forEach((item, idx) => (item.index = idx));\n destList.forEach((item, idx) => (item.index = idx));\n }\n // --- 4. Map the changes back to a new version of the original dataSource ---\n // This preserves any extra properties the user might have on their data objects.\n const keyField = this.keyField();\n const statusKeyField = this.statusKeyField();\n const indexField = this.indexField();\n const updatedItemsMap = new Map(currentItemsState.map((i) => [i.id, i]));\n const finalDataSource = structuredClone(this.dataSource());\n finalDataSource.forEach((originalItem) => {\n const updatedItem = updatedItemsMap.get(originalItem[keyField]);\n if (updatedItem) {\n originalItem[indexField] = updatedItem.index;\n originalItem[statusKeyField] = updatedItem.statusKey;\n }\n });\n const movedItemId = originalItem[keyField];\n const finalOriginalItemFromDataSource = finalDataSource.find((item) => item[keyField] === movedItemId);\n // --- 5. Emit the final, comprehensive event ---\n this.onSortChanged.emit({\n sender: this,\n nativeEvent: nativeEvent,\n // The original data object that was moved\n item: finalOriginalItemFromDataSource,\n // The complete, precisely re-indexed data source, ready for state update\n allItems: finalDataSource,\n currentIndex,\n previousIndex,\n currentStatusKey,\n previousStatusKey,\n });\n return true;\n }\n /**\n * Emit beforeDrop event and return whether to continue with the drop operation.\n * Supports both synchronous and asynchronous event handlers via the `wait()` method.\n * @param item The original item from dataSource that is being moved\n * @param previousStatusKey The status key the item is moving from\n * @param currentStatusKey The status key the item is moving to\n * @param previousIndex The index the item is moving from\n * @param currentIndex The index the item is moving to\n * @param nativeEvent The native mouse event (null for programmatic moves)\n * @returns Promise<boolean> - true if the drop should proceed, false if it should be canceled\n */\n async emitBeforeDropEvent(item, previousStatusKey, currentStatusKey, previousIndex, currentIndex, nativeEvent) {\n const pendingPromises = [];\n const beforeDropEvent = {\n sender: this,\n nativeEvent,\n item,\n previousStatusKey,\n currentStatusKey,\n previousIndex,\n currentIndex,\n canceled: false,\n wait: (promise) => {\n pendingPromises.push(promise);\n },\n };\n // Emit the event - handlers can call event.wait() to register async operations\n this.onBeforeDrop.emit(beforeDropEvent);\n // Wait for all registered async operations to complete\n if (pendingPromises.length > 0) {\n await Promise.all(pendingPromises);\n }\n // After all async operations complete, check if the drop was canceled\n return !beforeDropEvent.canceled;\n }\n getItemsById(key) {\n return this.items().filter((e) => e.statusKey === key);\n }\n getOriginalItemsById(key) {\n return this.dataSource().filter((e) => e[this.statusKeyField()] === key);\n }\n stringify(value) {\n return JSON.stringify(value);\n }\n handleActionClick(event, item) {\n const originalItemFromDataSource = this.dataSource().find((originalItem) => originalItem[this.keyField()] === item.id);\n this.onActionClick.emit({ item: originalItemFromDataSource, nativeEvent: event, sender: this });\n }\n handleClick(event, item) {\n const originalItemFromDataSource = this.dataSource().find((originalItem) => originalItem[this.keyField()] === item.id);\n this.onItemClick.emit({ item: originalItemFromDataSource, nativeEvent: event, sender: this });\n }\n handleDblClick(event, item) {\n const originalItemFromDataSource = this.dataSource().find((originalItem) => originalItem[this.keyField()] === item.id);\n this.onItemDblClick.emit({ item: originalItemFromDataSource, nativeEvent: event, sender: this });\n }\n handleRightClick(event, item) {\n const originalItemFromDataSource = this.dataSource().find((originalItem) => originalItem[this.keyField()] === item.id);\n this.onItemRightClick.emit({ item: originalItemFromDataSource, nativeEvent: event, sender: this });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXKanbanComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXKanbanComponent, isStandalone: true, selector: \"ax-kanban\", inputs: { hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, statuses: { classPropertyName: \"statuses\", publicName: \"statuses\", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: \"itemTemplate\", publicName: \"itemTemplate\", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: \"dataSource\", publicName: \"dataSource\", isSignal: true, isRequired: false, transformFunction: null }, keyField: { classPropertyName: \"keyField\", publicName: \"keyField\", isSignal: true, isRequired: false, transformFunction: null }, indexField: { classPropertyName: \"indexField\", publicName: \"indexField\", isSignal: true, isRequired: false, transformFunction: null }, titleField: { classPropertyName: \"titleField\", publicName: \"titleField\", isSignal: true, isRequired: false, transformFunction: null }, cssClassField: { classPropertyName: \"cssClassField\", publicName: \"cssClassField\", isSignal: true, isRequired: false, transformFunction: null }, priorityField: { classPropertyName: \"priorityField\", publicName: \"priorityField\", isSignal: true, isRequired: false, transformFunction: null }, statusKeyField: { classPropertyName: \"statusKeyField\", publicName: \"statusKeyField\", isSignal: true, isRequired: false, transformFunction: null }, descriptionField: { classPropertyName: \"descriptionField\", publicName: \"descriptionField\", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: \"emptyTemplate\", publicName: \"emptyTemplate\", isSignal: true, isRequired: false, transformFunction: null }, headerTemplate: { classPropertyName: \"headerTemplate\", publicName: \"headerTemplate\", isSignal: true, isRequired: false, transformFunction: null }, footerTemplate: { classPropertyName: \"footerTemplate\", publicName: \"footerTemplate\", isSignal: true, isRequired: false, transformFunction: null }, contentFooterTemplate: { classPropertyName: \"contentFooterTemplate\", publicName: \"contentFooterTemplate\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onBeforeDrop: \"onBeforeDrop\", onSortChanged: \"onSortChanged\", onItemClick: \"onItemClick\", onActionClick: \"onActionClick\", onItemDblClick: \"onItemDblClick\", onItemRightClick: \"onItemRightClick\" }, usesInheritance: true, ngImport: i0, template: \"@for (status of filteredStatuses(); track status.key) {\\n <div class=\\\"ax-kanban-status {{ status.cssClass }}\\\">\\n <ax-header>\\n @if (headerTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"headerTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n } @else {\\n <ax-title>{{ status.title }}</ax-title>\\n }\\n </ax-header>\\n <ax-content axDropList dropListGroup=\\\"kanban\\\" [id]=\\\"stringify(status.key)\\\" (dropListDropped)=\\\"drop($event)\\\">\\n @if (emptyTemplate() && getOriginalItemsById(status.key).length === 0) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"emptyTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n }\\n @if (itemTemplate()) {\\n @for (item of getOriginalItemsById(status.key); track item[keyField()]) {\\n <div\\n axDrag\\n [dragData]=\\\"item\\\"\\n class=\\\"{{ item.cssClass }}\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [axTooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n [axTooltipContext]=\\\"item\\\"\\n (click)=\\\"handleClick($event, item)\\\"\\n (dblclick)=\\\"handleDblClick($event, item)\\\"\\n (contextmenu)=\\\"handleRightClick($event, item)\\\"\\n >\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: item }\\\"\\n ></ng-container>\\n </div>\\n }\\n } @else {\\n @for (item of getItemsById(status.key); track item.id) {\\n <div\\n axDrag\\n [dragData]=\\\"item\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n class=\\\"ax-kanban-item {{ item.cssClass }}\\\"\\n [ngClass]=\\\"`ax-kanban-${item.priority ?? 'primary'}-periority`\\\"\\n [axTooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n [axTooltipContext]=\\\"item\\\"\\n (click)=\\\"handleClick($event, item)\\\"\\n (dblclick)=\\\"handleDblClick($event, item)\\\"\\n (contextmenu)=\\\"handleRightClick($event, item)\\\"\\n >\\n <ax-heading>\\n <ax-title>\\n <span class=\\\"ax-kanban-truncate\\\">{{ item.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n class=\\\"ax-icon ax-icon-more-horizontal ax-kanban-action-icon\\\"\\n (click)=\\\"handleActionClick($event, item)\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>{{ item.description }}</ax-subtitle>\\n </ax-heading>\\n </div>\\n }\\n }\\n @if (contentFooterTemplate()) {\\n <ax-footer>\\n <ng-container\\n [ngTemplateOutlet]=\\\"contentFooterTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n </ax-footer>\\n }\\n </ax-content>\\n @if (footerTemplate()) {\\n <ax-footer>\\n <ng-container\\n [ngTemplateOutlet]=\\\"footerTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n </ax-footer>\\n }\\n </div>\\n}\\n\", styles: [\".ax-dark ax-kanban{--ax-comp-kanban-item-bg-color: var(--ax-sys-color-surface);--ax-comp-kanban-item-text-color: var(--ax-sys-color-on-surface)}:root{--ax-comp-kanban-gap: 1rem;--ax-comp-kanban-status-gap: .5rem;--ax-comp-kanban-status-min-width: 20rem;--ax-comp-kanban-status-min-height: 30rem;--ax-comp-kanban-status-padding-block: .5rem;--ax-comp-kanban-status-padding-inline: .5rem;--ax-comp-kanban-item-padding-block: .25rem;--ax-comp-kanban-item-padding-inline: .5rem;--ax-comp-kanban-item-indicator-size: .125rem;--ax-comp-kanban-status-bg-color: var(--ax-sys-color-lighter-surface);--ax-comp-kanban-status-text-color: var(--ax-sys-color-on-lighter-surface);--ax-comp-kanban-item-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-kanban-item-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-kanban-primary-periority-color: var(--ax-sys-color-primary-surface);--ax-comp-kanban-highest-periority-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-kanban-high-periority-color: var(--ax-sys-color-danger-surface);--ax-comp-kanban-medium-periority-color: var(--ax-sys-color-warning-surface);--ax-comp-kanban-low-periority-color: var(--ax-sys-color-success-light-surface);--ax-comp-kanban-lowest-periority-color: var(--ax-sys-color-success-lightest-surface)}ax-kanban{display:grid;overflow-x:auto;grid-auto-flow:column;gap:var(--ax-comp-kanban-gap);grid-auto-columns:var(--ax-comp-kanban-status-min-width)}ax-kanban .ax-kanban-status{display:flex;overflow-y:auto;flex-direction:column;gap:var(--ax-comp-kanban-status-gap);border-radius:var(--ax-sys-border-radius);height:var(--ax-comp-kanban-status-min-height);color:rgba(var(--ax-comp-kanban-status-text-color));clip-path:inset(0 round var(--ax-sys-border-radius));background-color:rgba(var(--ax-comp-kanban-status-bg-color))}ax-kanban .ax-kanban-status>ax-header{top:0;z-index:2;position:sticky;background-color:inherit}ax-kanban .ax-kanban-status>ax-header>ax-title{width:100%;display:block;font-weight:600;font-size:1.25rem;text-align:center;padding-block-start:var(--ax-comp-kanban-status-padding-block)}ax-kanban .ax-kanban-status ax-content{flex:1;display:flex;flex-direction:column;gap:var(--ax-comp-kanban-status-gap);padding-inline:var(--ax-comp-kanban-status-padding-inline)}ax-kanban .ax-kanban-status ax-content ax-popover{display:none}ax-kanban .ax-kanban-status ax-content .ax-kanban-item{width:100%;position:relative;box-shadow:0 1px 2px #0000000d;color:rgba(var(--ax-comp-kanban-item-text-color));border-radius:calc(var(--ax-sys-border-radius) / 2);padding-block:var(--ax-comp-kanban-item-padding-block);padding-inline:var(--ax-comp-kanban-item-padding-inline);background-color:rgba(var(--ax-comp-kanban-item-bg-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item:before{content:\\\"\\\";position:absolute;border-radius:9999px;inset-inline-start:.125rem;width:var(--ax-comp-kanban-item-indicator-size);height:calc(100% - var(--ax-comp-kanban-item-padding-inline))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-primary-periority:before{background-color:rgba(var(--ax-comp-kanban-primary-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-highest-periority:before{background-color:rgba(var(--ax-comp-kanban-highest-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-high-periority:before{background-color:rgba(var(--ax-comp-kanban-high-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-medium-periority:before{background-color:rgba(var(--ax-comp-kanban-medium-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-low-periority:before{background-color:rgba(var(--ax-comp-kanban-low-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-lowest-periority:before{background-color:rgba(var(--ax-comp-kanban-lowest-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item>ax-heading>ax-title{display:flex;font-size:1rem;font-weight:500;align-items:center;justify-content:space-between}ax-kanban .ax-kanban-status ax-content .ax-kanban-item>ax-heading>ax-title .ax-kanban-action-icon{cursor:pointer}ax-kanban .ax-kanban-status>ax-footer{bottom:0;z-index:2;position:sticky;background-color:inherit}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"axDrag\", \"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropListDirective, selector: \"[axDropList]\", inputs: [\"axDropList\", \"sortingDisabled\", \"dropListGroup\", \"dropListOrientation\"], outputs: [\"dropListDropped\"], exportAs: [\"axDropList\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"component\", type: AXDecoratorHeadingComponent, selector: \"ax-heading\", inputs: [\"darkMode\", \"color\", \"weight\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltipDisabled\", \"axTooltip\", \"axTooltipContext\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXKanbanComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-kanban', encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n NgTemplateOutlet,\n AXDragDirective,\n AXDropListDirective,\n AXDecoratorGenericComponent,\n AXDecoratorHeadingComponent,\n AXDecoratorIconComponent,\n AXTooltipDirective,\n ], template: \"@for (status of filteredStatuses(); track status.key) {\\n <div class=\\\"ax-kanban-status {{ status.cssClass }}\\\">\\n <ax-header>\\n @if (headerTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"headerTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n } @else {\\n <ax-title>{{ status.title }}</ax-title>\\n }\\n </ax-header>\\n <ax-content axDropList dropListGroup=\\\"kanban\\\" [id]=\\\"stringify(status.key)\\\" (dropListDropped)=\\\"drop($event)\\\">\\n @if (emptyTemplate() && getOriginalItemsById(status.key).length === 0) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"emptyTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n }\\n @if (itemTemplate()) {\\n @for (item of getOriginalItemsById(status.key); track item[keyField()]) {\\n <div\\n axDrag\\n [dragData]=\\\"item\\\"\\n class=\\\"{{ item.cssClass }}\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [axTooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n [axTooltipContext]=\\\"item\\\"\\n (click)=\\\"handleClick($event, item)\\\"\\n (dblclick)=\\\"handleDblClick($event, item)\\\"\\n (contextmenu)=\\\"handleRightClick($event, item)\\\"\\n >\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: item }\\\"\\n ></ng-container>\\n </div>\\n }\\n } @else {\\n @for (item of getItemsById(status.key); track item.id) {\\n <div\\n axDrag\\n [dragData]=\\\"item\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n class=\\\"ax-kanban-item {{ item.cssClass }}\\\"\\n [ngClass]=\\\"`ax-kanban-${item.priority ?? 'primary'}-periority`\\\"\\n [axTooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n [axTooltipContext]=\\\"item\\\"\\n (click)=\\\"handleClick($event, item)\\\"\\n (dblclick)=\\\"handleDblClick($event, item)\\\"\\n (contextmenu)=\\\"handleRightClick($event, item)\\\"\\n >\\n <ax-heading>\\n <ax-title>\\n <span class=\\\"ax-kanban-truncate\\\">{{ item.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n class=\\\"ax-icon ax-icon-more-horizontal ax-kanban-action-icon\\\"\\n (click)=\\\"handleActionClick($event, item)\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>{{ item.description }}</ax-subtitle>\\n </ax-heading>\\n </div>\\n }\\n }\\n @if (contentFooterTemplate()) {\\n <ax-footer>\\n <ng-container\\n [ngTemplateOutlet]=\\\"contentFooterTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n </ax-footer>\\n }\\n </ax-content>\\n @if (footerTemplate()) {\\n <ax-footer>\\n <ng-container\\n [ngTemplateOutlet]=\\\"footerTemplate()\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: status }\\\"\\n ></ng-container>\\n </ax-footer>\\n }\\n </div>\\n}\\n\", styles: [\".ax-dark ax-kanban{--ax-comp-kanban-item-bg-color: var(--ax-sys-color-surface);--ax-comp-kanban-item-text-color: var(--ax-sys-color-on-surface)}:root{--ax-comp-kanban-gap: 1rem;--ax-comp-kanban-status-gap: .5rem;--ax-comp-kanban-status-min-width: 20rem;--ax-comp-kanban-status-min-height: 30rem;--ax-comp-kanban-status-padding-block: .5rem;--ax-comp-kanban-status-padding-inline: .5rem;--ax-comp-kanban-item-padding-block: .25rem;--ax-comp-kanban-item-padding-inline: .5rem;--ax-comp-kanban-item-indicator-size: .125rem;--ax-comp-kanban-status-bg-color: var(--ax-sys-color-lighter-surface);--ax-comp-kanban-status-text-color: var(--ax-sys-color-on-lighter-surface);--ax-comp-kanban-item-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-kanban-item-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-kanban-primary-periority-color: var(--ax-sys-color-primary-surface);--ax-comp-kanban-highest-periority-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-kanban-high-periority-color: var(--ax-sys-color-danger-surface);--ax-comp-kanban-medium-periority-color: var(--ax-sys-color-warning-surface);--ax-comp-kanban-low-periority-color: var(--ax-sys-color-success-light-surface);--ax-comp-kanban-lowest-periority-color: var(--ax-sys-color-success-lightest-surface)}ax-kanban{display:grid;overflow-x:auto;grid-auto-flow:column;gap:var(--ax-comp-kanban-gap);grid-auto-columns:var(--ax-comp-kanban-status-min-width)}ax-kanban .ax-kanban-status{display:flex;overflow-y:auto;flex-direction:column;gap:var(--ax-comp-kanban-status-gap);border-radius:var(--ax-sys-border-radius);height:var(--ax-comp-kanban-status-min-height);color:rgba(var(--ax-comp-kanban-status-text-color));clip-path:inset(0 round var(--ax-sys-border-radius));background-color:rgba(var(--ax-comp-kanban-status-bg-color))}ax-kanban .ax-kanban-status>ax-header{top:0;z-index:2;position:sticky;background-color:inherit}ax-kanban .ax-kanban-status>ax-header>ax-title{width:100%;display:block;font-weight:600;font-size:1.25rem;text-align:center;padding-block-start:var(--ax-comp-kanban-status-padding-block)}ax-kanban .ax-kanban-status ax-content{flex:1;display:flex;flex-direction:column;gap:var(--ax-comp-kanban-status-gap);padding-inline:var(--ax-comp-kanban-status-padding-inline)}ax-kanban .ax-kanban-status ax-content ax-popover{display:none}ax-kanban .ax-kanban-status ax-content .ax-kanban-item{width:100%;position:relative;box-shadow:0 1px 2px #0000000d;color:rgba(var(--ax-comp-kanban-item-text-color));border-radius:calc(var(--ax-sys-border-radius) / 2);padding-block:var(--ax-comp-kanban-item-padding-block);padding-inline:var(--ax-comp-kanban-item-padding-inline);background-color:rgba(var(--ax-comp-kanban-item-bg-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item:before{content:\\\"\\\";position:absolute;border-radius:9999px;inset-inline-start:.125rem;width:var(--ax-comp-kanban-item-indicator-size);height:calc(100% - var(--ax-comp-kanban-item-padding-inline))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-primary-periority:before{background-color:rgba(var(--ax-comp-kanban-primary-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-highest-periority:before{background-color:rgba(var(--ax-comp-kanban-highest-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-high-periority:before{background-color:rgba(var(--ax-comp-kanban-high-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-medium-periority:before{background-color:rgba(var(--ax-comp-kanban-medium-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-low-periority:before{background-color:rgba(var(--ax-comp-kanban-low-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item.ax-kanban-lowest-periority:before{background-color:rgba(var(--ax-comp-kanban-lowest-periority-color))}ax-kanban .ax-kanban-status ax-content .ax-kanban-item>ax-heading>ax-title{display:flex;font-size:1rem;font-weight:500;align-items:center;justify-content:space-between}ax-kanban .ax-kanban-status ax-content .ax-kanban-item>ax-heading>ax-title .ax-kanban-action-icon{cursor:pointer}ax-kanban .ax-kanban-status>ax-footer{bottom:0;z-index:2;position:sticky;background-color:inherit}\\n\"] }]\n }], propDecorators: { hasActions: [{ type: i0.Input, args: [{ isSignal: true, alias: \"hasActions\", required: false }] }], dragStartDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragStartDelay\", required: false }] }], statuses: [{ type: i0.Input, args: [{ isSignal: true, alias: \"statuses\", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"itemTemplate\", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dataSource\", required: false }] }], keyField: [{ type: i0.Input, args: [{ isSignal: true, alias: \"keyField\", required: false }] }], indexField: [{ type: i0.Input, args: [{ isSignal: true, alias: \"indexField\", required: false }] }], titleField: [{ type: i0.Input, args: [{ isSignal: true, alias: \"titleField\", required: false }] }], cssClassField: [{ type: i0.Input, args: [{ isSignal: true, alias: \"cssClassField\", required: false }] }], priorityField: [{ type: i0.Input, args: [{ isSignal: true, alias: \"priorityField\", required: false }] }], statusKeyField: [{ type: i0.Input, args: [{ isSignal: true, alias: \"statusKeyField\", required: false }] }], descriptionField: [{ type: i0.Input, args: [{ isSignal: true, alias: \"descriptionField\", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"emptyTemplate\", required: false }] }], headerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"headerTemplate\", required: false }] }], footerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"footerTemplate\", required: false }] }], contentFooterTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"contentFooterTemplate\", required: false }] }], tooltipTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"tooltipTemplate\", required: false }] }], onBeforeDrop: [{ type: i0.Output, args: [\"onBeforeDrop\"] }], onSortChanged: [{ type: i0.Output, args: [\"onSortChanged\"] }], onItemClick: [{ type: i0.Output, args: [\"onItemClick\"] }], onActionClick: [{ type: i0.Output, args: [\"onActionClick\"] }], onItemDblClick: [{ type: i0.Output, args: [\"onItemDblClick\"] }], onItemRightClick: [{ type: i0.Output, args: [\"onItemRightClick\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FuYmFuLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMva2FuYmFuL3NyYy9saWIva2FuYmFuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMva2FuYmFuL3NyYy9saWIva2FuYmFuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUEwQixNQUFNLHVCQUF1QixDQUFDO0FBQ3JHLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsMkJBQTJCLEVBQzNCLHdCQUF3QixHQUN6QixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFlLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQXlCbkcsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFoQmxEOztRQWlCRSxlQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssc0RBQUMsQ0FBQztRQUMxQixtQkFBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLDBEQUFDLENBQUM7UUFDMUIsYUFBUSxHQUFHLEtBQUssQ0FBbUIsRUFBRSxvREFBQyxDQUFDO1FBQ3ZDLGlCQUFZLEdBQUcsS0FBSyxrRUFBd0IsQ0FBQztRQUM3QyxlQUFVLEdBQUcsS0FBSyxnRUFBMEIsQ0FBQztRQUU3QyxhQUFRLEdBQUcsS0FBSyxDQUFTLElBQUksb0RBQUMsQ0FBQztRQUMvQixlQUFVLEdBQUcsS0FBSyxD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QUUsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRVMsZ0JBQWdCLENBQUMsS0FBaUIsRUFBRSxJQUFrQjtRQUM5RCxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQ3ZELENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FDNUQsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRyxDQUFDOytHQTlYVSxpQkFBaUI7bUdBQWpCLGlCQUFpQixxckZDbEM5QixvM0dBMEZBLG92SURsRUksT0FBTyxvRkFDUCxnQkFBZ0Isb0pBQ2hCLGVBQWUscVVBQ2YsbUJBQW1CLG9NQUNuQiwyQkFBMkIseUxBQzNCLDJCQUEyQixnR0FDM0Isd0JBQXdCLHNFQUN4QixrQkFBa0I7OzRGQUdULGlCQUFpQjtrQkFoQjdCLFNBQVM7K0JBQ0UsV0FBVyxpQkFHTixpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLE9BQU87d0JBQ1AsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsMkJBQTJCO3dCQUMzQiwyQkFBMkI7d0JBQzNCLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3FCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wTGlzdERpcmVjdGl2ZSwgQVhEcm9wTGlzdERyb3BwZWRFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQge1xuICBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQsXG4gIEFYRGVjb3JhdG9ySGVhZGluZ0NvbXBvbmVudCxcbiAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxufSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBvdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhLYW5iYW5CZWZvcmVEcm9wRXZlbnQsXG4gIEFYS2FuYmFuSXRlbSxcbiAgQVhLYW5iYW5Nb3VzZUV2ZW50LFxuICBBWEthbmJhblNvcnRFdmVudCxcbiAgQVhLYW5iYW5TdGF0dXMsXG59IGZyb20gJy4va2FuYmFuLmNsYXNzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgta2FuYmFuJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2thbmJhbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2thbmJhbi5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIEFYRHJhZ0RpcmVjdGl2ZSxcbiAgICBBWERyb3BMaXN0RGlyZWN0aXZlLFxuICAgIEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCxcbiAgICBBWERlY29yYXRvckhlYWRpbmdDb21wb25lbnQsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhLYW5iYW5Db21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIGhhc0FjdGlvbnMgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdTdGFydERlbGF5ID0gaW5wdXQoMCk7XG4gIHN0YXR1c2VzID0gaW5wdXQ8QVhLYW5iYW5TdGF0dXNbXT4oW10pO1xuICBpdGVtVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcbiAgZGF0YVNvdXJjZSA9IGlucHV0PEFYS2FuYmFuSXRlbVtdIHwgYW55W10+KCk7XG5cbiAga2V5RmllbGQgPSBpbnB1dDxzdHJpbmc+KCdpZCcpO1xuICBpbmRleEZpZWxkID0gaW5wdXQ8c3RyaW5nPignaW5kZXgnKTtcbiAgdGl0bGVGaWVsZCA9IGlucHV0PHN0cmluZz4oJ3RpdGxlJyk7XG4gIGNzc0NsYXNzRmllbGQgPSBpbnB1dDxzdHJpbmc+KCdjc3NDbGFzcycpO1xuICBwcmlvcml0eUZpZWxkID0gaW5wdXQ8c3RyaW5nPigncHJpb3JpdHknKTtcbiAgc3RhdHVzS2V5RmllbGQgPSBpbnB1dDxzdHJpbmc+KCdzdGF0dXNLZXknKTtcbiAgZGVzY3JpcHRpb25GaWVsZCA9IGlucHV0PHN0cmluZz4oJ2Rlc2NyaXB0aW9uJyk7XG4gIGVtcHR5VGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcbiAgaGVhZGVyVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcbiAgZm9vdGVyVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcbiAgY29udGVudEZvb3RlclRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG4gIHRvb2x0aXBUZW1wbGF0ZSA9IGlucHV0PHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuXG4gIG9uQmVmb3JlRHJvcCA9IG91dHB1dDxBWEthbmJhbkJlZm9yZURyb3BFdmVudD4oKTtcbiAgb25Tb3J0Q2hhbmdlZCA9IG91dHB1dDxBWEthbmJhblNvcnRFdmVudD4oKTtcbiAgb25JdGVtQ2xpY2sgPSBvdXRwdXQ8QVhLYW5iYW5Nb3VzZUV2ZW50PigpO1xuICBvbkFjdGlvbkNsaWNrID0gb3V0cHV0PEFYS2FuYmFuTW91c2VFdmVudD4oKTtcbiAgb25JdGVtRGJsQ2xpY2sgPSBvdXRwdXQ8QVhLYW5iYW5Nb3VzZUV2ZW50PigpO1xuICBvbkl0ZW1SaWdodENsaWNrID0gb3V0cHV0PEFYS2FuYmFuTW91c2VFdmVudD4oKTtcblxuICBwcm90ZWN0ZWQgaXRlbXMgPSBjb21wdXRlZDxBWEthbmJhbkl0ZW1bXT4oKCkgPT4ge1xuICAgIC8vIC4uLiB5b3VyIGV4Y2VsbGVudCBnYXAtZmlsbGluZyBpbmRleCBsb2dpYyByZW1haW5zIHRoZSBzYW1lIC4uLlxuICAgIGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmRhdGFTb3VyY2UoKSB8fCBbXTtcbiAgICBjb25zdCBtYXBwZWRJdGVtcyA9IGRhdGFTb3VyY2UubWFwPEFYS2FuYmFuSXRlbT4oKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgIGlkOiBpdGVtW3RoaXMua2V5RmllbGQoKV0sXG4gICAgICBpbmRleDogaXRlbVt0aGlzLmluZGV4RmllbGQoKV0sXG4gICAgICB0aXRsZTogaXRlbVt0aGlzLnRpdGxlRmllbGQoKV0sXG4gICAgICBjc3NDbGFzczogaXRlbVt0aGlzLmNzc0NsYXNzRmllbGQoKV0sXG4gICAgICBwcmlvcml0eTogaXRlbVt0aGlzLnByaW9yaXR5RmllbGQoKV0sXG4gICAgICBzdGF0dXNLZXk6IGl0ZW1bdGhpcy5zdGF0dXNLZXlGaWVsZCgpXSxcbiAgICAgIGRlc2NyaXB0aW9uOiBpdGVtW3RoaXMuZGVzY3JpcHRpb25GaWVsZCgpXSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBpdGVtc0J5U3RhdHVzID0gbmV3IE1hcDxhbnksIEFYS2FuYmFuSXRlbVtdPigpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBtYXBwZWRJdGVtcykge1xuICAgICAgaWYgKCFpdGVtc0J5U3RhdHVzLmhhcyhpdGVtLnN0YXR1c0tleSkpIHtcbiAgICAgICAgaXRlbXNCeVN0YXR1cy5zZXQoaXRlbS5zdGF0dXNLZXksIFtdKTtcbiAgICAgIH1cbiAgICAgIGl0ZW1zQnlTdGF0dXMuZ2V0KGl0ZW0uc3RhdHVzS2V5KS5wdXNoKGl0ZW0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmFsUHJvY2Vzc2VkSXRlbXM6IEFYS2FuYmFuSXRlbVtdID0gW107XG4gICAgZm9yIChjb25zdCBncm91cCBvZiBpdGVtc0J5U3RhdHVzLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjb3JyZWN0bHlJbmRleGVkSXRlbXM6IEFYS2FuYmFuSXRlbVtdID0gW107XG4gICAgICBjb25zdCBpdGVtc1RvQmVJbmRleGVkOiBBWEthbmJhbkl0ZW1bXSA9IFtdO1xuICAgICAgY29uc3QgdGFrZW5JbmRpY2VzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXApIHtcbiAgICAgICAgY29uc3QgaGFzVmFsaWRJbmRleCA9IGl0ZW0uaW5kZXggIT0gbnVsbCAmJiB0eXBlb2YgaXRlbS5pbmRleCA9PT0gJ251bWJlcicgJiYgIXRha2VuSW5kaWNlcy5oYXMoaXRlbS5pbmRleCk7XG4gICAgICAgIGlmIChoYXNWYWxpZEluZGV4KSB7XG4gICAgICAgICAgdGFrZW5JbmRpY2VzLmFkZChpdGVtLmluZGV4KTtcbiAgICAgICAgICBjb3JyZWN0bHlJbmRleGVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtc1RvQmVJbmRleGVkLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBjdXJyZW50SW5kZXggPSAwO1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9CZUluZGV4ZWQpIHtcbiAgICAgICAgd2hpbGUgKHRha2VuSW5kaWNlcy5oYXMoY3VycmVudEluZGV4KSkge1xuICAgICAgICAgIGN1cnJlbnRJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0uaW5kZXggPSBjdXJyZW50SW5kZXg7XG4gICAgICAgIGN1cnJlbnRJbmRleCsrO1xuICAgICAgfVxuICAgICAgY29uc3QgcHJvY2Vzc2VkR3JvdXAgPSBbLi4uY29ycmVjdGx5SW5kZXhlZEl0ZW1zLCAuLi5pdGVtc1RvQmVJbmRleGVkXTtcbiAgICAgIHByb2Nlc3NlZEdyb3VwLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcbiAgICAgIGZpbmFsUHJvY2Vzc2VkSXRlbXMucHVzaCguLi5wcm9jZXNzZWRHcm91cCk7XG4gICAgfVxuICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZEl0ZW1zO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgZmlsdGVyZWRTdGF0dXNlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdHVzZXMoKS5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCkpO1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGEgZHJvcCBvcGVyYXRpb24gdG8gcmVvcmRlciBpdGVtcyBvciBtb3ZlIHRoZW0gYmV0d2VlbiBzdGF0dXNlcy5cbiAgICogSXQgdXNlcyB0aGUgY29tcG9uZW50J3MgY3VycmVudCByZW5kZXJlZCBzdGF0ZSAoYHRoaXMuaXRlbXNgKSBhcyB0aGUgc291cmNlXG4gICAqIG9mIHRydXRoLCBwZXJmb3JtcyBwcmVjaXNlIHJlLWluZGV4aW5nLCBhbmQgZW1pdHMgYSBjb21wcmVoZW5zaXZlIGV2ZW50IHdpdGhcbiAgICogdGhlIHVwZGF0ZWQgZGF0YSBzb3VyY2UuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCBBWERyb3BMaXN0RHJvcHBlZEV2ZW50IC0gVGhlIGRyYWctYW5kLWRyb3AgZXZlbnQgaW5jbHVkaW5nIGluZGljZXMgYW5kIGNvbnRhaW5lciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMgUHJvbWlzZTx2b2lkPlxuICAgKi9cbiAgYXN5bmMgZHJvcChldmVudDogQVhEcm9wTGlzdERyb3BwZWRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaXRlbTogZHJvcHBlZEl0ZW1EaXJlY3RpdmUsIGN1cnJlbnRJbmRleCwgcHJldmlvdXNJbmRleCwgY29udGFpbmVyLCBwcmV2aW91c0NvbnRhaW5lciB9ID0gZXZlbnQ7XG5cbiAgICAvLyAtLS0gMS4gR2V0IGlkZW50aWZpZXJzIGFuZCB0aGUgaXRlbSdzIG9yaWdpbmFsIGRhdGEgLS0tXG4gICAgY29uc3QgY3VycmVudFN0YXR1c0tleSA9IEpTT04ucGFyc2UoY29udGFpbmVyLmVsZW1lbnQuaWQpO1xuICAgIGNvbnN0IHByZXZpb3VzU3RhdHVzS2V5ID0gSlNPTi5wYXJzZShwcmV2aW91c0NvbnRhaW5lci5lbGVtZW50LmlkKTtcbiAgICBjb25zdCBtb3ZlZEl0ZW1PcmlnaW5hbERhdGEgPSBkcm9wcGVkSXRlbURpcmVjdGl2ZS5kcmFnRGF0YSgpIGFzIEFYS2FuYmFuSXRlbTtcblxuICAgIGlmICghbW92ZWRJdGVtT3JpZ2luYWxEYXRhKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0FYS2FuYmFuOiBEcmFnZ2VkIGl0ZW0gaGFzIG5vIFtkcmFnRGF0YV0uIFNvcnQgZXZlbnQgY2Fubm90IGJlIGVtaXR0ZWQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gLS0tIDIuIEdldCB0aGUgb3JpZ2luYWwgaXRlbSBmcm9tIGRhdGFTb3VyY2UgLS0tXG4gICAgY29uc3Qgb3JpZ2luYWxJdGVtRnJvbURhdGFTb3VyY2UgPSB0aGlzLmRhdGFTb3VyY2UoKS5maW5kKFxuICAgICAgKGl0ZW0pID0+IGl0ZW1bdGhpcy5rZXlGaWVsZCgpXSA9PT0gbW92ZWRJdGVtT3JpZ2luYWxEYXRhLmlkLFxuICAgICk7XG5cbiAgICBpZiAoIW9yaWdpbmFsSXRlbUZyb21EYXRhU291cmNlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0FYS2FuYmFuOiBJdGVtIG5vdCBmb3VuZCBpbiBkYXRhU291cmNlLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIC0tLSAzLiBQZXJmb3JtIHRoZSBtb3ZlIG9wZXJhdGlvbiAtLS1cbiAgICBhd2FpdCB0aGlzLnBlcmZvcm1Nb3ZlKFxuICAgICAgb3JpZ2luYWxJdGVtRnJvbURhdGFTb3VyY2UsXG4gICAgICBwcmV2aW91c1N0YXR1c0tleSxcbiAgICAgIGN1cnJlbnRTdGF0dXNLZXksXG4gICAgICBwcmV2aW91c0luZGV4LFxuICAgICAgY3VycmVudEluZGV4LFxuICAgICAgZXZlbnQubmF0aXZlRXZlbnQsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9ncmFtbWF0aWNhbGx5IG1vdmUgYW4gaXRlbSB0byBhIGRpZmZlcmVudCBzdGF0dXMgb3IgcmVvcmRlciB3aXRoaW4gdGhlIHNhbWUgc3RhdHVzLlxuICAgKiBAcGFyYW0gaXRlbUlkIFRoZSBJRCBvZiB0aGUgaXRlbSB0byBtb3ZlICh1c2luZyBrZXlGaWVsZClcbiAgICogQHBhcmFtIHRhcmdldFN0YXR1c0tleSBUaGUgdGFyZ2V0IHN0YXR1cyBrZXkgdG8gbW92ZSB0aGUgaXRlbSB0b1xuICAgKiBAcGFyYW0gdGFyZ2V0SW5kZXggT3B0aW9uYWwgdGFyZ2V0IGluZGV4IHdpdGhpbiB0aGUgdGFyZ2V0IHN0YXR1cy4gSWYgbm90IHByb3ZpZGVkLCBpdGVtIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGVuZC5cbiAgICogQHJldHVybnMgUHJvbWlzZTxib29sZWFuPiAtIHRydWUgaWYgdGhlIG1vdmUgd2FzIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgYXN5bmMgbW92ZUl0ZW0oaXRlbUlkOiBhbnksIHRhcmdldFN0YXR1c0tleTogYW55LCB0YXJnZXRJbmRleD86IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGtleUZpZWxkID0gdGhpcy5rZXlGaWVsZCgpO1xuICAgIGNvbnN0IG9yaWdpbmFsSXRlbSA9IHRoaXMuZGF0YVNvdXJjZSgpLmZpbmQoKGl0ZW0pID0+IGl0ZW1ba2V5RmllbGRdID09PSBpdGVtSWQpO1xuXG4gICAgaWYgKCFvcmlnaW5hbEl0ZW0pIHtcbiAgICAgIGNvbnNvbGUud2FybihgQVhLYW5iYW46IEl0ZW0gd2l0aCBpZCBcIiR7aXRlbUlkfVwiIG5vdCBmb3VuZCBpbiBkYXRhU291cmNlLmApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEdldCBjdXJyZW50IHN0YXR1cyBmcm9tIGRhdGFTb3VyY2VcbiAgICBjb25zdCBzdGF0dXNLZXlGaWVsZCA9IHRoaXMuc3RhdHVzS2V5RmllbGQoKTtcbiAgICBjb25zdCBwcmV2aW91c1N0YXR1c0tleSA9IG9yaWdpbmFsSXRlbVtzdGF0dXNLZXlGaWVsZF07XG5cbiAgICAvLyBHZXQgY3VycmVudCBpbmRleCBmcm9tIHRoZSBjb21wdXRlZCBpdGVtcyBzdGF0ZSAobW9yZSBhY2N1cmF0ZSB0aGFuIGRhdGFTb3VyY2UgZmllbGQpXG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSB0aGlzLml0ZW1zKCkuZmluZCgoaSkgPT4gaS5pZCA9PT0gaXRlbUlkKTtcbiAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gY3VycmVudEl0ZW0/LmluZGV4ID8/IDA7XG5cbiAgICAvLyBJZiB0YXJnZXQgaW5kZXggaXMgbm90IHByb3ZpZGVkLCBhcHBlbmQgdG8gdGhlIGVuZFxuICAgIGxldCBjdXJyZW50SW5kZXggPSB0YXJnZXRJbmRleDtcbiAgICBpZiAoY3VycmVudEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHRhcmdldFN0YXR1c0l0ZW1zID0gdGhpcy5pdGVtcygpLmZpbHRlcigoaSkgPT4gaS5zdGF0dXNLZXkgPT09IHRhcmdldFN0YXR1c0tleSk7XG4gICAgICBjdXJyZW50SW5kZXggPSB0YXJnZXRTdGF0dXNJdGVtcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSB0aGUgbW92ZVxuICAgIHJldHVybiBhd2FpdCB0aGlzLnBlcmZvcm1Nb3ZlKG9yaWdpbmFsSXRlbSwgcHJldmlvdXNTdGF0dXNLZXksIHRhcmdldFN0YXR1c0tleSwgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4LCBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9ncmFtbWF0aWNhbGx5IHJlb3JkZXIgYW4gaXRlbSB3aXRoaW4gdGhlIHNhbWUgc3RhdHVzLlxuICAgKiBAcGFyYW0gaXRlbUlkIFRoZSBJRCBvZiB0aGUgaXRlbSB0byByZW9yZGVyICh1c2luZyBrZXlGaWVsZClcbiAgICogQHBhcmFtIG5ld0luZGV4IFRoZSBuZXcgaW5kZXggcG9zaXRpb24gd2l0aGluIHRoZSBzYW1lIHN0YXR1c1xuICAgKiBAcmV0dXJucyBQcm9taXNlPGJvb2xlYW4+IC0gdHJ1ZSBpZiB0aGUgcmVvcmRlciB3YXMgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBhc3luYyByZW9yZGVySXRlbShpdGVtSWQ6IGFueSwgbmV3SW5kZXg6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGtleUZpZWxkID0gdGhpcy5rZXlGaWVsZCgpO1xuICAgIGNvbnN0IG9yaWdpbmFsSXRlbSA9IHRoaXMuZGF0YVNvdXJjZSgpLmZpbmQoKGl0ZW0pID0+IGl0ZW1ba2V5RmllbGRdID09PSBpdGVtSWQpO1xuXG4gICAgaWYgKCFvcmlnaW5hbEl0ZW0pIHtcbiAgICAgIGNvbnNvbGUud2FybihgQVhLYW5iYW46IEl0ZW0gd2l0aCBpZCBcIiR7aXRlbUlkfVwiIG5vdCBmb3VuZCBpbiBkYXRhU291cmNlLmApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEdldCBjdXJyZW50IHN0YXR1cyBmcm9tIGRhdGFTb3VyY2VcbiAgICBjb25zdCBzdGF0dXNLZXlGaWVsZCA9IHRoaXMuc3RhdHVzS2V5RmllbGQoKTtcbiAgICBjb25zdCBzdGF0dXNLZXkgPSBvcmlnaW5hbEl0ZW1bc3RhdHVzS2V5RmllbGRdO1xuXG4gICAgLy8gR2V0IGN1cnJlbnQgaW5kZXggZnJvbSB0aGUgY29tcHV0ZWQgaXRlbXMgc3RhdGUgKG1vcmUgYWNjdXJhdGUgdGhhbiBkYXRhU291cmNlIGZpZWxkKVxuICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5pdGVtcygpLmZpbmQoKGkpID0+IGkuaWQgPT09IGl0ZW1JZCk7XG4gICAgY29uc3QgcHJldmlvdXNJbmRleCA9IGN1cnJlbnRJdGVtPy5pbmRleCA/PyAwO1xuXG4gICAgLy8gUGVyZm9ybSB0aGUgbW92ZSAoc2FtZSBzdGF0dXMsIGRpZmZlcmVudCBpbmRleClcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wZXJmb3JtTW92ZShvcmlnaW5hbEl0ZW0sIHN0YXR1c0tleSwgc3RhdHVzS2V5LCBwcmV2aW91c0luZGV4LCBuZXdJbmRleCwgbnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvZ3JhbW1hdGljYWxseSBtb3ZlIGFuIGl0ZW0gdG8gYSBkaWZmZXJlbnQgc3RhdHVzLlxuICAgKiBAcGFyYW0gaXRlbUlkIFRoZSBJRCBvZiB0aGUgaXRlbSB0byBtb3ZlICh1c2luZyBrZXlGaWVsZClcbiAgICogQHBhcmFtIHRhcmdldFN0YXR1c0tleSBUaGUgdGFyZ2V0IHN0YXR1cyBrZXkgdG8gbW92ZSB0aGUgaXRlbSB0b1xuICAgKiBAcGFyYW0gdGFyZ2V0SW5kZXggT3B0aW9uYWwgdGFyZ2V0IGluZGV4IHdpdGhpbiB0aGUgdGFyZ2V0IHN0YXR1cy4gSWYgbm90IHByb3ZpZGVkLCBpdGVtIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGVuZC5cbiAgICogQHJldHVybnMgUHJvbWlzZTxib29sZWFuPiAtIHRydWUgaWYgdGhlIG1vdmUgd2FzIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgYXN5bmMgbW92ZUl0ZW1Ub1N0YXR1cyhpdGVtSWQ6IGFueSwgdGFyZ2V0U3RhdHVzS2V5OiBhbnksIHRhcmdldEluZGV4PzogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubW92ZUl0ZW0oaXRlbUlkLCB0YXJnZXRTdGF0dXNLZXksIHRhcmdldEluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3JlIG1ldGhvZCB0aGF0IHBlcmZvcm1zIHRoZSBtb3ZlIG9wZXJhdGlvbiwgaGFuZGxlcyByZS1pbmRleGluZywgYW5kIGVtaXRzIGV2ZW50cy5cbiAgICogVGhpcyBpcyB1c2VkIGJ5IGJvdGggZHJhZy1hbmQtZHJvcCBvcGVyYXRpb25zIGFuZCBwcm9ncmFtbWF0aWMgbW92ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBvcmlnaW5hbEl0ZW0gVGhlIG9yaWdpbmFsIGl0ZW0gZnJvbSBkYXRhU291cmNlIHRoYXQgaXMgYmVpbmcgbW92ZWRcbiAgICogQHBhcmFtIHByZXZpb3VzU3RhdHVzS2V5IFRoZSBzdGF0dXMga2V5IHRoZSBpdGVtIGlzIG1vdmluZyBmcm9tXG4gICAqIEBwYXJhbSBjdXJyZW50U3RhdHVzS2V5IFRoZSBzdGF0dXMga2V5IHRoZSBpdGVtIGlzIG1vdmluZyB0b1xuICAgKiBAcGFyYW0gcHJldmlvdXNJbmRleCBUaGUgaW5kZXggdGhlIGl0ZW0gaXMgbW92aW5nIGZyb21cbiAgICogQHBhcmFtIGN1cnJlbnRJbmRleCBUaGUgaW5kZXggdGhlIGl0ZW0gaXMgbW92aW5nIHRvXG4gICAqIEBwYXJhbSBuYXRpdmVFdmVudCBUaGUgbmF0aXZlIG1vdXNlIGV2ZW50IChudWxsIGZvciBwcm9ncmFtbWF0aWMgbW92ZXMpXG4gICAqIEByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj4gLSB0cnVlIGlmIHRoZSBtb3ZlIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGVyZm9ybU1vdmUoXG4gICAgb3JpZ2luYWxJdGVtOiBhbnksXG4gICAgcHJldmlvdXNTdGF0dXNLZXk6IGFueSxcbiAgICBjdXJyZW50U3RhdHVzS2V5OiBhbnksXG4gICAgcHJldmlvdXNJbmRleDogbnVtYmVyLFxuICAgIGN1cnJlbnRJbmRleDogbnVtYmVyLFxuICAgIG5hdGl2ZUV2ZW50OiBNb3VzZUV2ZW50IHwgbnVsbCxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gLS0tIDEuIEVtaXQgYmVmb3JlRHJvcCBldmVudCBhbmQgY2hlY2sgaWYgZHJvcCBzaG91bGQgYmUgY2FuY2VsZWQgLS0tXG4gICAgY29uc3Qgc2hvdWxkUHJvY2VlZCA9IGF3YWl0IHRoaXMuZW1pdEJlZm9yZURyb3BFdmVudChcbiAgICAgIG9yaWdpbmFsSXRlbSxcbiAgICAgIHByZXZpb3VzU3RhdHVzS2V5LFxuICAgICAgY3VycmVudFN0YXR1c0tleSxcbiAgICAgIHByZXZpb3VzSW5kZXgsXG4gICAgICBjdXJyZW50SW5kZXgsXG4gICAgICBuYXRpdmVFdmVudCxcbiAgICApO1xuICAgIGlmICghc2hvdWxkUHJvY2VlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIC0tLSAyLiBVc2UgdGhlIGBpdGVtc2AgY29tcHV0ZWQgcHJvcGVydHkgYXMgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIG9wZXJhdGlvbiAtLS1cbiAgICAvLyBUaGlzIGlzIHRoZSBDUlVDSUFMIEZJWC4gV2Ugb3BlcmF0ZSBvbiB0aGUgZGF0YSBhcyBpdCB3YXMgcmVuZGVyZWQuXG4gICAgY29uc3QgY3VycmVudEl0ZW1zU3RhdGUgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5pdGVtcygpKTtcblxuICAgIC8vIC0tLSAzLiBQZXJmb3JtIHRoZSBtb3ZlIG9wZXJhdGlvbiBiYXNlZCBvbiB0aGUgc2NlbmFyaW8gLS0tXG4gICAgaWYgKHByZXZpb3VzU3RhdHVzS2V5ID09PSBjdXJyZW50U3RhdHVzS2V5KSB7XG4gICAgICAvLyAtLS0gU2NlbmFyaW8gQTogUmVvcmRlcmluZyB3aXRoaW4gdGhlIHNhbWUgbGlzdCAtLS1cbiAgICAgIGNvbnN0IGxpc3QgPSBjdXJyZW50SXRlbXNTdGF0ZS5maWx0ZXIoKGkpID0+IGkuc3RhdHVzS2V5ID09PSBjdXJyZW50U3RhdHVzS2V5KTtcblxuICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIG9sZCBwb3NpdGlvbiBhbmQgaW5zZXJ0IGludG8gdGhlIG5ldyBwb3NpdGlvblxuICAgICAgY29uc3QgW21vdmVkSXRlbV0gPSBsaXN0LnNwbGljZShwcmV2aW91c0luZGV4LCAxKTtcbiAgICAgIGxpc3Quc3BsaWNlKGN1cnJlbnRJbmRleCwgMCwgbW92ZWRJdGVtKTtcblxuICAgICAgLy8gUmUtaW5kZXggb25seSB0aGlzIG1vZGlmaWVkIGxpc3RcbiAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSwgaWR4KSA9PiAoaXRlbS5pbmRleCA9IGlkeCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtLS0gU2NlbmFyaW8gQjogTW92aW5nIHRvIGEgZGlmZmVyZW50IGxpc3QgLS0tXG4gICAgICBjb25zdCBzb3VyY2VMaXN0ID0gY3VycmVudEl0ZW1zU3RhdGUuZmlsdGVyKChpKSA9PiBpLnN0YXR1c0tleSA9PT0gcHJldmlvdXNTdGF0dXNLZXkpO1xuICAgICAgY29uc3QgZGVzdExpc3QgPSBjdXJyZW50SXRlbXNTdGF0ZS5maWx0ZXIoKGkpID0+IGkuc3RhdHVzS2V5ID09PSBjdXJyZW50U3RhdHVzS2V5KTtcblxuICAgICAgLy8gUmVtb3ZlIGZyb20gc291cmNlIGxpc3RcbiAgICAgIGNvbnN0IFttb3ZlZEl0ZW1dID0gc291cmNlTGlzdC5zcGxpY2UocHJldmlvdXNJbmRleCwgMSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBpdHMgc3RhdHVzIGFuZCBhZGQgdG8gZGVzdGluYXRpb24gbGlzdFxuICAgICAgbW92ZWRJdGVtLnN0YXR1c0tleSA9IGN1cnJlbnRTdGF0dXNLZXk7XG4gICAgICBkZXN0TGlzdC5zcGxpY2UoY3VycmVudEluZGV4LCAwLCBtb3ZlZEl0ZW0pO1xuXG4gICAgICAvLyBSZS1pbmRleCBib3RoIGFmZmVjdGVkIGxpc3RzXG4gICAgICBzb3VyY2VMaXN0LmZvckVhY2goKGl0ZW0sIGlkeCkgPT4gKGl0ZW0uaW5kZXggPSBpZHgpKTtcbiAgICAgIGRlc3RMaXN0LmZvckVhY2goKGl0ZW0sIGlkeCkgPT4gKGl0ZW0uaW5kZXggPSBpZHgpKTtcbiAgICB9XG5cbiAgICAvLyAtLS0gNC4gTWFwIHRoZSBjaGFuZ2VzIGJhY2sgdG8gYSBuZXcgdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgZGF0YVNvdXJjZSAtLS1cbiAgICAvLyBUaGlzIHByZXNlcnZlcyBhbnkgZXh0cmEgcHJvcGVydGllcyB0aGUgdXNlciBtaWdodCBoYXZlIG9uIHRoZWlyIGRhdGEgb2JqZWN0cy5cbiAgICBjb25zdCBrZXlGaWVsZCA9IHRoaXMua2V5RmllbGQoKTtcbiAgICBjb25zdCBzdGF0dXNLZXlGaWVsZCA9IHRoaXMuc3RhdHVzS2V5RmllbGQoKTtcbiAgICBjb25zdCBpbmRleEZpZWxkID0gdGhpcy5pbmRleEZpZWxkKCk7XG5cbiAgICBjb25zdCB1cGRhdGVkSXRlbXNNYXAgPSBuZXcgTWFwKGN1cnJlbnRJdGVtc1N0YXRlLm1hcCgoaSkgPT4gW2kuaWQsIGldKSk7XG4gICAgY29uc3QgZmluYWxEYXRhU291cmNlID0gc3RydWN0dXJlZENsb25lKHRoaXMuZGF0YVNvdXJjZSgpKTtcblxuICAgIGZpbmFsRGF0YVNvdXJjZS5mb3JFYWNoKChvcmlnaW5hbEl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRJdGVtID0gdXBkYXRlZEl0ZW1zTWFwLmdldChvcmlnaW5hbEl0ZW1ba2V5RmllbGRdKTtcbiAgICAgIGlmICh1cGRhdGVkSXRlbSkge1xuICAgICAgICBvcmlnaW5hbEl0ZW1baW5kZXhGaWVsZF0gPSB1cGRhdGVkSXRlbS5pbmRleDtcbiAgICAgICAgb3JpZ2luYWxJdGVtW3N0YXR1c0tleUZpZWxkXSA9IHVwZGF0ZWRJdGVtLnN0YXR1c0tleTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG1vdmVkSXRlbUlkID0gb3JpZ2luYWxJdGVtW2tleUZpZWxkXTtcbiAgICBjb25zdCBmaW5hbE9yaWdpbmFsSXRlbUZyb21EYXRhU291cmNlID0gZmluYWxEYXRhU291cmNlLmZpbmQoKGl0ZW0pID0+IGl0ZW1ba2V5RmllbGRdID09PSBtb3ZlZEl0ZW1JZCk7XG5cbiAgICAvLyAtLS0gNS4gRW1pdCB0aGUgZmluYWwsIGNvbXByZWhlbnNpdmUgZXZlbnQgLS0tXG4gICAgdGhpcy5vblNvcnRDaGFuZ2VkLmVtaXQoe1xuICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgbmF0aXZlRXZlbnQ6IG5hdGl2ZUV2ZW50LFxuICAgICAgLy8gVGhlIG9yaWdpbmFsIGRhdGEgb2JqZWN0IHRoYXQgd2FzIG1vdmVkXG4gICAgICBpdGVtOiBmaW5hbE9yaWdpbmFsSXRlbUZyb21EYXRhU291cmNlLFxuICAgICAgLy8gVGhlIGNvbXBsZXRlLCBwcmVjaXNlbHkgcmUtaW5kZXhlZCBkYXRhIHNvdXJjZSwgcmVhZHkgZm9yIHN0YXRlIHVwZGF0ZVxuICAgICAgYWxsSXRlbXM6IGZpbmFsRGF0YVNvdXJjZSxcbiAgICAgIGN1cnJlbnRJbmRleCxcbiAgICAgIHByZXZpb3VzSW5kZXgsXG4gICAgICBjdXJyZW50U3RhdHVzS2V5LFxuICAgICAgcHJldmlvdXNTdGF0dXNLZXksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0IGJlZm9yZURyb3AgZXZlbnQgYW5kIHJldHVybiB3aGV0aGVyIHRvIGNvbnRpbnVlIHdpdGggdGhlIGRyb3Agb3BlcmF0aW9uLlxuICAgKiBTdXBwb3J0cyBib3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgZXZlbnQgaGFuZGxlcnMgdmlhIHRoZSBgd2FpdCgpYCBtZXRob2QuXG4gICAqIEBwYXJhbSBpdGVtIFRoZSBvcmlnaW5hbCBpdGVtIGZyb20gZGF0YVNvdXJjZSB0aGF0IGlzIGJlaW5nIG1vdmVkXG4gICAqIEBwYXJhbSBwcmV2aW91c1N0YXR1c0tleSBUaGUgc3RhdHVzIGtleSB0aGUgaXRlbSBpcyBtb3ZpbmcgZnJvbVxuICAgKiBAcGFyYW0gY3VycmVudFN0YXR1c0tleSBUaGUgc3RhdHVzIGtleSB0aGUgaXRlbSBpcyBtb3ZpbmcgdG9cbiAgICogQHBhcmFtIHByZXZpb3VzSW5kZXggVGhlIGluZGV4IHRoZSBpdGVtIGlzIG1vdmluZyBmcm9tXG4gICAqIEBwYXJhbSBjdXJyZW50SW5kZXggVGhlIGluZGV4IHRoZSBpdGVtIGlzIG1vdmluZyB0b1xuICAgKiBAcGFyYW0gbmF0aXZlRXZlbnQgVGhlIG5hdGl2ZSBtb3VzZSBldmVudCAobnVsbCBmb3IgcHJvZ3JhbW1hdGljIG1vdmVzKVxuICAgKiBAcmV0dXJucyBQcm9taXNlPGJvb2xlYW4+IC0gdHJ1ZSBpZiB0aGUgZHJvcCBzaG91bGQgcHJvY2VlZCwgZmFsc2UgaWYgaXQgc2hvdWxkIGJlIGNhbmNlbGVkXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVtaXRCZWZvcmVEcm9wRXZlbnQoXG4gICAgaXRlbTogYW55LFxuICAgIHByZXZpb3VzU3RhdHVzS2V5OiBhbnksXG4gICAgY3VycmVudFN0YXR1c0tleTogYW55LFxuICAgIHByZXZpb3VzSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50SW5kZXg6IG51bWJlcixcbiAgICBuYXRpdmVFdmVudDogTW91c2VFdmVudCB8IG51bGwsXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHBlbmRpbmdQcm9taXNlczogUHJvbWlzZTxhbnk+W10gPSBbXTtcblxuICAgIGNvbnN0IGJlZm9yZURyb3BFdmVudDogQVhLYW5iYW5CZWZvcmVEcm9wRXZlbnQgPSB7XG4gICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICBuYXRpdmVFdmVudCxcbiAgICAgIGl0ZW0sXG4gICAgICBwcmV2aW91c1N0YXR1c0tleSxcbiAgICAgIGN1cnJlbnRTdGF0dXNLZXksXG4gICAgICBwcmV2aW91c0luZGV4LFxuICAgICAgY3VycmVudEluZGV4LFxuICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxuICAgICAgd2FpdDogKHByb21pc2U6IFByb21pc2U8YW55PikgPT4ge1xuICAgICAgICBwZW5kaW5nUHJvbWlzZXMucHVzaChwcm9taXNlKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIEVtaXQgdGhlIGV2ZW50IC0gaGFuZGxlcnMgY2FuIGNhbGwgZXZlbnQud2FpdCgpIHRvIHJlZ2lzdGVyIGFzeW5jIG9wZXJhdGlvbnNcbiAgICB0aGlzLm9uQmVmb3JlRHJvcC5lbWl0KGJlZm9yZURyb3BFdmVudCk7XG5cbiAgICAvLyBXYWl0IGZvciBhbGwgcmVnaXN0ZXJlZCBhc3luYyBvcGVyYXRpb25zIHRvIGNvbXBsZXRlXG4gICAgaWYgKHBlbmRpbmdQcm9taXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChwZW5kaW5nUHJvbWlzZXMpO1xuICAgIH1cblxuICAgIC8vIEFmdGVyIGFsbCBhc3luYyBvcGVyYXRpb25zIGNvbXBsZXRlLCBjaGVjayBpZiB0aGUgZHJvcCB3YXMgY2FuY2VsZWRcbiAgICByZXR1cm4gIWJlZm9yZURyb3BFdmVudC5jYW5jZWxlZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJdGVtc0J5SWQoa2V5OiBhbnkpOiBBWEthbmJhbkl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMoKS5maWx0ZXIoKGUpID0+IGUuc3RhdHVzS2V5ID09PSBrZXkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE9yaWdpbmFsSXRlbXNCeUlkKGtleTogYW55KTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UoKS5maWx0ZXIoKGUpID0+IGVbdGhpcy5zdGF0dXNLZXlGaWVsZCgpXSA9PT0ga2V5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdHJpbmdpZnkodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVBY3Rpb25DbGljayhldmVudDogTW91c2VFdmVudCwgaXRlbTogQVhLYW5iYW5JdGVtKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxJdGVtRnJvbURhdGFTb3VyY2UgPSB0aGlzLmRhdGFTb3VyY2UoKS5maW5kKFxuICAgICAgKG9yaWdpbmFsSXRlbSkgPT4gb3JpZ2luYWxJdGVtW3RoaXMua2V5RmllbGQoKV0gPT09IGl0ZW0uaWQsXG4gICAgKTtcbiAgICB0aGlzLm9uQWN0aW9uQ2xpY2suZW1pdCh7IGl0ZW06IG9yaWdpbmFsSXRlbUZyb21EYXRhU291cmNlLCBuYXRpdmVFdmVudDogZXZlbnQsIHNlbmRlcjogdGhpcyB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVDbGljayhldmVudDogTW91c2VFdmVudCwgaXRlbTogQVhLYW5iYW5JdGVtKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxJdGVtRnJvbURhdGFTb3VyY2UgPSB0aGlzLmRhdGFTb3VyY2UoKS5maW5kKFxuICAgICAgKG9yaWdpbmFsSXRlbSkgPT4gb3JpZ2luYWxJdGVtW3RoaXMua2V5RmllbGQoKV0gPT09IGl0ZW0uaWQsXG4gICAgKTtcbiAgICB0aGlzLm9uSXRlbUNsaWNrLmVtaXQoeyBpdGVtOiBvcmlnaW5hbEl0ZW1Gcm9tRGF0YVNvdXJjZSwgbmF0aXZlRXZlbnQ6IGV2ZW50LCBzZW5kZXI6IHRoaXMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlRGJsQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IEFYS2FuYmFuSXRlbSkge1xuICAgIGNvbnN0IG9yaWdpbmFsSXRlbUZyb21EYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlKCkuZmluZChcbiAgICAgIChvcmlnaW5hbEl0ZW0pID0+IG9yaWdpbmFsSXRlbVt0aGlzLmtleUZpZWxkKCldID09PSBpdGVtLmlkLFxuICAgICk7XG4gICAgdGhpcy5vbkl0ZW1EYmxDbGljay5lbWl0KHsgaXRlbTogb3JpZ2luYWxJdGVtRnJvbURhdGFTb3VyY2UsIG5hdGl2ZUV2ZW50OiBldmVudCwgc2VuZGVyOiB0aGlzIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVJpZ2h0Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IEFYS2FuYmFuSXRlbSkge1xuICAgIGNvbnN0IG9yaWdpbmFsSXRlbUZyb21EYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlKCkuZmluZChcbiAgICAgIChvcmlnaW5hbEl0ZW0pID0+IG9yaWdpbmFsSXRlbVt0aGlzLmtleUZpZWxkKCldID09PSBpdGVtLmlkLFxuICAgICk7XG4gICAgdGhpcy5vbkl0ZW1SaWdodENsaWNrLmVtaXQoeyBpdGVtOiBvcmlnaW5hbEl0ZW1Gcm9tRGF0YVNvdXJjZSwgbmF0aXZlRXZlbnQ6IGV2ZW50LCBzZW5kZXI6IHRoaXMgfSk7XG4gIH1cbn1cbiIsIkBmb3IgKHN0YXR1cyBvZiBmaWx0ZXJlZFN0YXR1c2VzKCk7IHRyYWNrIHN0YXR1cy5rZXkpIHtcbiAgPGRpdiBjbGFzcz1cImF4LWthbmJhbi1zdGF0dXMge3sgc3RhdHVzLmNzc0NsYXNzIH19XCI+XG4gICAgPGF4LWhlYWRlcj5cbiAgICAgIEBpZiAoaGVhZGVyVGVtcGxhdGUoKSkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyVGVtcGxhdGUoKVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBzdGF0dXMgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8YXgtdGl0bGU+e3sgc3RhdHVzLnRpdGxlIH19PC9heC10aXRsZT5cbiAgICAgIH1cbiAgICA8L2F4LWhlYWRlcj5cbiAgICA8YXgtY29udGVudCBheERyb3BMaXN0IGRyb3BMaXN0R3JvdXA9XCJrYW5iYW5cIiBbaWRdPVwic3RyaW5naWZ5KHN0YXR1cy5rZXkpXCIgKGRyb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cbiAgICAgIEBpZiAoZW1wdHlUZW1wbGF0ZSgpICYmIGdldE9yaWdpbmFsSXRlbXNCeUlkKHN0YXR1cy5rZXkpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZW1wdHlUZW1wbGF0ZSgpXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHN0YXR1cyB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgfVxuICAgICAgQGlmIChpdGVtVGVtcGxhdGUoKSkge1xuICAgICAgICBAZm9yIChpdGVtIG9mIGdldE9yaWdpbmFsSXRlbXNCeUlkKHN0YXR1cy5rZXkpOyB0cmFjayBpdGVtW2tleUZpZWxkKCldKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICBbZHJhZ0RhdGFdPVwiaXRlbVwiXG4gICAgICAgICAgICBjbGFzcz1cInt7IGl0ZW0uY3NzQ2xhc3MgfX1cIlxuICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgW2F4VG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgIFtheFRvb2x0aXBdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgICAgW2F4VG9vbHRpcENvbnRleHRdPVwiaXRlbVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlRGJsQ2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlUmlnaHRDbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQGZvciAoaXRlbSBvZiBnZXRJdGVtc0J5SWQoc3RhdHVzLmtleSk7IHRyYWNrIGl0ZW0uaWQpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgIFtkcmFnRGF0YV09XCJpdGVtXCJcbiAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImF4LWthbmJhbi1pdGVtICB7eyBpdGVtLmNzc0NsYXNzIH19XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImBheC1rYW5iYW4tJHtpdGVtLnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgICAgICBbYXhUb29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbYXhUb29sdGlwQ29udGV4dF09XCJpdGVtXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVEYmxDbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVSaWdodENsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxheC1oZWFkaW5nPlxuICAgICAgICAgICAgICA8YXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1rYW5iYW4tdHJ1bmNhdGVcIj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgta2FuYmFuLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9heC10aXRsZT5cbiAgICAgICAgICAgICAgPGF4LXN1YnRpdGxlPnt7IGl0ZW0uZGVzY3JpcHRpb24gfX08L2F4LXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9heC1oZWFkaW5nPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBAaWYgKGNvbnRlbnRGb290ZXJUZW1wbGF0ZSgpKSB7XG4gICAgICAgIDxheC1mb290ZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudEZvb3RlclRlbXBsYXRlKClcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBzdGF0dXMgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2F4LWZvb3Rlcj5cbiAgICAgIH1cbiAgICA8L2F4LWNvbnRlbnQ+XG4gICAgQGlmIChmb290ZXJUZW1wbGF0ZSgpKSB7XG4gICAgICA8YXgtZm9vdGVyPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZm9vdGVyVGVtcGxhdGUoKVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBzdGF0dXMgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvYXgtZm9vdGVyPlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMta2FuYmFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9rYW5iYW4vc3JjL2Fjb3JleC1jb21wb25lbnRzLWthbmJhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { AXPlatform } from '@acorex/core/platform';
|
|
|
4
4
|
import { AXHtmlUtil } from '@acorex/core/utils';
|
|
5
5
|
import { isPlatformBrowser, CommonModule } from '@angular/common';
|
|
6
6
|
import * as i0 from '@angular/core';
|
|
7
|
-
import { inject, DOCUMENT, PLATFORM_ID, input, EventEmitter, ElementRef, TemplateRef, Output, Input, ViewChild, ChangeDetectionStrategy, ViewEncapsulation, Component, NgModule } from '@angular/core';
|
|
7
|
+
import { inject, DOCUMENT, PLATFORM_ID, input, afterNextRender, EventEmitter, ElementRef, TemplateRef, Output, Input, ViewChild, ChangeDetectionStrategy, ViewEncapsulation, Component, NgModule } from '@angular/core';
|
|
8
8
|
import { Subject, fromEvent, delay } from 'rxjs';
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -34,18 +34,28 @@ class AXPopoverComponent extends MXBaseComponent {
|
|
|
34
34
|
/** @ignore */
|
|
35
35
|
this._disabled = false;
|
|
36
36
|
this.width = input('fit-content', ...(ngDevMode ? [{ debugName: "width" }] : []));
|
|
37
|
+
this.#init = afterNextRender(() => {
|
|
38
|
+
const defaultPlacementDirection = AXHtmlUtil.isRtl(this.getHostElement()) ? 'bottom-end' : 'bottom-start';
|
|
39
|
+
if (!this.placement)
|
|
40
|
+
this.placement = defaultPlacementDirection;
|
|
41
|
+
const converted = this.placement
|
|
42
|
+
? convertToPlacement(this.placement)
|
|
43
|
+
: convertToPlacement(defaultPlacementDirection);
|
|
44
|
+
this._placements = converted;
|
|
45
|
+
this.resize$.subscribe(() => {
|
|
46
|
+
if (this.isOpen) {
|
|
47
|
+
this.updatePosition();
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
37
51
|
/** @ignore */
|
|
38
52
|
this._offsetX = 0;
|
|
39
53
|
/** @ignore */
|
|
40
54
|
this._offsetY = 0;
|
|
41
55
|
/** @ignore */
|
|
42
|
-
this.
|
|
43
|
-
? convertToPlacement('bottom-start')
|
|
44
|
-
: convertToPlacement('bottom-end');
|
|
45
|
-
/** @ignore */
|
|
46
|
-
this._placements = [...this._defaultPlacements];
|
|
56
|
+
this._placements = [];
|
|
47
57
|
/** @ignore */
|
|
48
|
-
this._placement =
|
|
58
|
+
this._placement = null;
|
|
49
59
|
/** @ignore */
|
|
50
60
|
this._componentRef = null;
|
|
51
61
|
/** @ignore */
|
|
@@ -79,6 +89,7 @@ class AXPopoverComponent extends MXBaseComponent {
|
|
|
79
89
|
*/
|
|
80
90
|
this.onClosed = new EventEmitter();
|
|
81
91
|
}
|
|
92
|
+
#init;
|
|
82
93
|
/**
|
|
83
94
|
* Gets or sets whether the popover is disabled.
|
|
84
95
|
* When disabled, the popover will not open and will close if already open.
|
|
@@ -161,8 +172,10 @@ class AXPopoverComponent extends MXBaseComponent {
|
|
|
161
172
|
name: 'placement',
|
|
162
173
|
value: v,
|
|
163
174
|
afterCallback: (o, n) => {
|
|
175
|
+
if (!n)
|
|
176
|
+
return;
|
|
164
177
|
const converted = convertToPlacement(n);
|
|
165
|
-
this._placements = converted
|
|
178
|
+
this._placements = converted;
|
|
166
179
|
this.updateOffset();
|
|
167
180
|
if (this._overlayRef) {
|
|
168
181
|
this._overlayRef.updatePosition();
|
|
@@ -488,14 +501,6 @@ class AXPopoverComponent extends MXBaseComponent {
|
|
|
488
501
|
this.resizeObserver = null;
|
|
489
502
|
}
|
|
490
503
|
}
|
|
491
|
-
ngOnInit() {
|
|
492
|
-
super.ngOnInit();
|
|
493
|
-
this.resize$.subscribe(() => {
|
|
494
|
-
if (this.isOpen) {
|
|
495
|
-
this.updatePosition();
|
|
496
|
-
}
|
|
497
|
-
});
|
|
498
|
-
}
|
|
499
504
|
/** @ignore */
|
|
500
505
|
ngOnDestroy() {
|
|
501
506
|
this.disconnectResizeObserver();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-components-popover.mjs","sources":["../tmp-esm2022/popover/lib/popover.component.js","../tmp-esm2022/popover/lib/popover.module.js","../tmp-esm2022/popover/acorex-components-popover.js"],"sourcesContent":["import { AXComponent, AXFocusableComponent, MXBaseComponent, convertToPlacement, } from '@acorex/cdk/common';\nimport { AXOverlayService } from '@acorex/cdk/overlay';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXHtmlUtil } from '@acorex/core/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DOCUMENT, ElementRef, EventEmitter, Input, Output, PLATFORM_ID, TemplateRef, ViewChild, ViewEncapsulation, inject, input, } from '@angular/core';\nimport { Subject, delay, fromEvent } from 'rxjs';\nimport * as i0 from \"@angular/core\";\n/**\n * @category Components\n * A popover component with custom encapsulation and change detection settings.\n */\nexport class AXPopoverComponent extends MXBaseComponent {\n constructor() {\n super(...arguments);\n this.platform = inject(AXPlatform);\n this.document = inject(DOCUMENT);\n this.platformID = inject(PLATFORM_ID);\n this.overlayService = inject(AXOverlayService);\n this.onKeyDownHandler = null;\n /** @ignore */\n this._overlayRef = null;\n /** @ignore */\n this._lastActiveElement = null;\n /** @ignore */\n this._targetEvents = {};\n /** @ignore */\n this._outsideClickHandler = null;\n /** @ignore */\n this.resizeObserver = null;\n /** @ignore */\n this.resize$ = new Subject();\n /** @ignore */\n this._disabled = false;\n this.width = input('fit-content', ...(ngDevMode ? [{ debugName: \"width\" }] : []));\n /** @ignore */\n this._offsetX = 0;\n /** @ignore */\n this._offsetY = 0;\n /** @ignore */\n this._defaultPlacements = AXHtmlUtil.isRtl(this.getHostElement())\n ? convertToPlacement('bottom-start')\n : convertToPlacement('bottom-end');\n /** @ignore */\n this._placements = [...this._defaultPlacements];\n /** @ignore */\n this._placement = this._placements;\n /** @ignore */\n this._componentRef = null;\n /** @ignore */\n this._openOn = 'toggle';\n /** @ignore */\n this._closeOn = 'clickOut';\n /**\n * Determines if a backdrop should be displayed behind the popover.\n */\n this.hasBackdrop = false;\n /**\n * Delay in milliseconds before the popover opens after a trigger event.\n */\n this._openAfter = 200;\n /**\n * Delay in milliseconds before the popover closes after a trigger event.\n */\n this._closeAfter = 200;\n /**\n * Enables or disables adaptivity.\n */\n this.adaptivityEnabled = false;\n /**\n * Emits when the component is opened.\n * @event\n */\n this.onOpened = new EventEmitter();\n /**\n * Emits when the component is closed.\n * @event\n */\n this.onClosed = new EventEmitter();\n }\n /**\n * Gets or sets whether the popover is disabled.\n * When disabled, the popover will not open and will close if already open.\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(v) {\n this._disabled = v;\n if (this._disabled && this.isOpen) {\n this.close();\n }\n }\n /**\n * Gets or sets the horizontal offset and updates it accordingly.\n */\n get offsetX() {\n return this._offsetX;\n }\n /**\n * Sets the horizontal offset and updates it with a callback.\n */\n set offsetX(v) {\n this.setOption({\n name: 'offsetX',\n value: v,\n afterCallback: () => {\n this.updateOffset();\n },\n });\n }\n /**\n * Vertical offset with update callback.\n */\n get offsetY() {\n return this._offsetY;\n }\n /**\n * Sets the vertical offset and updates the component position.\n */\n set offsetY(v) {\n this.setOption({\n name: 'offsetY',\n value: v,\n afterCallback: () => {\n this.updateOffset();\n },\n });\n }\n /**\n * Gets or sets the target element, supporting Element, ElementRef, or MXBaseComponent.\n */\n get target() {\n return this._target;\n }\n /**\n * Sets the target element and updates event bindings.\n */\n set target(v) {\n this.removeTargetEvents();\n if (v instanceof Element)\n this._target = v;\n else if (v instanceof ElementRef)\n this._target = v.nativeElement;\n else if (typeof v?.getHostElement == 'function')\n this._target = v.getHostElement();\n this.bindTargetEvents();\n }\n /**\n * Gets the current placement of the component.\n */\n get placement() {\n return this._placement;\n }\n /**\n * Sets the component's placement and updates its position settings.\n */\n set placement(v) {\n this.setOption({\n name: 'placement',\n value: v,\n afterCallback: (o, n) => {\n const converted = convertToPlacement(n);\n this._placements = converted.length ? converted : this._defaultPlacements;\n this.updateOffset();\n if (this._overlayRef) {\n this._overlayRef.updatePosition();\n }\n },\n });\n }\n /**\n * Gets the reference to the component.\n */\n get componentRef() {\n return this._componentRef;\n }\n /**\n * Gets or sets the trigger for opening the popover and updates target events.\n */\n get openOn() {\n return this._openOn;\n }\n /**\n * Sets the trigger for opening the popover and updates target events.\n */\n set openOn(v) {\n this.setOption({\n name: 'openOn',\n value: v,\n afterCallback: () => {\n this.bindTargetEvents();\n },\n });\n }\n /**\n * Gets or sets the trigger for closing the popover.\n */\n get closeOn() {\n return this._closeOn;\n }\n /**\n * Sets the trigger for closing the popover and rebinds target events.\n */\n set closeOn(v) {\n this.setOption({\n name: 'closeOn',\n value: v,\n afterCallback: () => {\n this.bindTargetEvents();\n },\n });\n }\n get openAfter() {\n return this._openAfter;\n }\n set openAfter(value) {\n this._openAfter = value;\n this.bindTargetEvents();\n }\n get closeAfter() {\n return this._closeAfter;\n }\n set closeAfter(value) {\n this._closeAfter = value;\n this.bindTargetEvents();\n }\n /** @ignore */\n _emitOnOpenedEvent() {\n this.onOpened.emit({\n component: this,\n htmlElement: this.getHostElement(),\n });\n }\n /** @ignore */\n _emitOnClosedEvent() {\n this.onClosed.emit({\n component: this,\n htmlElement: this.getHostElement(),\n });\n }\n /** @ignore */\n removeTargetEvents() {\n Object.entries(this._targetEvents).forEach((e) => {\n e[1]?.unsubscribe();\n });\n this._targetEvents = {};\n }\n /** @ignore */\n bindTargetEvents() {\n this.removeTargetEvents();\n if (!this._target)\n return;\n const targetMouseEnter$ = fromEvent(this._target, 'mouseenter');\n const targetMouseLeave$ = fromEvent(this._target, 'mouseleave');\n if (this.openOn === 'hover') {\n this._targetEvents.mouseenter = targetMouseEnter$.pipe(delay(this.openAfter)).subscribe(() => {\n this.open();\n });\n }\n if (this.closeOn === 'leave') {\n this._targetEvents.mouseleave = targetMouseLeave$.pipe(delay(this.closeAfter)).subscribe(() => {\n this.close();\n });\n }\n if (this.openOn === 'click' || this.openOn === 'toggle') {\n const click$ = fromEvent(this._target, 'click');\n this._targetEvents.click = click$.subscribe(() => {\n this.openOn === 'toggle' ? this.toggle() : this.open();\n });\n }\n }\n /** @ignore */\n bindOverlayEvents() {\n const overlayElement = this._overlayRef?.overlayElement;\n if (!overlayElement)\n return;\n overlayElement.style.pointerEvents = 'none';\n // Outside click handler\n if (this.closeOn === 'clickOut') {\n this._outsideClickHandler = (e) => {\n const el = e.target;\n if (this.isOpen && !this._target?.contains(el) && !overlayElement?.contains(el)) {\n this.close();\n }\n };\n this.document.addEventListener('mousedown', this._outsideClickHandler);\n }\n // Resize observer\n this.initializeResizeObserver();\n setTimeout(() => {\n overlayElement.style.pointerEvents = 'auto';\n }, this.openAfter);\n }\n /** @ignore */\n removeOverlayEvents() {\n if (this._outsideClickHandler) {\n this.document.removeEventListener('mousedown', this._outsideClickHandler);\n this._outsideClickHandler = null;\n }\n }\n /** @ignore */\n handleOverlayDisposed() {\n // Called when overlay is disposed externally (e.g., by scroll)\n this.disconnectResizeObserver();\n this.removeOverlayEvents();\n this.removeKeyDownListener();\n this._overlayRef = null;\n this._componentRef = null;\n this.restoreFocus();\n this._emitOnClosedEvent();\n }\n /**\n * Toggles the component's open state.\n */\n toggle() {\n this.isOpen ? this.close() : this.open();\n }\n /**\n * Closes the component if it's open, detaches the overlay, restores focus, and emits the closed event.\n */\n close() {\n if (!this.isOpen) {\n return;\n }\n this.disconnectResizeObserver();\n this.removeOverlayEvents();\n this.removeKeyDownListener();\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n this._componentRef = null;\n this.restoreFocus();\n this._emitOnClosedEvent();\n }\n /**\n * Opens the component if it's not already open, saves focus, opens the overlay, and emits the opened event.\n */\n async open() {\n if (this.isOpen || this.disabled) {\n return;\n }\n this.addKeyDownListener();\n this.saveFocus();\n await this.openOverlayInternal();\n this._emitOnOpenedEvent();\n }\n /** @ignore */\n addKeyDownListener() {\n if (isPlatformBrowser(this.platformID)) {\n this.onKeyDownHandler = (e) => {\n if (e.key === 'Escape') {\n this.close();\n }\n };\n this.document.addEventListener('keydown', this.onKeyDownHandler);\n }\n }\n /** @ignore */\n removeKeyDownListener() {\n if (this.onKeyDownHandler) {\n this.document.removeEventListener('keydown', this.onKeyDownHandler);\n this.onKeyDownHandler = null;\n }\n }\n /** @ignore */\n saveFocus() {\n if (isPlatformBrowser(this.platformID)) {\n this._lastActiveElement = this.document.activeElement;\n }\n }\n /** @ignore */\n restoreFocus() {\n if (this._lastActiveElement instanceof HTMLElement) {\n this._lastActiveElement?.focus?.();\n }\n }\n /** @ignore */\n async openOverlayInternal() {\n const targetRef = this._target;\n if (!targetRef)\n return;\n // Build panel classes\n const panelClasses = ['ax-animate-fadeIn', 'ax-animate-faster'];\n if (this.platform.isDark()) {\n panelClasses.push('ax-dark');\n }\n if (this.panelClass) {\n panelClasses.push(this.panelClass);\n }\n // Determine content to display\n let contentToRender;\n let inputs;\n if (this.content instanceof TemplateRef) {\n contentToRender = this.content;\n }\n else if (typeof this.content === 'function') {\n contentToRender = this.content;\n inputs = this.context;\n }\n else {\n contentToRender = this._baseTemplate;\n }\n // Create the overlay\n this._overlayRef = await this.overlayService.create(contentToRender, {\n inputs,\n anchorOptions: {\n anchor: targetRef,\n placement: this._placement,\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n autoFlip: true,\n },\n panelClass: panelClasses,\n width: this.width(),\n onDispose: () => this.handleOverlayDisposed(),\n actionSheetStyle: this.isActionsheetStyle,\n });\n // Store component ref if it's a component\n if (this._overlayRef.instance && 'instance' in this._overlayRef.instance) {\n this._componentRef = this._overlayRef.instance;\n if (this.context && this._componentRef.instance) {\n Object.assign(this._componentRef.instance, this.context);\n }\n }\n // Bind overlay events\n this.bindOverlayEvents();\n }\n /**\n * Checks if the overlay is currently open.\n * @returns {boolean}\n */\n get isOpen() {\n return this._overlayRef !== null;\n }\n /**\n * Determines if the actionsheet style should be applied.\n * @returns {boolean}\n */\n get isActionsheetStyle() {\n return this.platform.is('SM') && this.adaptivityEnabled;\n }\n /** @ignore */\n updateOffset() {\n this._placements?.forEach((p) => {\n if (this.offsetY != null)\n p.offsetY = this.offsetY;\n if (this.offsetX != null)\n p.offsetX = this.offsetX;\n });\n }\n /**\n * Updates the position of the overlay and focuses on it.\n */\n updatePosition() {\n this._overlayRef?.updatePosition();\n this.focus();\n }\n /**\n * Focuses the overlay element.\n */\n focus() {\n // Optional focus behavior\n }\n /**\n * Brings this popover to the front of all other overlays.\n */\n bringToFront() {\n this._overlayRef?.bringToFront();\n }\n /** @ignore */\n initializeResizeObserver() {\n if (!isPlatformBrowser(this.platformID) || !this._overlayRef?.overlayElement) {\n return;\n }\n this.disconnectResizeObserver();\n this.resizeObserver = new ResizeObserver(() => {\n this.resize$.next();\n });\n this.resizeObserver.observe(this._overlayRef.overlayElement);\n }\n /** @ignore */\n disconnectResizeObserver() {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n }\n ngOnInit() {\n super.ngOnInit();\n this.resize$.subscribe(() => {\n if (this.isOpen) {\n this.updatePosition();\n }\n });\n }\n /** @ignore */\n ngOnDestroy() {\n this.disconnectResizeObserver();\n this.resize$.complete();\n this.removeTargetEvents();\n this.removeOverlayEvents();\n this.removeKeyDownListener();\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPopoverComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.3.16\", type: AXPopoverComponent, isStandalone: true, selector: \"ax-popover\", inputs: { width: { classPropertyName: \"width\", publicName: \"width\", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: \"disabled\", publicName: \"disabled\", isSignal: false, isRequired: false, transformFunction: null }, offsetX: { classPropertyName: \"offsetX\", publicName: \"offsetX\", isSignal: false, isRequired: false, transformFunction: null }, offsetY: { classPropertyName: \"offsetY\", publicName: \"offsetY\", isSignal: false, isRequired: false, transformFunction: null }, target: { classPropertyName: \"target\", publicName: \"target\", isSignal: false, isRequired: false, transformFunction: null }, placement: { classPropertyName: \"placement\", publicName: \"placement\", isSignal: false, isRequired: false, transformFunction: null }, content: { classPropertyName: \"content\", publicName: \"content\", isSignal: false, isRequired: false, transformFunction: null }, openOn: { classPropertyName: \"openOn\", publicName: \"openOn\", isSignal: false, isRequired: false, transformFunction: null }, closeOn: { classPropertyName: \"closeOn\", publicName: \"closeOn\", isSignal: false, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: \"hasBackdrop\", publicName: \"hasBackdrop\", isSignal: false, isRequired: false, transformFunction: null }, openAfter: { classPropertyName: \"openAfter\", publicName: \"openAfter\", isSignal: false, isRequired: false, transformFunction: null }, closeAfter: { classPropertyName: \"closeAfter\", publicName: \"closeAfter\", isSignal: false, isRequired: false, transformFunction: null }, backdropClass: { classPropertyName: \"backdropClass\", publicName: \"backdropClass\", isSignal: false, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: \"panelClass\", publicName: \"panelClass\", isSignal: false, isRequired: false, transformFunction: null }, adaptivityEnabled: { classPropertyName: \"adaptivityEnabled\", publicName: \"adaptivityEnabled\", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onOpened: \"onOpened\", onClosed: \"onClosed\" }, providers: [\n { provide: AXFocusableComponent, useExisting: AXPopoverComponent },\n { provide: AXComponent, useExisting: AXPopoverComponent },\n ], viewQueries: [{ propertyName: \"_baseTemplate\", first: true, predicate: [\"baseTemplate\"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: \"<ng-template #baseTemplate>\\n <ng-content></ng-content>\\n</ng-template>\\n\", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPopoverComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-popover', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [\n { provide: AXFocusableComponent, useExisting: AXPopoverComponent },\n { provide: AXComponent, useExisting: AXPopoverComponent },\n ], template: \"<ng-template #baseTemplate>\\n <ng-content></ng-content>\\n</ng-template>\\n\" }]\n }], propDecorators: { width: [{ type: i0.Input, args: [{ isSignal: true, alias: \"width\", required: false }] }], disabled: [{\n type: Input\n }], offsetX: [{\n type: Input\n }], offsetY: [{\n type: Input\n }], target: [{\n type: Input\n }], placement: [{\n type: Input\n }], _baseTemplate: [{\n type: ViewChild,\n args: ['baseTemplate', { static: true }]\n }], content: [{\n type: Input\n }], openOn: [{\n type: Input\n }], closeOn: [{\n type: Input\n }], hasBackdrop: [{\n type: Input\n }], openAfter: [{\n type: Input\n }], closeAfter: [{\n type: Input\n }], backdropClass: [{\n type: Input\n }], panelClass: [{\n type: Input\n }], adaptivityEnabled: [{\n type: Input\n }], onOpened: [{\n type: Output\n }], onClosed: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3BvcG92ZXIvc3JjL2xpYi9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvbGliL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFHWCxvQkFBb0IsRUFFcEIsZUFBZSxFQUNmLGtCQUFrQixHQUNuQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFFBQVEsRUFDUixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixLQUFLLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFNL0Q7OztHQUdHO0FBV0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGVBQWU7SUFWdkQ7O1FBV1UsYUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLGVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxD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d0JMLEtBQUs7O3NCQXdCTCxLQUFLOztzQkE4QkwsS0FBSzs7c0JBd0NMLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs7c0JBTTFDLEtBQUs7O3NCQVNMLEtBQUs7O3NCQXdCTCxLQUFLOztzQkFxQkwsS0FBSzs7c0JBUUwsS0FBSzs7c0JBZUwsS0FBSzs7c0JBYUwsS0FBSzs7c0JBTUwsS0FBSzs7c0JBTUwsS0FBSzs7c0JBT0wsTUFBTTs7c0JBT04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFYQ29tcG9uZW50LFxuICBBWENvbm5lY3RlZFBvc2l0aW9uLFxuICBBWEV2ZW50LFxuICBBWEZvY3VzYWJsZUNvbXBvbmVudCxcbiAgQVhQbGFjZW1lbnRUeXBlLFxuICBNWEJhc2VDb21wb25lbnQsXG4gIGNvbnZlcnRUb1BsYWNlbWVudCxcbn0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYT3ZlcmxheVJlZiwgQVhPdmVybGF5U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQVhDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQVhQbGF0Zm9ybSB9IGZyb20gJ0BhY29yZXgvY29yZS9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBBWEh0bWxVdGlsIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgRE9DVU1FTlQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGluamVjdCxcbiAgaW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWxheSwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIEFYUG9wb3Zlck9wZW5UcmlnZ2VyID0gJ21hbnVhbCcgfCAnY2xpY2snIHwgJ2hvdmVyJyB8ICd0b2dnbGUnO1xuXG5leHBvcnQgdHlwZSBBWFBvcG92ZXJDbG9zZVRyaWdnZXIgPSAnbWFudWFsJyB8ICdjbGlja091dCcgfCAnbGVhdmUnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb21wb25lbnRzXG4gKiBBIHBvcG92ZXIgY29tcG9uZW50IHdpdGggY3VzdG9tIGVuY2Fwc3VsYXRpb24gYW5kIGNoYW5nZSBkZXRlY3Rpb24gc2V0dGluZ3MuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXBvcG92ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IEFYRm9jdXNhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhQb3BvdmVyQ29tcG9uZW50IH0sXG4gICAgeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYUG9wb3ZlckNvbXBvbmVudCB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBvcG92ZXJDb21wb25lbnQgZXh0ZW5kcyBNWEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHBsYXRmb3JtID0gaW5qZWN0KEFYUGxhdGZvcm0pO1xuICBwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybUlEID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgcHJpdmF0ZSBvdmVybGF5U2VydmljZSA9IGluamVjdChBWE92ZXJsYXlTZXJ2aWNlKTtcblxuICBwcml2YXRlIG9uS2V5RG93bkhhbmRsZXI6ICgoZTogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9vdmVybGF5UmVmOiBBWE92ZXJsYXlSZWY8dW5rbm93bj4gfCBudWxsID0gbnVsbDtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9sYXN0QWN0aXZlRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX3RhcmdldEV2ZW50czoge1xuICAgIG1vdXNlZW50ZXI/OiBTdWJzY3JpcHRpb247XG4gICAgbW91c2VsZWF2ZT86IFN1YnNjcmlwdGlvbjtcbiAgICBjbGljaz86IFN1YnNjcmlwdGlvbjtcbiAgfSA9IHt9O1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX291dHNpZGVDbGlja0hhbmRsZXI6ICgoZTogTW91c2VFdmVudCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHJlc2l6ZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgd2lkdGggPSBpbnB1dDxzdHJpbmc+KCdmaXQtY29udGVudCcpO1xuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0aGUgcG9wb3ZlciBpcyBkaXNhYmxlZC5cbiAgICogV2hlbiBkaXNhYmxlZCwgdGhlIHBvcG92ZXIgd2lsbCBub3Qgb3BlbiBhbmQgd2lsbCBjbG9zZSBpZiBhbHJlYWR5IG9wZW4uXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHY7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfb2Zmc2V0WCA9IDA7XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgaG9yaXpvbnRhbCBvZmZzZXQgYW5kIHVwZGF0ZXMgaXQgYWNjb3JkaW5nbHkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IG9mZnNldFgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fb2Zmc2V0WDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBob3Jpem9udGFsIG9mZnNldCBhbmQgdXBkYXRlcyBpdCB3aXRoIGEgY2FsbGJhY2suXG4gICAqL1xuICBwdWJsaWMgc2V0IG9mZnNldFgodjogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRPcHRpb24oe1xuICAgICAgbmFtZTogJ29mZnNldFgnLFxuICAgICAgdmFsdWU6IHYsXG4gICAgICBhZnRlckNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfb2Zmc2V0WSA9IDA7XG5cbiAgLyoqXG4gICAqIFZlcnRpY2FsIG9mZnNldCB3aXRoIHVwZGF0ZSBjYWxsYmFjay5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgb2Zmc2V0WSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9vZmZzZXRZO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZlcnRpY2FsIG9mZnNldCBhbmQgdXBkYXRlcyB0aGUgY29tcG9uZW50IHBvc2l0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldCBvZmZzZXRZKHY6IG51bWJlcikge1xuICAgIHRoaXMuc2V0T3B0aW9uKHtcbiAgICAgIG5hbWU6ICdvZmZzZXRZJyxcbiAgICAgIHZhbHVlOiB2LFxuICAgICAgYWZ0ZXJDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZU9mZnNldCgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX3RhcmdldCE6IEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgdGFyZ2V0IGVsZW1lbnQsIHN1cHBvcnRpbmcgRWxlbWVudCwgRWxlbWVudFJlZiwgb3IgTVhCYXNlQ29tcG9uZW50LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCB0YXJnZXQoKTogRWxlbWVudCB8IEVsZW1lbnRSZWYgfCBNWEJhc2VDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGFyZ2V0IGVsZW1lbnQgYW5kIHVwZGF0ZXMgZXZlbnQgYmluZGluZ3MuXG4gICAqL1xuICBwdWJsaWMgc2V0IHRhcmdldCh2OiBFbGVtZW50IHwgRWxlbWVudFJlZiB8IE1YQmFzZUNvbXBvbmVudCkge1xuICAgIHRoaXMucmVtb3ZlVGFyZ2V0RXZlbnRzKCk7XG4gICAgaWYgKHYgaW5zdGFuY2VvZiBFbGVtZW50KSB0aGlzLl90YXJnZXQgPSB2O1xuICAgIGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBFbGVtZW50UmVmKSB0aGlzLl90YXJnZXQgPSB2Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgZWxzZSBpZiAodHlwZW9mIHY/LmdldEhvc3RFbGVtZW50ID09ICdmdW5jdGlvbicpIHRoaXMuX3RhcmdldCA9IHYuZ2V0SG9zdEVsZW1lbnQoKTtcbiAgICB0aGlzLmJpbmRUYXJnZXRFdmVudHMoKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX2RlZmF1bHRQbGFjZW1lbnRzOiBBWENvbm5lY3RlZFBvc2l0aW9uW10gPSBBWEh0bWxVdGlsLmlzUnRsKHRoaXMuZ2V0SG9zdEVsZW1lbnQoKSlcbiAgICA/IGNvbnZlcnRUb1BsYWNlbWVudCgnYm90dG9tLXN0YXJ0JylcbiAgICA6IGNvbnZlcnRUb1BsYWNlbWVudCgnYm90dG9tLWVuZCcpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX3BsYWNlbWVudHM6IEFYQ29ubmVjdGVkUG9zaXRpb25bXSA9IFsuLi50aGlzLl9kZWZhdWx0UGxhY2VtZW50c107XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfcGxhY2VtZW50OiBBWFBsYWNlbWVudFR5cGUgPSB0aGlzLl9wbGFjZW1lbnRzO1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHBsYWNlbWVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBwbGFjZW1lbnQoKTogQVhQbGFjZW1lbnRUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2VtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbXBvbmVudCdzIHBsYWNlbWVudCBhbmQgdXBkYXRlcyBpdHMgcG9zaXRpb24gc2V0dGluZ3MuXG4gICAqL1xuICBwdWJsaWMgc2V0IHBsYWNlbWVudCh2OiBBWFBsYWNlbWVudFR5cGUpIHtcbiAgICB0aGlzLnNldE9wdGlvbih7XG4gICAgICBuYW1lOiAncGxhY2VtZW50JyxcbiAgICAgIHZhbHVlOiB2LFxuICAgICAgYWZ0ZXJDYWxsYmFjazogKG8sIG4pID0+IHtcbiAgICAgICAgY29uc3QgY29udmVydGVkID0gY29udmVydFRvUGxhY2VtZW50KG4pO1xuXG4gICAgICAgIHRoaXMuX3BsYWNlbWVudHMgPSBjb252ZXJ0ZWQubGVuZ3RoID8gY29udmVydGVkIDogdGhpcy5fZGVmYXVsdFBsYWNlbWVudHM7XG4gICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KCk7XG4gICAgICAgIGlmICh0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICAgICAgdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8dW5rbm93bj4gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogR2V0cyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbXBvbmVudFJlZigpOiBDb21wb25lbnRSZWY8dW5rbm93bj4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50UmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvbGRzIHRoZSBjb250ZXh0IGRhdGEgZm9yIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgY29udGV4dDogdW5rbm93bjtcblxuICAvKiogQGlnbm9yZSAqL1xuICBAVmlld0NoaWxkKCdiYXNlVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBfYmFzZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgY29udGVudCB0byBiZSBkaXNwbGF5ZWQsIHdoaWNoIGNhbiBiZSBhIHRlbXBsYXRlIG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgQElucHV0KClcbiAgY29udGVudDogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBBWENvbXBvbmVudFR5cGU8dW5rbm93bj47XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfb3Blbk9uOiBBWFBvcG92ZXJPcGVuVHJpZ2dlciA9ICd0b2dnbGUnO1xuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHRyaWdnZXIgZm9yIG9wZW5pbmcgdGhlIHBvcG92ZXIgYW5kIHVwZGF0ZXMgdGFyZ2V0IGV2ZW50cy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgb3Blbk9uKCk6IEFYUG9wb3Zlck9wZW5UcmlnZ2VyIHtcbiAgICByZXR1cm4gdGhpcy5fb3Blbk9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRyaWdnZXIgZm9yIG9wZW5pbmcgdGhlIHBvcG92ZXIgYW5kIHVwZGF0ZXMgdGFyZ2V0IGV2ZW50cy5cbiAgICovXG4gIHB1YmxpYyBzZXQgb3Blbk9uKHY6IEFYUG9wb3Zlck9wZW5UcmlnZ2VyKSB7XG4gICAgdGhpcy5zZXRPcHRpb24oe1xuICAgICAgbmFtZTogJ29wZW5PbicsXG4gICAgICB2YWx1ZTogdixcbiAgICAgIGFmdGVyQ2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5iaW5kVGFyZ2V0RXZlbnRzKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfY2xvc2VPbjogQVhQb3BvdmVyQ2xvc2VUcmlnZ2VyID0gJ2NsaWNrT3V0JztcblxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSB0cmlnZ2VyIGZvciBjbG9zaW5nIHRoZSBwb3BvdmVyLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBjbG9zZU9uKCk6IEFYUG9wb3ZlckNsb3NlVHJpZ2dlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Nsb3NlT247XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdHJpZ2dlciBmb3IgY2xvc2luZyB0aGUgcG9wb3ZlciBhbmQgcmViaW5kcyB0YXJnZXQgZXZlbnRzLlxuICAgKi9cbiAgcHVibGljIHNldCBjbG9zZU9uKHY6IEFYUG9wb3ZlckNsb3NlVHJpZ2dlcikge1xuICAgIHRoaXMuc2V0T3B0aW9uKHtcbiAgICAgIG5hbWU6ICdjbG9zZU9uJyxcbiAgICAgIHZhbHVlOiB2LFxuICAgICAgYWZ0ZXJDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICB0aGlzLmJpbmRUYXJnZXRFdmVudHMoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIGJhY2tkcm9wIHNob3VsZCBiZSBkaXNwbGF5ZWQgYmVoaW5kIHRoZSBwb3BvdmVyLlxuICAgKi9cbiAgQElucHV0KClcbiAgaGFzQmFja2Ryb3AgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcG9wb3ZlciBvcGVucyBhZnRlciBhIHRyaWdnZXIgZXZlbnQuXG4gICAqL1xuICBwcml2YXRlIF9vcGVuQWZ0ZXIgPSAyMDA7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBvcGVuQWZ0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wZW5BZnRlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgb3BlbkFmdGVyKHZhbHVlKSB7XG4gICAgdGhpcy5fb3BlbkFmdGVyID0gdmFsdWU7XG4gICAgdGhpcy5iaW5kVGFyZ2V0RXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcG9wb3ZlciBjbG9zZXMgYWZ0ZXIgYSB0cmlnZ2VyIGV2ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBfY2xvc2VBZnRlciA9IDIwMDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGNsb3NlQWZ0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nsb3NlQWZ0ZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0IGNsb3NlQWZ0ZXIodmFsdWUpIHtcbiAgICB0aGlzLl9jbG9zZUFmdGVyID0gdmFsdWU7XG4gICAgdGhpcy5iaW5kVGFyZ2V0RXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIHRoZSBiYWNrZHJvcCBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KClcbiAgYmFja2Ryb3BDbGFzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gdGhlIHBhbmVsIGVsZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwYW5lbENsYXNzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgYWRhcHRpdml0eS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGFkYXB0aXZpdHlFbmFibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBvcGVuZWQuXG4gICAqIEBldmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIG9uT3BlbmVkOiBFdmVudEVtaXR0ZXI8QVhFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBjbG9zZWQuXG4gICAqIEBldmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIG9uQ2xvc2VkOiBFdmVudEVtaXR0ZXI8QVhFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRXZlbnQ+KCk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfZW1pdE9uT3BlbmVkRXZlbnQoKSB7XG4gICAgdGhpcy5vbk9wZW5lZC5lbWl0KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGh0bWxFbGVtZW50OiB0aGlzLmdldEhvc3RFbGVtZW50KCksXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9lbWl0T25DbG9zZWRFdmVudCgpIHtcbiAgICB0aGlzLm9uQ2xvc2VkLmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMuZ2V0SG9zdEVsZW1lbnQoKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgcmVtb3ZlVGFyZ2V0RXZlbnRzKCk6IHZvaWQge1xuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX3RhcmdldEV2ZW50cykuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgZVsxXT8udW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgICB0aGlzLl90YXJnZXRFdmVudHMgPSB7fTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgYmluZFRhcmdldEV2ZW50cygpIHtcbiAgICB0aGlzLnJlbW92ZVRhcmdldEV2ZW50cygpO1xuICAgIGlmICghdGhpcy5fdGFyZ2V0KSByZXR1cm47XG4gICAgY29uc3QgdGFyZ2V0TW91c2VFbnRlciQgPSBmcm9tRXZlbnQodGhpcy5fdGFyZ2V0LCAnbW91c2VlbnRlcicpO1xuICAgIGNvbnN0IHRhcmdldE1vdXNlTGVhdmUkID0gZnJvbUV2ZW50KHRoaXMuX3RhcmdldCwgJ21vdXNlbGVhdmUnKTtcblxuICAgIGlmICh0aGlzLm9wZW5PbiA9PT0gJ2hvdmVyJykge1xuICAgICAgdGhpcy5fdGFyZ2V0RXZlbnRzLm1vdXNlZW50ZXIgPSB0YXJnZXRNb3VzZUVudGVyJC5waXBlKGRlbGF5KHRoaXMub3BlbkFmdGVyKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbG9zZU9uID09PSAnbGVhdmUnKSB7XG4gICAgICB0aGlzLl90YXJnZXRFdmVudHMubW91c2VsZWF2ZSA9IHRhcmdldE1vdXNlTGVhdmUkLnBpcGUoZGVsYXkodGhpcy5jbG9zZUFmdGVyKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3Blbk9uID09PSAnY2xpY2snIHx8IHRoaXMub3Blbk9uID09PSAndG9nZ2xlJykge1xuICAgICAgY29uc3QgY2xpY2skID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuX3RhcmdldCwgJ2NsaWNrJyk7XG4gICAgICB0aGlzLl90YXJnZXRFdmVudHMuY2xpY2sgPSBjbGljayQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5vcGVuT24gPT09ICd0b2dnbGUnID8gdGhpcy50b2dnbGUoKSA6IHRoaXMub3BlbigpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBiaW5kT3ZlcmxheUV2ZW50cygpIHtcbiAgICBjb25zdCBvdmVybGF5RWxlbWVudCA9IHRoaXMuX292ZXJsYXlSZWY/Lm92ZXJsYXlFbGVtZW50O1xuICAgIGlmICghb3ZlcmxheUVsZW1lbnQpIHJldHVybjtcbiAgICBvdmVybGF5RWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuXG4gICAgLy8gT3V0c2lkZSBjbGljayBoYW5kbGVyXG4gICAgaWYgKHRoaXMuY2xvc2VPbiA9PT0gJ2NsaWNrT3V0Jykge1xuICAgICAgdGhpcy5fb3V0c2lkZUNsaWNrSGFuZGxlciA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsID0gZS50YXJnZXQgYXMgRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuICYmICF0aGlzLl90YXJnZXQ/LmNvbnRhaW5zKGVsKSAmJiAhb3ZlcmxheUVsZW1lbnQ/LmNvbnRhaW5zKGVsKSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5fb3V0c2lkZUNsaWNrSGFuZGxlcik7XG4gICAgfVxuXG4gICAgLy8gUmVzaXplIG9ic2VydmVyXG4gICAgdGhpcy5pbml0aWFsaXplUmVzaXplT2JzZXJ2ZXIoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgb3ZlcmxheUVsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcbiAgICB9LCB0aGlzLm9wZW5BZnRlcik7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHJlbW92ZU92ZXJsYXlFdmVudHMoKSB7XG4gICAgaWYgKHRoaXMuX291dHNpZGVDbGlja0hhbmRsZXIpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5fb3V0c2lkZUNsaWNrSGFuZGxlcik7XG4gICAgICB0aGlzLl9vdXRzaWRlQ2xpY2tIYW5kbGVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGhhbmRsZU92ZXJsYXlEaXNwb3NlZCgpIHtcbiAgICAvLyBDYWxsZWQgd2hlbiBvdmVybGF5IGlzIGRpc3Bvc2VkIGV4dGVybmFsbHkgKGUuZy4sIGJ5IHNjcm9sbClcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpO1xuICAgIHRoaXMucmVtb3ZlT3ZlcmxheUV2ZW50cygpO1xuICAgIHRoaXMucmVtb3ZlS2V5RG93bkxpc3RlbmVyKCk7XG4gICAgdGhpcy5fb3ZlcmxheVJlZiA9IG51bGw7XG4gICAgdGhpcy5fY29tcG9uZW50UmVmID0gbnVsbDtcbiAgICB0aGlzLnJlc3RvcmVGb2N1cygpO1xuICAgIHRoaXMuX2VtaXRPbkNsb3NlZEV2ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgY29tcG9uZW50J3Mgb3BlbiBzdGF0ZS5cbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICB0aGlzLmlzT3BlbiA/IHRoaXMuY2xvc2UoKSA6IHRoaXMub3BlbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgY29tcG9uZW50IGlmIGl0J3Mgb3BlbiwgZGV0YWNoZXMgdGhlIG92ZXJsYXksIHJlc3RvcmVzIGZvY3VzLCBhbmQgZW1pdHMgdGhlIGNsb3NlZCBldmVudC5cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKTtcbiAgICB0aGlzLnJlbW92ZU92ZXJsYXlFdmVudHMoKTtcbiAgICB0aGlzLnJlbW92ZUtleURvd25MaXN0ZW5lcigpO1xuXG4gICAgaWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY29tcG9uZW50UmVmID0gbnVsbDtcbiAgICB0aGlzLnJlc3RvcmVGb2N1cygpO1xuICAgIHRoaXMuX2VtaXRPbkNsb3NlZEV2ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIGNvbXBvbmVudCBpZiBpdCdzIG5vdCBhbHJlYWR5IG9wZW4sIHNhdmVzIGZvY3VzLCBvcGVucyB0aGUgb3ZlcmxheSwgYW5kIGVtaXRzIHRoZSBvcGVuZWQgZXZlbnQuXG4gICAqL1xuICBhc3luYyBvcGVuKCkge1xuICAgIGlmICh0aGlzLmlzT3BlbiB8fCB0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hZGRLZXlEb3duTGlzdGVuZXIoKTtcbiAgICB0aGlzLnNhdmVGb2N1cygpO1xuICAgIGF3YWl0IHRoaXMub3Blbk92ZXJsYXlJbnRlcm5hbCgpO1xuICAgIHRoaXMuX2VtaXRPbk9wZW5lZEV2ZW50KCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGFkZEtleURvd25MaXN0ZW5lcigpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlEKSkge1xuICAgICAgdGhpcy5vbktleURvd25IYW5kbGVyID0gKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSByZW1vdmVLZXlEb3duTGlzdGVuZXIoKSB7XG4gICAgaWYgKHRoaXMub25LZXlEb3duSGFuZGxlcikge1xuICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25IYW5kbGVyKTtcbiAgICAgIHRoaXMub25LZXlEb3duSGFuZGxlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBzYXZlRm9jdXMoKSB7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JRCkpIHtcbiAgICAgIHRoaXMuX2xhc3RBY3RpdmVFbGVtZW50ID0gdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSByZXN0b3JlRm9jdXMoKSB7XG4gICAgaWYgKHRoaXMuX2xhc3RBY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2xhc3RBY3RpdmVFbGVtZW50Py5mb2N1cz8uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBhc3luYyBvcGVuT3ZlcmxheUludGVybmFsKCkge1xuICAgIGNvbnN0IHRhcmdldFJlZiA9IHRoaXMuX3RhcmdldDtcbiAgICBpZiAoIXRhcmdldFJlZikgcmV0dXJuO1xuXG4gICAgLy8gQnVpbGQgcGFuZWwgY2xhc3Nlc1xuICAgIGNvbnN0IHBhbmVsQ2xhc3NlcyA9IFsnYXgtYW5pbWF0ZS1mYWRlSW4nLCAnYXgtYW5pbWF0ZS1mYXN0ZXInXTtcbiAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0RhcmsoKSkge1xuICAgICAgcGFuZWxDbGFzc2VzLnB1c2goJ2F4LWRhcmsnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFuZWxDbGFzcykge1xuICAgICAgcGFuZWxDbGFzc2VzLnB1c2godGhpcy5wYW5lbENsYXNzKTtcbiAgICB9XG5cbiAgICAvLyBEZXRlcm1pbmUgY29udGVudCB0byBkaXNwbGF5XG4gICAgbGV0IGNvbnRlbnRUb1JlbmRlcjogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBBWENvbXBvbmVudFR5cGU8dW5rbm93bj47XG4gICAgbGV0IGlucHV0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5jb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIGNvbnRlbnRUb1JlbmRlciA9IHRoaXMuY29udGVudDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNvbnRlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnRlbnRUb1JlbmRlciA9IHRoaXMuY29udGVudDtcbiAgICAgIGlucHV0cyA9IHRoaXMuY29udGV4dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudFRvUmVuZGVyID0gdGhpcy5fYmFzZVRlbXBsYXRlO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgb3ZlcmxheVxuICAgIHRoaXMuX292ZXJsYXlSZWYgPSBhd2FpdCB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNyZWF0ZShjb250ZW50VG9SZW5kZXIsIHtcbiAgICAgIGlucHV0cyxcbiAgICAgIGFuY2hvck9wdGlvbnM6IHtcbiAgICAgICAgYW5jaG9yOiB0YXJnZXRSZWYgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgIHBsYWNlbWVudDogdGhpcy5fcGxhY2VtZW50LFxuICAgICAgICBvZmZzZXRYOiB0aGlzLm9mZnNldFgsXG4gICAgICAgIG9mZnNldFk6IHRoaXMub2Zmc2V0WSxcbiAgICAgICAgYXV0b0ZsaXA6IHRydWUsXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogcGFuZWxDbGFzc2VzLFxuICAgICAgd2lkdGg6IHRoaXMud2lkdGgoKSxcbiAgICAgIG9uRGlzcG9zZTogKCkgPT4gdGhpcy5oYW5kbGVPdmVybGF5RGlzcG9zZWQoKSxcbiAgICAgIGFjdGlvblNoZWV0U3R5bGU6IHRoaXMuaXNBY3Rpb25zaGVldFN0eWxlLFxuICAgIH0pO1xuXG4gICAgLy8gU3RvcmUgY29tcG9uZW50IHJlZiBpZiBpdCdzIGEgY29tcG9uZW50XG4gICAgaWYgKHRoaXMuX292ZXJsYXlSZWYuaW5zdGFuY2UgJiYgJ2luc3RhbmNlJyBpbiB0aGlzLl9vdmVybGF5UmVmLmluc3RhbmNlKSB7XG4gICAgICB0aGlzLl9jb21wb25lbnRSZWYgPSB0aGlzLl9vdmVybGF5UmVmLmluc3RhbmNlIGFzIHVua25vd24gYXMgQ29tcG9uZW50UmVmPHVua25vd24+O1xuICAgICAgaWYgKHRoaXMuY29udGV4dCAmJiB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UsIHRoaXMuY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQmluZCBvdmVybGF5IGV2ZW50c1xuICAgIHRoaXMuYmluZE92ZXJsYXlFdmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIG92ZXJsYXkgaXMgY3VycmVudGx5IG9wZW4uXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVJlZiAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBhY3Rpb25zaGVldCBzdHlsZSBzaG91bGQgYmUgYXBwbGllZC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNBY3Rpb25zaGVldFN0eWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBsYXRmb3JtLmlzKCdTTScpICYmIHRoaXMuYWRhcHRpdml0eUVuYWJsZWQ7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHVwZGF0ZU9mZnNldCgpIHtcbiAgICB0aGlzLl9wbGFjZW1lbnRzPy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICBpZiAodGhpcy5vZmZzZXRZICE9IG51bGwpIHAub2Zmc2V0WSA9IHRoaXMub2Zmc2V0WTtcbiAgICAgIGlmICh0aGlzLm9mZnNldFggIT0gbnVsbCkgcC5vZmZzZXRYID0gdGhpcy5vZmZzZXRYO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBvdmVybGF5IGFuZCBmb2N1c2VzIG9uIGl0LlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZVBvc2l0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX292ZXJsYXlSZWY/LnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgdGhpcy5mb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgdGhlIG92ZXJsYXkgZWxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBmb2N1cygpOiB2b2lkIHtcbiAgICAvLyBPcHRpb25hbCBmb2N1cyBiZWhhdmlvclxuICB9XG5cbiAgLyoqXG4gICAqIEJyaW5ncyB0aGlzIHBvcG92ZXIgdG8gdGhlIGZyb250IG9mIGFsbCBvdGhlciBvdmVybGF5cy5cbiAgICovXG4gIHB1YmxpYyBicmluZ1RvRnJvbnQoKTogdm9pZCB7XG4gICAgdGhpcy5fb3ZlcmxheVJlZj8uYnJpbmdUb0Zyb250KCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGluaXRpYWxpemVSZXNpemVPYnNlcnZlcigpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JRCkgfHwgIXRoaXMuX292ZXJsYXlSZWY/Lm92ZXJsYXlFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCk7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICB0aGlzLnJlc2l6ZSQubmV4dCgpO1xuICAgIH0pO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50KTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMucmVzaXplJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCk7XG4gICAgdGhpcy5yZXNpemUkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5yZW1vdmVUYXJnZXRFdmVudHMoKTtcbiAgICB0aGlzLnJlbW92ZU92ZXJsYXlFdmVudHMoKTtcbiAgICB0aGlzLnJlbW92ZUtleURvd25MaXN0ZW5lcigpO1xuICAgIGlmICh0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNiYXNlVGVtcGxhdGU+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXPopoverComponent } from './popover.component';\nimport * as i0 from \"@angular/core\";\nexport class AXPopoverModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPopoverModule, imports: [CommonModule, AXPopoverComponent], exports: [AXPopoverComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPopoverModule, imports: [CommonModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPopoverModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, AXPopoverComponent],\n exports: [AXPopoverComponent],\n providers: [],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3BvcG92ZXIvc3JjL2xpYi9wb3BvdmVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFPekQsTUFBTSxPQUFPLGVBQWU7K0dBQWYsZUFBZTtnSEFBZixlQUFlLFlBSmhCLFlBQVksRUFBRSxrQkFBa0IsYUFDaEMsa0JBQWtCO2dIQUdqQixlQUFlLFlBSmhCLFlBQVk7OzRGQUlYLGVBQWU7a0JBTDNCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDO29CQUMzQyxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDN0IsU0FBUyxFQUFFLEVBQUU7aUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBWFBvcG92ZXJDb21wb25lbnRdLFxuICBleHBvcnRzOiBbQVhQb3BvdmVyQ29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQb3BvdmVyTW9kdWxlIHt9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMtcG9wb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvYWNvcmV4LWNvbXBvbmVudHMtcG9wb3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":";;;;;;;;;AAQA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,SAAS,eAAe,CAAC;AACxD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1C,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAC7C,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACtD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI;AACpC;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI;AAC/B;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI;AACtC;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,EAAE;AAC/B;AACA,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI;AACxC;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI;AAClC;AACA,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE;AACpC;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK;AAC9B,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,aAAa,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzF;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,CAAC;AACzB;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,CAAC;AACzB;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE;AACxE,cAAc,kBAAkB,CAAC,cAAc;AAC/C,cAAc,kBAAkB,CAAC,YAAY,CAAC;AAC9C;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACvD;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW;AAC1C;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI;AACjC;AACA,QAAQ,IAAI,CAAC,OAAO,GAAG,QAAQ;AAC/B;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,UAAU;AAClC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,KAAK;AAChC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,GAAG;AAC7B;AACA;AACA;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,GAAG;AAC9B;AACA;AACA;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,KAAK;AACtC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAE;AAC1C;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAE;AAC1C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,QAAQ,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,SAAS;AAC7B,IAAI;AACJ,IAAI,IAAI,QAAQ,CAAC,CAAC,EAAE;AACpB,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC;AAC1B,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;AAC3C,YAAY,IAAI,CAAC,KAAK,EAAE;AACxB,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,OAAO,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,QAAQ;AAC5B,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE;AACnB,QAAQ,IAAI,CAAC,SAAS,CAAC;AACvB,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,aAAa,EAAE,MAAM;AACjC,gBAAgB,IAAI,CAAC,YAAY,EAAE;AACnC,YAAY,CAAC;AACb,SAAS,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,OAAO,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,QAAQ;AAC5B,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE;AACnB,QAAQ,IAAI,CAAC,SAAS,CAAC;AACvB,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,aAAa,EAAE,MAAM;AACjC,gBAAgB,IAAI,CAAC,YAAY,EAAE;AACnC,YAAY,CAAC;AACb,SAAS,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,OAAO;AAC3B,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE;AAClB,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACjC,QAAQ,IAAI,CAAC,YAAY,OAAO;AAChC,YAAY,IAAI,CAAC,OAAO,GAAG,CAAC;AAC5B,aAAa,IAAI,CAAC,YAAY,UAAU;AACxC,YAAY,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,aAAa;AAC1C,aAAa,IAAI,OAAO,CAAC,EAAE,cAAc,IAAI,UAAU;AACvD,YAAY,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,cAAc,EAAE;AAC7C,QAAQ,IAAI,CAAC,gBAAgB,EAAE;AAC/B,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,SAAS,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,UAAU;AAC9B,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,SAAS,CAAC,CAAC,EAAE;AACrB,QAAQ,IAAI,CAAC,SAAS,CAAC;AACvB,YAAY,IAAI,EAAE,WAAW;AAC7B,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK;AACrC,gBAAgB,MAAM,SAAS,GAAG,kBAAkB,CAAC,CAAC,CAAC;AACvD,gBAAgB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,kBAAkB;AACzF,gBAAgB,IAAI,CAAC,YAAY,EAAE;AACnC,gBAAgB,IAAI,IAAI,CAAC,WAAW,EAAE;AACtC,oBAAoB,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;AACrD,gBAAgB;AAChB,YAAY,CAAC;AACb,SAAS,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,YAAY,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,aAAa;AACjC,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,OAAO;AAC3B,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE;AAClB,QAAQ,IAAI,CAAC,SAAS,CAAC;AACvB,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,aAAa,EAAE,MAAM;AACjC,gBAAgB,IAAI,CAAC,gBAAgB,EAAE;AACvC,YAAY,CAAC;AACb,SAAS,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,OAAO,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,QAAQ;AAC5B,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE;AACnB,QAAQ,IAAI,CAAC,SAAS,CAAC;AACvB,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,aAAa,EAAE,MAAM;AACjC,gBAAgB,IAAI,CAAC,gBAAgB,EAAE;AACvC,YAAY,CAAC;AACb,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,IAAI,SAAS,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,UAAU;AAC9B,IAAI;AACJ,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE;AACzB,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK;AAC/B,QAAQ,IAAI,CAAC,gBAAgB,EAAE;AAC/B,IAAI;AACJ,IAAI,IAAI,UAAU,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,WAAW;AAC/B,IAAI;AACJ,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE;AAC1B,QAAQ,IAAI,CAAC,WAAW,GAAG,KAAK;AAChC,QAAQ,IAAI,CAAC,gBAAgB,EAAE;AAC/B,IAAI;AACJ;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC3B,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;AAC9C,SAAS,CAAC;AACV,IAAI;AACJ;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC3B,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;AAC9C,SAAS,CAAC;AACV,IAAI;AACJ;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AAC1D,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE;AAC/B,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,aAAa,GAAG,EAAE;AAC/B,IAAI;AACJ;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACjC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO;AACzB,YAAY;AACZ,QAAQ,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;AACvE,QAAQ,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;AACvE,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE;AACrC,YAAY,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;AAC1G,gBAAgB,IAAI,CAAC,IAAI,EAAE;AAC3B,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,EAAE;AACtC,YAAY,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;AAC3G,gBAAgB,IAAI,CAAC,KAAK,EAAE;AAC5B,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;AACjE,YAAY,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;AAC3D,YAAY,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM;AAC9D,gBAAgB,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;AACtE,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc;AAC/D,QAAQ,IAAI,CAAC,cAAc;AAC3B,YAAY;AACZ,QAAQ,cAAc,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM;AACnD;AACA,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;AACzC,YAAY,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,KAAK;AAC/C,gBAAgB,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM;AACnC,gBAAgB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE;AACjG,oBAAoB,IAAI,CAAC,KAAK,EAAE;AAChC,gBAAgB;AAChB,YAAY,CAAC;AACb,YAAY,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC;AAClF,QAAQ;AACR;AACA,QAAQ,IAAI,CAAC,wBAAwB,EAAE;AACvC,QAAQ,UAAU,CAAC,MAAM;AACzB,YAAY,cAAc,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM;AACvD,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;AAC1B,IAAI;AACJ;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACvC,YAAY,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC;AACrF,YAAY,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAC5C,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,qBAAqB,GAAG;AAC5B;AACA,QAAQ,IAAI,CAAC,wBAAwB,EAAE;AACvC,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI;AAC/B,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI;AACjC,QAAQ,IAAI,CAAC,YAAY,EAAE;AAC3B,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACjC,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;AAChD,IAAI;AACJ;AACA;AACA;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,wBAAwB,EAAE;AACvC,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AACtC,YAAY,IAAI,CAAC,WAAW,GAAG,IAAI;AACnC,QAAQ;AACR,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI;AACjC,QAAQ,IAAI,CAAC,YAAY,EAAE;AAC3B,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACjC,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,IAAI,GAAG;AACjB,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC1C,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACjC,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,QAAQ,MAAM,IAAI,CAAC,mBAAmB,EAAE;AACxC,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACjC,IAAI;AACJ;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAChD,YAAY,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,KAAK;AAC3C,gBAAgB,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;AACxC,oBAAoB,IAAI,CAAC,KAAK,EAAE;AAChC,gBAAgB;AAChB,YAAY,CAAC;AACb,YAAY,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC5E,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACnC,YAAY,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC/E,YAAY,IAAI,CAAC,gBAAgB,GAAG,IAAI;AACxC,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAChD,YAAY,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AACjE,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,IAAI,CAAC,kBAAkB,YAAY,WAAW,EAAE;AAC5D,YAAY,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI;AAC9C,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,MAAM,mBAAmB,GAAG;AAChC,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO;AACtC,QAAQ,IAAI,CAAC,SAAS;AACtB,YAAY;AACZ;AACA,QAAQ,MAAM,YAAY,GAAG,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;AACvE,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;AACpC,YAAY,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AACxC,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAY,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9C,QAAQ;AACR;AACA,QAAQ,IAAI,eAAe;AAC3B,QAAQ,IAAI,MAAM;AAClB,QAAQ,IAAI,IAAI,CAAC,OAAO,YAAY,WAAW,EAAE;AACjD,YAAY,eAAe,GAAG,IAAI,CAAC,OAAO;AAC1C,QAAQ;AACR,aAAa,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;AACrD,YAAY,eAAe,GAAG,IAAI,CAAC,OAAO;AAC1C,YAAY,MAAM,GAAG,IAAI,CAAC,OAAO;AACjC,QAAQ;AACR,aAAa;AACb,YAAY,eAAe,GAAG,IAAI,CAAC,aAAa;AAChD,QAAQ;AACR;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,eAAe,EAAE;AAC7E,YAAY,MAAM;AAClB,YAAY,aAAa,EAAE;AAC3B,gBAAgB,MAAM,EAAE,SAAS;AACjC,gBAAgB,SAAS,EAAE,IAAI,CAAC,UAAU;AAC1C,gBAAgB,OAAO,EAAE,IAAI,CAAC,OAAO;AACrC,gBAAgB,OAAO,EAAE,IAAI,CAAC,OAAO;AACrC,gBAAgB,QAAQ,EAAE,IAAI;AAC9B,aAAa;AACb,YAAY,UAAU,EAAE,YAAY;AACpC,YAAY,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AAC/B,YAAY,SAAS,EAAE,MAAM,IAAI,CAAC,qBAAqB,EAAE;AACzD,YAAY,gBAAgB,EAAE,IAAI,CAAC,kBAAkB;AACrD,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAClF,YAAY,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAC1D,YAAY,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7D,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;AACxE,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,IAAI,CAAC,iBAAiB,EAAE;AAChC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI;AACxC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,kBAAkB,GAAG;AAC7B,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB;AAC/D,IAAI;AACJ;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK;AACzC,YAAY,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;AACpC,gBAAgB,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AACxC,YAAY,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;AACpC,gBAAgB,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AACxC,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE;AAC1C,QAAQ,IAAI,CAAC,KAAK,EAAE;AACpB,IAAI;AACJ;AACA;AACA;AACA,IAAI,KAAK,GAAG;AACZ;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE;AACxC,IAAI;AACJ;AACA,IAAI,wBAAwB,GAAG;AAC/B,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE;AACtF,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,wBAAwB,EAAE;AACvC,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM;AACvD,YAAY,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AAC/B,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACpE,IAAI;AACJ;AACA,IAAI,wBAAwB,GAAG;AAC/B,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;AACjC,YAAY,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AAC5C,YAAY,IAAI,CAAC,cAAc,GAAG,IAAI;AACtC,QAAQ;AACR,IAAI;AACJ,IAAI,QAAQ,GAAG;AACf,QAAQ,KAAK,CAAC,QAAQ,EAAE;AACxB,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM;AACrC,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE;AAC7B,gBAAgB,IAAI,CAAC,cAAc,EAAE;AACrC,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,wBAAwB,EAAE;AACvC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC/B,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACjC,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AACtC,YAAY,IAAI,CAAC,WAAW,GAAG,IAAI;AACnC,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACvL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE;AACprE,YAAY,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,kBAAkB,EAAE;AAC9E,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE;AACrE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,4EAA4E,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACrW;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC;AAC7H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE;AAChJ,wBAAwB,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,kBAAkB,EAAE;AAC1F,wBAAwB,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE;AACjF,qBAAqB,EAAE,QAAQ,EAAE,4EAA4E,EAAE;AAC/G,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;AACnI,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACvD,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;ACxiBZ,MAAM,eAAe,CAAC;AAC7B,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;AACjL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAC/M,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAC5J;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AAC1H,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,OAAO,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC;AAC/D,oBAAoB,OAAO,EAAE,CAAC,kBAAkB,CAAC;AACjD,oBAAoB,SAAS,EAAE,EAAE;AACjC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AChBb;AACA;AACA;;;;"}
|
|
1
|
+
{"version":3,"file":"acorex-components-popover.mjs","sources":["../tmp-esm2022/popover/lib/popover.component.js","../tmp-esm2022/popover/lib/popover.module.js","../tmp-esm2022/popover/acorex-components-popover.js"],"sourcesContent":["import { AXComponent, AXFocusableComponent, MXBaseComponent, convertToPlacement, } from '@acorex/cdk/common';\nimport { AXOverlayService } from '@acorex/cdk/overlay';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXHtmlUtil } from '@acorex/core/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DOCUMENT, ElementRef, EventEmitter, Input, Output, PLATFORM_ID, TemplateRef, ViewChild, ViewEncapsulation, afterNextRender, inject, input, } from '@angular/core';\nimport { Subject, delay, fromEvent } from 'rxjs';\nimport * as i0 from \"@angular/core\";\n/**\n * @category Components\n * A popover component with custom encapsulation and change detection settings.\n */\nexport class AXPopoverComponent extends MXBaseComponent {\n constructor() {\n super(...arguments);\n this.platform = inject(AXPlatform);\n this.document = inject(DOCUMENT);\n this.platformID = inject(PLATFORM_ID);\n this.overlayService = inject(AXOverlayService);\n this.onKeyDownHandler = null;\n /** @ignore */\n this._overlayRef = null;\n /** @ignore */\n this._lastActiveElement = null;\n /** @ignore */\n this._targetEvents = {};\n /** @ignore */\n this._outsideClickHandler = null;\n /** @ignore */\n this.resizeObserver = null;\n /** @ignore */\n this.resize$ = new Subject();\n /** @ignore */\n this._disabled = false;\n this.width = input('fit-content', ...(ngDevMode ? [{ debugName: \"width\" }] : []));\n this.#init = afterNextRender(() => {\n const defaultPlacementDirection = AXHtmlUtil.isRtl(this.getHostElement()) ? 'bottom-end' : 'bottom-start';\n if (!this.placement)\n this.placement = defaultPlacementDirection;\n const converted = this.placement\n ? convertToPlacement(this.placement)\n : convertToPlacement(defaultPlacementDirection);\n this._placements = converted;\n this.resize$.subscribe(() => {\n if (this.isOpen) {\n this.updatePosition();\n }\n });\n });\n /** @ignore */\n this._offsetX = 0;\n /** @ignore */\n this._offsetY = 0;\n /** @ignore */\n this._placements = [];\n /** @ignore */\n this._placement = null;\n /** @ignore */\n this._componentRef = null;\n /** @ignore */\n this._openOn = 'toggle';\n /** @ignore */\n this._closeOn = 'clickOut';\n /**\n * Determines if a backdrop should be displayed behind the popover.\n */\n this.hasBackdrop = false;\n /**\n * Delay in milliseconds before the popover opens after a trigger event.\n */\n this._openAfter = 200;\n /**\n * Delay in milliseconds before the popover closes after a trigger event.\n */\n this._closeAfter = 200;\n /**\n * Enables or disables adaptivity.\n */\n this.adaptivityEnabled = false;\n /**\n * Emits when the component is opened.\n * @event\n */\n this.onOpened = new EventEmitter();\n /**\n * Emits when the component is closed.\n * @event\n */\n this.onClosed = new EventEmitter();\n }\n #init;\n /**\n * Gets or sets whether the popover is disabled.\n * When disabled, the popover will not open and will close if already open.\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(v) {\n this._disabled = v;\n if (this._disabled && this.isOpen) {\n this.close();\n }\n }\n /**\n * Gets or sets the horizontal offset and updates it accordingly.\n */\n get offsetX() {\n return this._offsetX;\n }\n /**\n * Sets the horizontal offset and updates it with a callback.\n */\n set offsetX(v) {\n this.setOption({\n name: 'offsetX',\n value: v,\n afterCallback: () => {\n this.updateOffset();\n },\n });\n }\n /**\n * Vertical offset with update callback.\n */\n get offsetY() {\n return this._offsetY;\n }\n /**\n * Sets the vertical offset and updates the component position.\n */\n set offsetY(v) {\n this.setOption({\n name: 'offsetY',\n value: v,\n afterCallback: () => {\n this.updateOffset();\n },\n });\n }\n /**\n * Gets or sets the target element, supporting Element, ElementRef, or MXBaseComponent.\n */\n get target() {\n return this._target;\n }\n /**\n * Sets the target element and updates event bindings.\n */\n set target(v) {\n this.removeTargetEvents();\n if (v instanceof Element)\n this._target = v;\n else if (v instanceof ElementRef)\n this._target = v.nativeElement;\n else if (typeof v?.getHostElement == 'function')\n this._target = v.getHostElement();\n this.bindTargetEvents();\n }\n /**\n * Gets the current placement of the component.\n */\n get placement() {\n return this._placement;\n }\n /**\n * Sets the component's placement and updates its position settings.\n */\n set placement(v) {\n this.setOption({\n name: 'placement',\n value: v,\n afterCallback: (o, n) => {\n if (!n)\n return;\n const converted = convertToPlacement(n);\n this._placements = converted;\n this.updateOffset();\n if (this._overlayRef) {\n this._overlayRef.updatePosition();\n }\n },\n });\n }\n /**\n * Gets the reference to the component.\n */\n get componentRef() {\n return this._componentRef;\n }\n /**\n * Gets or sets the trigger for opening the popover and updates target events.\n */\n get openOn() {\n return this._openOn;\n }\n /**\n * Sets the trigger for opening the popover and updates target events.\n */\n set openOn(v) {\n this.setOption({\n name: 'openOn',\n value: v,\n afterCallback: () => {\n this.bindTargetEvents();\n },\n });\n }\n /**\n * Gets or sets the trigger for closing the popover.\n */\n get closeOn() {\n return this._closeOn;\n }\n /**\n * Sets the trigger for closing the popover and rebinds target events.\n */\n set closeOn(v) {\n this.setOption({\n name: 'closeOn',\n value: v,\n afterCallback: () => {\n this.bindTargetEvents();\n },\n });\n }\n get openAfter() {\n return this._openAfter;\n }\n set openAfter(value) {\n this._openAfter = value;\n this.bindTargetEvents();\n }\n get closeAfter() {\n return this._closeAfter;\n }\n set closeAfter(value) {\n this._closeAfter = value;\n this.bindTargetEvents();\n }\n /** @ignore */\n _emitOnOpenedEvent() {\n this.onOpened.emit({\n component: this,\n htmlElement: this.getHostElement(),\n });\n }\n /** @ignore */\n _emitOnClosedEvent() {\n this.onClosed.emit({\n component: this,\n htmlElement: this.getHostElement(),\n });\n }\n /** @ignore */\n removeTargetEvents() {\n Object.entries(this._targetEvents).forEach((e) => {\n e[1]?.unsubscribe();\n });\n this._targetEvents = {};\n }\n /** @ignore */\n bindTargetEvents() {\n this.removeTargetEvents();\n if (!this._target)\n return;\n const targetMouseEnter$ = fromEvent(this._target, 'mouseenter');\n const targetMouseLeave$ = fromEvent(this._target, 'mouseleave');\n if (this.openOn === 'hover') {\n this._targetEvents.mouseenter = targetMouseEnter$.pipe(delay(this.openAfter)).subscribe(() => {\n this.open();\n });\n }\n if (this.closeOn === 'leave') {\n this._targetEvents.mouseleave = targetMouseLeave$.pipe(delay(this.closeAfter)).subscribe(() => {\n this.close();\n });\n }\n if (this.openOn === 'click' || this.openOn === 'toggle') {\n const click$ = fromEvent(this._target, 'click');\n this._targetEvents.click = click$.subscribe(() => {\n this.openOn === 'toggle' ? this.toggle() : this.open();\n });\n }\n }\n /** @ignore */\n bindOverlayEvents() {\n const overlayElement = this._overlayRef?.overlayElement;\n if (!overlayElement)\n return;\n overlayElement.style.pointerEvents = 'none';\n // Outside click handler\n if (this.closeOn === 'clickOut') {\n this._outsideClickHandler = (e) => {\n const el = e.target;\n if (this.isOpen && !this._target?.contains(el) && !overlayElement?.contains(el)) {\n this.close();\n }\n };\n this.document.addEventListener('mousedown', this._outsideClickHandler);\n }\n // Resize observer\n this.initializeResizeObserver();\n setTimeout(() => {\n overlayElement.style.pointerEvents = 'auto';\n }, this.openAfter);\n }\n /** @ignore */\n removeOverlayEvents() {\n if (this._outsideClickHandler) {\n this.document.removeEventListener('mousedown', this._outsideClickHandler);\n this._outsideClickHandler = null;\n }\n }\n /** @ignore */\n handleOverlayDisposed() {\n // Called when overlay is disposed externally (e.g., by scroll)\n this.disconnectResizeObserver();\n this.removeOverlayEvents();\n this.removeKeyDownListener();\n this._overlayRef = null;\n this._componentRef = null;\n this.restoreFocus();\n this._emitOnClosedEvent();\n }\n /**\n * Toggles the component's open state.\n */\n toggle() {\n this.isOpen ? this.close() : this.open();\n }\n /**\n * Closes the component if it's open, detaches the overlay, restores focus, and emits the closed event.\n */\n close() {\n if (!this.isOpen) {\n return;\n }\n this.disconnectResizeObserver();\n this.removeOverlayEvents();\n this.removeKeyDownListener();\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n this._componentRef = null;\n this.restoreFocus();\n this._emitOnClosedEvent();\n }\n /**\n * Opens the component if it's not already open, saves focus, opens the overlay, and emits the opened event.\n */\n async open() {\n if (this.isOpen || this.disabled) {\n return;\n }\n this.addKeyDownListener();\n this.saveFocus();\n await this.openOverlayInternal();\n this._emitOnOpenedEvent();\n }\n /** @ignore */\n addKeyDownListener() {\n if (isPlatformBrowser(this.platformID)) {\n this.onKeyDownHandler = (e) => {\n if (e.key === 'Escape') {\n this.close();\n }\n };\n this.document.addEventListener('keydown', this.onKeyDownHandler);\n }\n }\n /** @ignore */\n removeKeyDownListener() {\n if (this.onKeyDownHandler) {\n this.document.removeEventListener('keydown', this.onKeyDownHandler);\n this.onKeyDownHandler = null;\n }\n }\n /** @ignore */\n saveFocus() {\n if (isPlatformBrowser(this.platformID)) {\n this._lastActiveElement = this.document.activeElement;\n }\n }\n /** @ignore */\n restoreFocus() {\n if (this._lastActiveElement instanceof HTMLElement) {\n this._lastActiveElement?.focus?.();\n }\n }\n /** @ignore */\n async openOverlayInternal() {\n const targetRef = this._target;\n if (!targetRef)\n return;\n // Build panel classes\n const panelClasses = ['ax-animate-fadeIn', 'ax-animate-faster'];\n if (this.platform.isDark()) {\n panelClasses.push('ax-dark');\n }\n if (this.panelClass) {\n panelClasses.push(this.panelClass);\n }\n // Determine content to display\n let contentToRender;\n let inputs;\n if (this.content instanceof TemplateRef) {\n contentToRender = this.content;\n }\n else if (typeof this.content === 'function') {\n contentToRender = this.content;\n inputs = this.context;\n }\n else {\n contentToRender = this._baseTemplate;\n }\n // Create the overlay\n this._overlayRef = await this.overlayService.create(contentToRender, {\n inputs,\n anchorOptions: {\n anchor: targetRef,\n placement: this._placement,\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n autoFlip: true,\n },\n panelClass: panelClasses,\n width: this.width(),\n onDispose: () => this.handleOverlayDisposed(),\n actionSheetStyle: this.isActionsheetStyle,\n });\n // Store component ref if it's a component\n if (this._overlayRef.instance && 'instance' in this._overlayRef.instance) {\n this._componentRef = this._overlayRef.instance;\n if (this.context && this._componentRef.instance) {\n Object.assign(this._componentRef.instance, this.context);\n }\n }\n // Bind overlay events\n this.bindOverlayEvents();\n }\n /**\n * Checks if the overlay is currently open.\n * @returns {boolean}\n */\n get isOpen() {\n return this._overlayRef !== null;\n }\n /**\n * Determines if the actionsheet style should be applied.\n * @returns {boolean}\n */\n get isActionsheetStyle() {\n return this.platform.is('SM') && this.adaptivityEnabled;\n }\n /** @ignore */\n updateOffset() {\n this._placements?.forEach((p) => {\n if (this.offsetY != null)\n p.offsetY = this.offsetY;\n if (this.offsetX != null)\n p.offsetX = this.offsetX;\n });\n }\n /**\n * Updates the position of the overlay and focuses on it.\n */\n updatePosition() {\n this._overlayRef?.updatePosition();\n this.focus();\n }\n /**\n * Focuses the overlay element.\n */\n focus() {\n // Optional focus behavior\n }\n /**\n * Brings this popover to the front of all other overlays.\n */\n bringToFront() {\n this._overlayRef?.bringToFront();\n }\n /** @ignore */\n initializeResizeObserver() {\n if (!isPlatformBrowser(this.platformID) || !this._overlayRef?.overlayElement) {\n return;\n }\n this.disconnectResizeObserver();\n this.resizeObserver = new ResizeObserver(() => {\n this.resize$.next();\n });\n this.resizeObserver.observe(this._overlayRef.overlayElement);\n }\n /** @ignore */\n disconnectResizeObserver() {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n }\n /** @ignore */\n ngOnDestroy() {\n this.disconnectResizeObserver();\n this.resize$.complete();\n this.removeTargetEvents();\n this.removeOverlayEvents();\n this.removeKeyDownListener();\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPopoverComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.3.16\", type: AXPopoverComponent, isStandalone: true, selector: \"ax-popover\", inputs: { width: { classPropertyName: \"width\", publicName: \"width\", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: \"disabled\", publicName: \"disabled\", isSignal: false, isRequired: false, transformFunction: null }, offsetX: { classPropertyName: \"offsetX\", publicName: \"offsetX\", isSignal: false, isRequired: false, transformFunction: null }, offsetY: { classPropertyName: \"offsetY\", publicName: \"offsetY\", isSignal: false, isRequired: false, transformFunction: null }, target: { classPropertyName: \"target\", publicName: \"target\", isSignal: false, isRequired: false, transformFunction: null }, placement: { classPropertyName: \"placement\", publicName: \"placement\", isSignal: false, isRequired: false, transformFunction: null }, content: { classPropertyName: \"content\", publicName: \"content\", isSignal: false, isRequired: false, transformFunction: null }, openOn: { classPropertyName: \"openOn\", publicName: \"openOn\", isSignal: false, isRequired: false, transformFunction: null }, closeOn: { classPropertyName: \"closeOn\", publicName: \"closeOn\", isSignal: false, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: \"hasBackdrop\", publicName: \"hasBackdrop\", isSignal: false, isRequired: false, transformFunction: null }, openAfter: { classPropertyName: \"openAfter\", publicName: \"openAfter\", isSignal: false, isRequired: false, transformFunction: null }, closeAfter: { classPropertyName: \"closeAfter\", publicName: \"closeAfter\", isSignal: false, isRequired: false, transformFunction: null }, backdropClass: { classPropertyName: \"backdropClass\", publicName: \"backdropClass\", isSignal: false, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: \"panelClass\", publicName: \"panelClass\", isSignal: false, isRequired: false, transformFunction: null }, adaptivityEnabled: { classPropertyName: \"adaptivityEnabled\", publicName: \"adaptivityEnabled\", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onOpened: \"onOpened\", onClosed: \"onClosed\" }, providers: [\n { provide: AXFocusableComponent, useExisting: AXPopoverComponent },\n { provide: AXComponent, useExisting: AXPopoverComponent },\n ], viewQueries: [{ propertyName: \"_baseTemplate\", first: true, predicate: [\"baseTemplate\"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: \"<ng-template #baseTemplate>\\n <ng-content></ng-content>\\n</ng-template>\\n\", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPopoverComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-popover', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [\n { provide: AXFocusableComponent, useExisting: AXPopoverComponent },\n { provide: AXComponent, useExisting: AXPopoverComponent },\n ], template: \"<ng-template #baseTemplate>\\n <ng-content></ng-content>\\n</ng-template>\\n\" }]\n }], propDecorators: { width: [{ type: i0.Input, args: [{ isSignal: true, alias: \"width\", required: false }] }], disabled: [{\n type: Input\n }], offsetX: [{\n type: Input\n }], offsetY: [{\n type: Input\n }], target: [{\n type: Input\n }], placement: [{\n type: Input\n }], _baseTemplate: [{\n type: ViewChild,\n args: ['baseTemplate', { static: true }]\n }], content: [{\n type: Input\n }], openOn: [{\n type: Input\n }], closeOn: [{\n type: Input\n }], hasBackdrop: [{\n type: Input\n }], openAfter: [{\n type: Input\n }], closeAfter: [{\n type: Input\n }], backdropClass: [{\n type: Input\n }], panelClass: [{\n type: Input\n }], adaptivityEnabled: [{\n type: Input\n }], onOpened: [{\n type: Output\n }], onClosed: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3BvcG92ZXIvc3JjL2xpYi9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvbGliL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFHWCxvQkFBb0IsRUFFcEIsZUFBZSxFQUNmLGtCQUFrQixHQUNuQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFFBQVEsRUFDUixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixNQUFNLEVBQ04sS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQWdCLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBTS9EOzs7R0FHRztBQVdILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxlQUFlO0lBVnZEOztRQVdVLGFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixlQUFVLEdBQUcsTUFBTSxD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QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNULEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsb0JBQW9CLEVBQUU7d0JBQ2xFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLG9CQUFvQixFQUFFO3FCQUMxRDs7c0JBMERBLEtBQUs7O3NCQWlCTCxLQUFLOztzQkF3QkwsS0FBSzs7c0JBd0JMLEtBQUs7O3NCQXlCTCxLQUFLOztzQkF3Q0wsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOztzQkFNMUMsS0FBSzs7c0JBU0wsS0FBSzs7c0JBd0JMLEtBQUs7O3NCQXFCTCxLQUFLOztzQkFRTCxLQUFLOztzQkFlTCxLQUFLOztzQkFhTCxLQUFLOztzQkFNTCxLQUFLOztzQkFNTCxLQUFLOztzQkFPTCxNQUFNOztzQkFPTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQVhDb21wb25lbnQsXG4gIEFYQ29ubmVjdGVkUG9zaXRpb24sXG4gIEFYRXZlbnQsXG4gIEFYRm9jdXNhYmxlQ29tcG9uZW50LFxuICBBWFBsYWNlbWVudFR5cGUsXG4gIE1YQmFzZUNvbXBvbmVudCxcbiAgY29udmVydFRvUGxhY2VtZW50LFxufSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhPdmVybGF5UmVmLCBBWE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBBWENvbXBvbmVudFR5cGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFBsYXRmb3JtIH0gZnJvbSAnQGFjb3JleC9jb3JlL3BsYXRmb3JtJztcbmltcG9ydCB7IEFYSHRtbFV0aWwgfSBmcm9tICdAYWNvcmV4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBET0NVTUVOVCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBpbmplY3QsXG4gIGlucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZGVsYXksIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgdHlwZSBBWFBvcG92ZXJPcGVuVHJpZ2dlciA9ICdtYW51YWwnIHwgJ2NsaWNrJyB8ICdob3ZlcicgfCAndG9nZ2xlJztcblxuZXhwb3J0IHR5cGUgQVhQb3BvdmVyQ2xvc2VUcmlnZ2VyID0gJ21hbnVhbCcgfCAnY2xpY2tPdXQnIHwgJ2xlYXZlJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29tcG9uZW50c1xuICogQSBwb3BvdmVyIGNvbXBvbmVudCB3aXRoIGN1c3RvbSBlbmNhcHN1bGF0aW9uIGFuZCBjaGFuZ2UgZGV0ZWN0aW9uIHNldHRpbmdzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1wb3BvdmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBBWEZvY3VzYWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYUG9wb3ZlckNvbXBvbmVudCB9LFxuICAgIHsgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFBvcG92ZXJDb21wb25lbnQgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQb3BvdmVyQ29tcG9uZW50IGV4dGVuZHMgTVhCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBwbGF0Zm9ybSA9IGluamVjdChBWFBsYXRmb3JtKTtcbiAgcHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgcGxhdGZvcm1JRCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgb3ZlcmxheVNlcnZpY2UgPSBpbmplY3QoQVhPdmVybGF5U2VydmljZSk7XG5cbiAgcHJpdmF0ZSBvbktleURvd25IYW5kbGVyOiAoKGU6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfb3ZlcmxheVJlZjogQVhPdmVybGF5UmVmPHVua25vd24+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfbGFzdEFjdGl2ZUVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF90YXJnZXRFdmVudHM6IHtcbiAgICBtb3VzZWVudGVyPzogU3Vic2NyaXB0aW9uO1xuICAgIG1vdXNlbGVhdmU/OiBTdWJzY3JpcHRpb247XG4gICAgY2xpY2s/OiBTdWJzY3JpcHRpb247XG4gIH0gPSB7fTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9vdXRzaWRlQ2xpY2tIYW5kbGVyOiAoKGU6IE1vdXNlRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSByZXNpemUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIHJlYWRvbmx5IHdpZHRoID0gaW5wdXQ8c3RyaW5nPignZml0LWNvbnRlbnQnKTtcblxuICAjaW5pdCA9IGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdFBsYWNlbWVudERpcmVjdGlvbiA9IEFYSHRtbFV0aWwuaXNSdGwodGhpcy5nZXRIb3N0RWxlbWVudCgpKSA/ICdib3R0b20tZW5kJyA6ICdib3R0b20tc3RhcnQnO1xuXG4gICAgaWYgKCF0aGlzLnBsYWNlbWVudCkgdGhpcy5wbGFjZW1lbnQgPSBkZWZhdWx0UGxhY2VtZW50RGlyZWN0aW9uO1xuXG4gICAgY29uc3QgY29udmVydGVkID0gdGhpcy5wbGFjZW1lbnRcbiAgICAgID8gY29udmVydFRvUGxhY2VtZW50KHRoaXMucGxhY2VtZW50KVxuICAgICAgOiBjb252ZXJ0VG9QbGFjZW1lbnQoZGVmYXVsdFBsYWNlbWVudERpcmVjdGlvbik7XG5cbiAgICB0aGlzLl9wbGFjZW1lbnRzID0gY29udmVydGVkO1xuXG4gICAgdGhpcy5yZXNpemUkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIHBvcG92ZXIgaXMgZGlzYWJsZWQuXG4gICAqIFdoZW4gZGlzYWJsZWQsIHRoZSBwb3BvdmVyIHdpbGwgbm90IG9wZW4gYW5kIHdpbGwgY2xvc2UgaWYgYWxyZWFkeSBvcGVuLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgcHVibGljIHNldCBkaXNhYmxlZCh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2O1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX29mZnNldFggPSAwO1xuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGhvcml6b250YWwgb2Zmc2V0IGFuZCB1cGRhdGVzIGl0IGFjY29yZGluZ2x5LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBvZmZzZXRYKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX29mZnNldFg7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaG9yaXpvbnRhbCBvZmZzZXQgYW5kIHVwZGF0ZXMgaXQgd2l0aCBhIGNhbGxiYWNrLlxuICAgKi9cbiAgcHVibGljIHNldCBvZmZzZXRYKHY6IG51bWJlcikge1xuICAgIHRoaXMuc2V0T3B0aW9uKHtcbiAgICAgIG5hbWU6ICdvZmZzZXRYJyxcbiAgICAgIHZhbHVlOiB2LFxuICAgICAgYWZ0ZXJDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZU9mZnNldCgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX29mZnNldFkgPSAwO1xuXG4gIC8qKlxuICAgKiBWZXJ0aWNhbCBvZmZzZXQgd2l0aCB1cGRhdGUgY2FsbGJhY2suXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IG9mZnNldFkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fb2Zmc2V0WTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2ZXJ0aWNhbCBvZmZzZXQgYW5kIHVwZGF0ZXMgdGhlIGNvbXBvbmVudCBwb3NpdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzZXQgb2Zmc2V0WSh2OiBudW1iZXIpIHtcbiAgICB0aGlzLnNldE9wdGlvbih7XG4gICAgICBuYW1lOiAnb2Zmc2V0WScsXG4gICAgICB2YWx1ZTogdixcbiAgICAgIGFmdGVyQ2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVPZmZzZXQoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF90YXJnZXQhOiBFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHRhcmdldCBlbGVtZW50LCBzdXBwb3J0aW5nIEVsZW1lbnQsIEVsZW1lbnRSZWYsIG9yIE1YQmFzZUNvbXBvbmVudC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgdGFyZ2V0KCk6IEVsZW1lbnQgfCBFbGVtZW50UmVmIHwgTVhCYXNlQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5fdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRhcmdldCBlbGVtZW50IGFuZCB1cGRhdGVzIGV2ZW50IGJpbmRpbmdzLlxuICAgKi9cbiAgcHVibGljIHNldCB0YXJnZXQodjogRWxlbWVudCB8IEVsZW1lbnRSZWYgfCBNWEJhc2VDb21wb25lbnQpIHtcbiAgICB0aGlzLnJlbW92ZVRhcmdldEV2ZW50cygpO1xuICAgIGlmICh2IGluc3RhbmNlb2YgRWxlbWVudCkgdGhpcy5fdGFyZ2V0ID0gdjtcbiAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgRWxlbWVudFJlZikgdGhpcy5fdGFyZ2V0ID0gdi5uYXRpdmVFbGVtZW50O1xuICAgIGVsc2UgaWYgKHR5cGVvZiB2Py5nZXRIb3N0RWxlbWVudCA9PSAnZnVuY3Rpb24nKSB0aGlzLl90YXJnZXQgPSB2LmdldEhvc3RFbGVtZW50KCk7XG4gICAgdGhpcy5iaW5kVGFyZ2V0RXZlbnRzKCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9wbGFjZW1lbnRzOiBBWENvbm5lY3RlZFBvc2l0aW9uW10gPSBbXTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9wbGFjZW1lbnQ6IEFYUGxhY2VtZW50VHlwZSA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgcGxhY2VtZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHBsYWNlbWVudCgpOiBBWFBsYWNlbWVudFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY29tcG9uZW50J3MgcGxhY2VtZW50IGFuZCB1cGRhdGVzIGl0cyBwb3NpdGlvbiBzZXR0aW5ncy5cbiAgICovXG4gIHB1YmxpYyBzZXQgcGxhY2VtZW50KHY6IEFYUGxhY2VtZW50VHlwZSkge1xuICAgIHRoaXMuc2V0T3B0aW9uKHtcbiAgICAgIG5hbWU6ICdwbGFjZW1lbnQnLFxuICAgICAgdmFsdWU6IHYsXG4gICAgICBhZnRlckNhbGxiYWNrOiAobywgbikgPT4ge1xuICAgICAgICBpZiAoIW4pIHJldHVybjtcbiAgICAgICAgY29uc3QgY29udmVydGVkID0gY29udmVydFRvUGxhY2VtZW50KG4pO1xuICAgICAgICB0aGlzLl9wbGFjZW1lbnRzID0gY29udmVydGVkO1xuICAgICAgICB0aGlzLnVwZGF0ZU9mZnNldCgpO1xuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgICAgIHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX2NvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPHVua25vd24+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIGdldCBjb21wb25lbnRSZWYoKTogQ29tcG9uZW50UmVmPHVua25vd24+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudFJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb2xkcyB0aGUgY29udGV4dCBkYXRhIGZvciB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIGNvbnRleHQ6IHVua25vd247XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQFZpZXdDaGlsZCgnYmFzZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgX2Jhc2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGNvbnRlbnQgdG8gYmUgZGlzcGxheWVkLCB3aGljaCBjYW4gYmUgYSB0ZW1wbGF0ZSBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGNvbnRlbnQ6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgQVhDb21wb25lbnRUeXBlPHVua25vd24+O1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX29wZW5PbjogQVhQb3BvdmVyT3BlblRyaWdnZXIgPSAndG9nZ2xlJztcblxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSB0cmlnZ2VyIGZvciBvcGVuaW5nIHRoZSBwb3BvdmVyIGFuZCB1cGRhdGVzIHRhcmdldCBldmVudHMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IG9wZW5PbigpOiBBWFBvcG92ZXJPcGVuVHJpZ2dlciB7XG4gICAgcmV0dXJuIHRoaXMuX29wZW5PbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0cmlnZ2VyIGZvciBvcGVuaW5nIHRoZSBwb3BvdmVyIGFuZCB1cGRhdGVzIHRhcmdldCBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgc2V0IG9wZW5Pbih2OiBBWFBvcG92ZXJPcGVuVHJpZ2dlcikge1xuICAgIHRoaXMuc2V0T3B0aW9uKHtcbiAgICAgIG5hbWU6ICdvcGVuT24nLFxuICAgICAgdmFsdWU6IHYsXG4gICAgICBhZnRlckNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuYmluZFRhcmdldEV2ZW50cygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX2Nsb3NlT246IEFYUG9wb3ZlckNsb3NlVHJpZ2dlciA9ICdjbGlja091dCc7XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgdHJpZ2dlciBmb3IgY2xvc2luZyB0aGUgcG9wb3Zlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgY2xvc2VPbigpOiBBWFBvcG92ZXJDbG9zZVRyaWdnZXIge1xuICAgIHJldHVybiB0aGlzLl9jbG9zZU9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRyaWdnZXIgZm9yIGNsb3NpbmcgdGhlIHBvcG92ZXIgYW5kIHJlYmluZHMgdGFyZ2V0IGV2ZW50cy5cbiAgICovXG4gIHB1YmxpYyBzZXQgY2xvc2VPbih2OiBBWFBvcG92ZXJDbG9zZVRyaWdnZXIpIHtcbiAgICB0aGlzLnNldE9wdGlvbih7XG4gICAgICBuYW1lOiAnY2xvc2VPbicsXG4gICAgICB2YWx1ZTogdixcbiAgICAgIGFmdGVyQ2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5iaW5kVGFyZ2V0RXZlbnRzKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYSBiYWNrZHJvcCBzaG91bGQgYmUgZGlzcGxheWVkIGJlaGluZCB0aGUgcG9wb3Zlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGhhc0JhY2tkcm9wID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERlbGF5IGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIHBvcG92ZXIgb3BlbnMgYWZ0ZXIgYSB0cmlnZ2VyIGV2ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBfb3BlbkFmdGVyID0gMjAwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgb3BlbkFmdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9vcGVuQWZ0ZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0IG9wZW5BZnRlcih2YWx1ZSkge1xuICAgIHRoaXMuX29wZW5BZnRlciA9IHZhbHVlO1xuICAgIHRoaXMuYmluZFRhcmdldEV2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGF5IGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIHBvcG92ZXIgY2xvc2VzIGFmdGVyIGEgdHJpZ2dlciBldmVudC5cbiAgICovXG4gIHByaXZhdGUgX2Nsb3NlQWZ0ZXIgPSAyMDA7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBjbG9zZUFmdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9jbG9zZUFmdGVyO1xuICB9XG5cbiAgcHVibGljIHNldCBjbG9zZUFmdGVyKHZhbHVlKSB7XG4gICAgdGhpcy5fY2xvc2VBZnRlciA9IHZhbHVlO1xuICAgIHRoaXMuYmluZFRhcmdldEV2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENTUyBjbGFzcyB0byBhcHBseSB0byB0aGUgYmFja2Ryb3AgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGJhY2tkcm9wQ2xhc3M6IHN0cmluZztcblxuICAvKipcbiAgICogQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIHRoZSBwYW5lbCBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KClcbiAgcGFuZWxDbGFzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGFkYXB0aXZpdHkuXG4gICAqL1xuICBASW5wdXQoKVxuICBhZGFwdGl2aXR5RW5hYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIHRoZSBjb21wb25lbnQgaXMgb3BlbmVkLlxuICAgKiBAZXZlbnRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBvbk9wZW5lZDogRXZlbnRFbWl0dGVyPEFYRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWEV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIHRoZSBjb21wb25lbnQgaXMgY2xvc2VkLlxuICAgKiBAZXZlbnRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBvbkNsb3NlZDogRXZlbnRFbWl0dGVyPEFYRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWEV2ZW50PigpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX2VtaXRPbk9wZW5lZEV2ZW50KCkge1xuICAgIHRoaXMub25PcGVuZWQuZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBodG1sRWxlbWVudDogdGhpcy5nZXRIb3N0RWxlbWVudCgpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfZW1pdE9uQ2xvc2VkRXZlbnQoKSB7XG4gICAgdGhpcy5vbkNsb3NlZC5lbWl0KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGh0bWxFbGVtZW50OiB0aGlzLmdldEhvc3RFbGVtZW50KCksXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHJlbW92ZVRhcmdldEV2ZW50cygpOiB2b2lkIHtcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl90YXJnZXRFdmVudHMpLmZvckVhY2goKGUpID0+IHtcbiAgICAgIGVbMV0/LnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gICAgdGhpcy5fdGFyZ2V0RXZlbnRzID0ge307XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGJpbmRUYXJnZXRFdmVudHMoKSB7XG4gICAgdGhpcy5yZW1vdmVUYXJnZXRFdmVudHMoKTtcbiAgICBpZiAoIXRoaXMuX3RhcmdldCkgcmV0dXJuO1xuICAgIGNvbnN0IHRhcmdldE1vdXNlRW50ZXIkID0gZnJvbUV2ZW50KHRoaXMuX3RhcmdldCwgJ21vdXNlZW50ZXInKTtcbiAgICBjb25zdCB0YXJnZXRNb3VzZUxlYXZlJCA9IGZyb21FdmVudCh0aGlzLl90YXJnZXQsICdtb3VzZWxlYXZlJyk7XG5cbiAgICBpZiAodGhpcy5vcGVuT24gPT09ICdob3ZlcicpIHtcbiAgICAgIHRoaXMuX3RhcmdldEV2ZW50cy5tb3VzZWVudGVyID0gdGFyZ2V0TW91c2VFbnRlciQucGlwZShkZWxheSh0aGlzLm9wZW5BZnRlcikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xvc2VPbiA9PT0gJ2xlYXZlJykge1xuICAgICAgdGhpcy5fdGFyZ2V0RXZlbnRzLm1vdXNlbGVhdmUgPSB0YXJnZXRNb3VzZUxlYXZlJC5waXBlKGRlbGF5KHRoaXMuY2xvc2VBZnRlcikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wZW5PbiA9PT0gJ2NsaWNrJyB8fCB0aGlzLm9wZW5PbiA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgIGNvbnN0IGNsaWNrJCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLl90YXJnZXQsICdjbGljaycpO1xuICAgICAgdGhpcy5fdGFyZ2V0RXZlbnRzLmNsaWNrID0gY2xpY2skLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMub3Blbk9uID09PSAndG9nZ2xlJyA/IHRoaXMudG9nZ2xlKCkgOiB0aGlzLm9wZW4oKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgYmluZE92ZXJsYXlFdmVudHMoKSB7XG4gICAgY29uc3Qgb3ZlcmxheUVsZW1lbnQgPSB0aGlzLl9vdmVybGF5UmVmPy5vdmVybGF5RWxlbWVudDtcbiAgICBpZiAoIW92ZXJsYXlFbGVtZW50KSByZXR1cm47XG4gICAgb3ZlcmxheUVsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcblxuICAgIC8vIE91dHNpZGUgY2xpY2sgaGFuZGxlclxuICAgIGlmICh0aGlzLmNsb3NlT24gPT09ICdjbGlja091dCcpIHtcbiAgICAgIHRoaXMuX291dHNpZGVDbGlja0hhbmRsZXIgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBlbCA9IGUudGFyZ2V0IGFzIEVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy5fdGFyZ2V0Py5jb250YWlucyhlbCkgJiYgIW92ZXJsYXlFbGVtZW50Py5jb250YWlucyhlbCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuX291dHNpZGVDbGlja0hhbmRsZXIpO1xuICAgIH1cblxuICAgIC8vIFJlc2l6ZSBvYnNlcnZlclxuICAgIHRoaXMuaW5pdGlhbGl6ZVJlc2l6ZU9ic2VydmVyKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIG92ZXJsYXlFbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XG4gICAgfSwgdGhpcy5vcGVuQWZ0ZXIpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSByZW1vdmVPdmVybGF5RXZlbnRzKCkge1xuICAgIGlmICh0aGlzLl9vdXRzaWRlQ2xpY2tIYW5kbGVyKSB7XG4gICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuX291dHNpZGVDbGlja0hhbmRsZXIpO1xuICAgICAgdGhpcy5fb3V0c2lkZUNsaWNrSGFuZGxlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBoYW5kbGVPdmVybGF5RGlzcG9zZWQoKSB7XG4gICAgLy8gQ2FsbGVkIHdoZW4gb3ZlcmxheSBpcyBkaXNwb3NlZCBleHRlcm5hbGx5IChlLmcuLCBieSBzY3JvbGwpXG4gICAgdGhpcy5kaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKTtcbiAgICB0aGlzLnJlbW92ZU92ZXJsYXlFdmVudHMoKTtcbiAgICB0aGlzLnJlbW92ZUtleURvd25MaXN0ZW5lcigpO1xuICAgIHRoaXMuX292ZXJsYXlSZWYgPSBudWxsO1xuICAgIHRoaXMuX2NvbXBvbmVudFJlZiA9IG51bGw7XG4gICAgdGhpcy5yZXN0b3JlRm9jdXMoKTtcbiAgICB0aGlzLl9lbWl0T25DbG9zZWRFdmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGNvbXBvbmVudCdzIG9wZW4gc3RhdGUuXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgdGhpcy5pc09wZW4gPyB0aGlzLmNsb3NlKCkgOiB0aGlzLm9wZW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGNvbXBvbmVudCBpZiBpdCdzIG9wZW4sIGRldGFjaGVzIHRoZSBvdmVybGF5LCByZXN0b3JlcyBmb2N1cywgYW5kIGVtaXRzIHRoZSBjbG9zZWQgZXZlbnQuXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCk7XG4gICAgdGhpcy5yZW1vdmVPdmVybGF5RXZlbnRzKCk7XG4gICAgdGhpcy5yZW1vdmVLZXlEb3duTGlzdGVuZXIoKTtcblxuICAgIGlmICh0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbXBvbmVudFJlZiA9IG51bGw7XG4gICAgdGhpcy5yZXN0b3JlRm9jdXMoKTtcbiAgICB0aGlzLl9lbWl0T25DbG9zZWRFdmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBjb21wb25lbnQgaWYgaXQncyBub3QgYWxyZWFkeSBvcGVuLCBzYXZlcyBmb2N1cywgb3BlbnMgdGhlIG92ZXJsYXksIGFuZCBlbWl0cyB0aGUgb3BlbmVkIGV2ZW50LlxuICAgKi9cbiAgYXN5bmMgb3BlbigpIHtcbiAgICBpZiAodGhpcy5pc09wZW4gfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYWRkS2V5RG93bkxpc3RlbmVyKCk7XG4gICAgdGhpcy5zYXZlRm9jdXMoKTtcbiAgICBhd2FpdCB0aGlzLm9wZW5PdmVybGF5SW50ZXJuYWwoKTtcbiAgICB0aGlzLl9lbWl0T25PcGVuZWRFdmVudCgpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBhZGRLZXlEb3duTGlzdGVuZXIoKSB7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JRCkpIHtcbiAgICAgIHRoaXMub25LZXlEb3duSGFuZGxlciA9IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uS2V5RG93bkhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgcmVtb3ZlS2V5RG93bkxpc3RlbmVyKCkge1xuICAgIGlmICh0aGlzLm9uS2V5RG93bkhhbmRsZXIpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duSGFuZGxlcik7XG4gICAgICB0aGlzLm9uS2V5RG93bkhhbmRsZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgc2F2ZUZvY3VzKCkge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSUQpKSB7XG4gICAgICB0aGlzLl9sYXN0QWN0aXZlRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBFbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgcmVzdG9yZUZvY3VzKCkge1xuICAgIGlmICh0aGlzLl9sYXN0QWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICB0aGlzLl9sYXN0QWN0aXZlRWxlbWVudD8uZm9jdXM/LigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgYXN5bmMgb3Blbk92ZXJsYXlJbnRlcm5hbCgpIHtcbiAgICBjb25zdCB0YXJnZXRSZWYgPSB0aGlzLl90YXJnZXQ7XG4gICAgaWYgKCF0YXJnZXRSZWYpIHJldHVybjtcblxuICAgIC8vIEJ1aWxkIHBhbmVsIGNsYXNzZXNcbiAgICBjb25zdCBwYW5lbENsYXNzZXMgPSBbJ2F4LWFuaW1hdGUtZmFkZUluJywgJ2F4LWFuaW1hdGUtZmFzdGVyJ107XG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXNEYXJrKCkpIHtcbiAgICAgIHBhbmVsQ2xhc3Nlcy5wdXNoKCdheC1kYXJrJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhbmVsQ2xhc3MpIHtcbiAgICAgIHBhbmVsQ2xhc3Nlcy5wdXNoKHRoaXMucGFuZWxDbGFzcyk7XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIGNvbnRlbnQgdG8gZGlzcGxheVxuICAgIGxldCBjb250ZW50VG9SZW5kZXI6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgQVhDb21wb25lbnRUeXBlPHVua25vd24+O1xuICAgIGxldCBpbnB1dHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMuY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICBjb250ZW50VG9SZW5kZXIgPSB0aGlzLmNvbnRlbnQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5jb250ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb250ZW50VG9SZW5kZXIgPSB0aGlzLmNvbnRlbnQ7XG4gICAgICBpbnB1dHMgPSB0aGlzLmNvbnRleHQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnRUb1JlbmRlciA9IHRoaXMuX2Jhc2VUZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIG92ZXJsYXlcbiAgICB0aGlzLl9vdmVybGF5UmVmID0gYXdhaXQgdGhpcy5vdmVybGF5U2VydmljZS5jcmVhdGUoY29udGVudFRvUmVuZGVyLCB7XG4gICAgICBpbnB1dHMsXG4gICAgICBhbmNob3JPcHRpb25zOiB7XG4gICAgICAgIGFuY2hvcjogdGFyZ2V0UmVmIGFzIEhUTUxFbGVtZW50LFxuICAgICAgICBwbGFjZW1lbnQ6IHRoaXMuX3BsYWNlbWVudCxcbiAgICAgICAgb2Zmc2V0WDogdGhpcy5vZmZzZXRYLFxuICAgICAgICBvZmZzZXRZOiB0aGlzLm9mZnNldFksXG4gICAgICAgIGF1dG9GbGlwOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHBhbmVsQ2xhc3M6IHBhbmVsQ2xhc3NlcyxcbiAgICAgIHdpZHRoOiB0aGlzLndpZHRoKCksXG4gICAgICBvbkRpc3Bvc2U6ICgpID0+IHRoaXMuaGFuZGxlT3ZlcmxheURpc3Bvc2VkKCksXG4gICAgICBhY3Rpb25TaGVldFN0eWxlOiB0aGlzLmlzQWN0aW9uc2hlZXRTdHlsZSxcbiAgICB9KTtcblxuICAgIC8vIFN0b3JlIGNvbXBvbmVudCByZWYgaWYgaXQncyBhIGNvbXBvbmVudFxuICAgIGlmICh0aGlzLl9vdmVybGF5UmVmLmluc3RhbmNlICYmICdpbnN0YW5jZScgaW4gdGhpcy5fb3ZlcmxheVJlZi5pbnN0YW5jZSkge1xuICAgICAgdGhpcy5fY29tcG9uZW50UmVmID0gdGhpcy5fb3ZlcmxheVJlZi5pbnN0YW5jZSBhcyB1bmtub3duIGFzIENvbXBvbmVudFJlZjx1bmtub3duPjtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQgJiYgdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLCB0aGlzLmNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJpbmQgb3ZlcmxheSBldmVudHNcbiAgICB0aGlzLmJpbmRPdmVybGF5RXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBvdmVybGF5IGlzIGN1cnJlbnRseSBvcGVuLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX292ZXJsYXlSZWYgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgYWN0aW9uc2hlZXQgc3R5bGUgc2hvdWxkIGJlIGFwcGxpZWQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzQWN0aW9uc2hlZXRTdHlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybS5pcygnU00nKSAmJiB0aGlzLmFkYXB0aXZpdHlFbmFibGVkO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSB1cGRhdGVPZmZzZXQoKSB7XG4gICAgdGhpcy5fcGxhY2VtZW50cz8uZm9yRWFjaCgocCkgPT4ge1xuICAgICAgaWYgKHRoaXMub2Zmc2V0WSAhPSBudWxsKSBwLm9mZnNldFkgPSB0aGlzLm9mZnNldFk7XG4gICAgICBpZiAodGhpcy5vZmZzZXRYICE9IG51bGwpIHAub2Zmc2V0WCA9IHRoaXMub2Zmc2V0WDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgb3ZlcmxheSBhbmQgZm9jdXNlcyBvbiBpdC5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVQb3NpdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9vdmVybGF5UmVmPy51cGRhdGVQb3NpdGlvbigpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1c2VzIHRoZSBvdmVybGF5IGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgZm9jdXMoKTogdm9pZCB7XG4gICAgLy8gT3B0aW9uYWwgZm9jdXMgYmVoYXZpb3JcbiAgfVxuXG4gIC8qKlxuICAgKiBCcmluZ3MgdGhpcyBwb3BvdmVyIHRvIHRoZSBmcm9udCBvZiBhbGwgb3RoZXIgb3ZlcmxheXMuXG4gICAqL1xuICBwdWJsaWMgYnJpbmdUb0Zyb250KCk6IHZvaWQge1xuICAgIHRoaXMuX292ZXJsYXlSZWY/LmJyaW5nVG9Gcm9udCgpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplUmVzaXplT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSUQpIHx8ICF0aGlzLl9vdmVybGF5UmVmPy5vdmVybGF5RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNpemUkLm5leHQoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlcikge1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpO1xuICAgIHRoaXMucmVzaXplJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMucmVtb3ZlVGFyZ2V0RXZlbnRzKCk7XG4gICAgdGhpcy5yZW1vdmVPdmVybGF5RXZlbnRzKCk7XG4gICAgdGhpcy5yZW1vdmVLZXlEb3duTGlzdGVuZXIoKTtcbiAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjYmFzZVRlbXBsYXRlPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXPopoverComponent } from './popover.component';\nimport * as i0 from \"@angular/core\";\nexport class AXPopoverModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPopoverModule, imports: [CommonModule, AXPopoverComponent], exports: [AXPopoverComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPopoverModule, imports: [CommonModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPopoverModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, AXPopoverComponent],\n exports: [AXPopoverComponent],\n providers: [],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3BvcG92ZXIvc3JjL2xpYi9wb3BvdmVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFPekQsTUFBTSxPQUFPLGVBQWU7K0dBQWYsZUFBZTtnSEFBZixlQUFlLFlBSmhCLFlBQVksRUFBRSxrQkFBa0IsYUFDaEMsa0JBQWtCO2dIQUdqQixlQUFlLFlBSmhCLFlBQVk7OzRGQUlYLGVBQWU7a0JBTDNCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDO29CQUMzQyxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDN0IsU0FBUyxFQUFFLEVBQUU7aUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBWFBvcG92ZXJDb21wb25lbnRdLFxuICBleHBvcnRzOiBbQVhQb3BvdmVyQ29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQb3BvdmVyTW9kdWxlIHt9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMtcG9wb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvYWNvcmV4LWNvbXBvbmVudHMtcG9wb3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
package/kanban/index.d.ts
CHANGED
|
@@ -130,7 +130,8 @@ interface AXKanbanBeforeDropEvent extends NXNativeEvent<AXKanbanComponent, Mouse
|
|
|
130
130
|
currentStatusKey: any;
|
|
131
131
|
previousIndex: number;
|
|
132
132
|
currentIndex: number;
|
|
133
|
-
canceled: boolean
|
|
133
|
+
canceled: boolean;
|
|
134
|
+
wait: (promise: Promise<any>) => void;
|
|
134
135
|
}
|
|
135
136
|
|
|
136
137
|
export { AXKanbanComponent };
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acorex/components",
|
|
3
|
-
"version": "20.3.
|
|
3
|
+
"version": "20.3.26",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@acorex/core": "20.3.
|
|
6
|
-
"@acorex/cdk": "20.3.
|
|
5
|
+
"@acorex/core": "20.3.26",
|
|
6
|
+
"@acorex/cdk": "20.3.26",
|
|
7
7
|
"@angular/common": "^20.0.0",
|
|
8
8
|
"@angular/core": "^20.0.0",
|
|
9
9
|
"@angular/cdk": "^20.0.0",
|
|
@@ -265,14 +265,14 @@
|
|
|
265
265
|
"types": "./loading/index.d.ts",
|
|
266
266
|
"default": "./fesm2022/acorex-components-loading.mjs"
|
|
267
267
|
},
|
|
268
|
-
"./loading-dialog": {
|
|
269
|
-
"types": "./loading-dialog/index.d.ts",
|
|
270
|
-
"default": "./fesm2022/acorex-components-loading-dialog.mjs"
|
|
271
|
-
},
|
|
272
268
|
"./map": {
|
|
273
269
|
"types": "./map/index.d.ts",
|
|
274
270
|
"default": "./fesm2022/acorex-components-map.mjs"
|
|
275
271
|
},
|
|
272
|
+
"./loading-dialog": {
|
|
273
|
+
"types": "./loading-dialog/index.d.ts",
|
|
274
|
+
"default": "./fesm2022/acorex-components-loading-dialog.mjs"
|
|
275
|
+
},
|
|
276
276
|
"./media-viewer": {
|
|
277
277
|
"types": "./media-viewer/index.d.ts",
|
|
278
278
|
"default": "./fesm2022/acorex-components-media-viewer.mjs"
|
|
@@ -361,14 +361,14 @@
|
|
|
361
361
|
"types": "./range-slider/index.d.ts",
|
|
362
362
|
"default": "./fesm2022/acorex-components-range-slider.mjs"
|
|
363
363
|
},
|
|
364
|
-
"./rest-api-generator": {
|
|
365
|
-
"types": "./rest-api-generator/index.d.ts",
|
|
366
|
-
"default": "./fesm2022/acorex-components-rest-api-generator.mjs"
|
|
367
|
-
},
|
|
368
364
|
"./rate-picker": {
|
|
369
365
|
"types": "./rate-picker/index.d.ts",
|
|
370
366
|
"default": "./fesm2022/acorex-components-rate-picker.mjs"
|
|
371
367
|
},
|
|
368
|
+
"./rest-api-generator": {
|
|
369
|
+
"types": "./rest-api-generator/index.d.ts",
|
|
370
|
+
"default": "./fesm2022/acorex-components-rest-api-generator.mjs"
|
|
371
|
+
},
|
|
372
372
|
"./result": {
|
|
373
373
|
"types": "./result/index.d.ts",
|
|
374
374
|
"default": "./fesm2022/acorex-components-result.mjs"
|
package/popover/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ type AXPopoverCloseTrigger = 'manual' | 'clickOut' | 'leave';
|
|
|
11
11
|
* A popover component with custom encapsulation and change detection settings.
|
|
12
12
|
*/
|
|
13
13
|
declare class AXPopoverComponent extends MXBaseComponent implements OnDestroy {
|
|
14
|
+
#private;
|
|
14
15
|
private platform;
|
|
15
16
|
private document;
|
|
16
17
|
private platformID;
|
|
@@ -68,8 +69,6 @@ declare class AXPopoverComponent extends MXBaseComponent implements OnDestroy {
|
|
|
68
69
|
*/
|
|
69
70
|
set target(v: Element | ElementRef | MXBaseComponent);
|
|
70
71
|
/** @ignore */
|
|
71
|
-
private _defaultPlacements;
|
|
72
|
-
/** @ignore */
|
|
73
72
|
private _placements;
|
|
74
73
|
/** @ignore */
|
|
75
74
|
private _placement;
|
|
@@ -219,7 +218,6 @@ declare class AXPopoverComponent extends MXBaseComponent implements OnDestroy {
|
|
|
219
218
|
private initializeResizeObserver;
|
|
220
219
|
/** @ignore */
|
|
221
220
|
private disconnectResizeObserver;
|
|
222
|
-
protected ngOnInit(): void;
|
|
223
221
|
/** @ignore */
|
|
224
222
|
ngOnDestroy(): void;
|
|
225
223
|
static ɵfac: i0.ɵɵFactoryDeclaration<AXPopoverComponent, never>;
|