{"version":3,"file":"ng-hub-ui-board.mjs","sources":["../../../projects/board/src/lib/directives/board-column-footer.directive.ts","../../../projects/board/src/lib/directives/board-column-header.directive.ts","../../../projects/board/src/lib/directives/card-drag-preview.directive.ts","../../../projects/board/src/lib/directives/card-placeholder.directive.ts","../../../projects/board/src/lib/directives/card-template.directive.ts","../../../projects/board/src/lib/directives/column-drag-preview.directive.ts","../../../projects/board/src/lib/directives/column-placeholder.directive.ts","../../../projects/board/src/lib/models/array-helpers.ts","../../../projects/board/src/lib/components/board/board.component.ts","../../../projects/board/src/lib/components/board/board.component.html","../../../projects/board/src/lib/board.module.ts","../../../projects/board/src/lib/pipes/invert-color.pipe.ts","../../../projects/board/src/lib/models/drag-drop-event.ts","../../../projects/board/src/public-api.ts","../../../projects/board/src/ng-hub-ui-board.ts"],"sourcesContent":["import { Directive, TemplateRef } from '@angular/core';\n\n/**\n * Directive that allows customization of column footer templates within board columns.\n * \n * This directive enables developers to define custom templates for column footers,\n * perfect for displaying summary information, quick actions, statistics,\n * or any column-specific controls at the bottom of each column.\n * \n * @publicApi\n * \n * @example\n * ```html\n * <ng-template columnFooterTpt let-column=\"column\">\n *   <div class=\"custom-footer\">\n *     <div class=\"column-summary\">\n *       <span>Total: {{ column.cards.length }}</span>\n *       <span>Priority Items: {{ getPriorityItems(column) }}</span>\n *     </div>\n *     <button (click)=\"quickAddCard(column)\">Quick Add</button>\n *   </div>\n * </ng-template>\n * ```\n */\n@Directive({\n\tselector: '[columnFooterTpt]',\n\tstandalone: true\n})\nexport class BoardColumnFooterDirective {\n\t/**\n\t * Creates a new BoardColumnFooterDirective instance.\n\t * \n\t * @param templateRef - The template reference that contains the custom column footer layout\n\t */\n\tconstructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n/**\n * Directive that allows customization of column header templates within board columns.\n * \n * This directive provides the ability to define custom templates for rendering column headers,\n * giving developers full control over the appearance and functionality of column headers\n * including titles, descriptions, actions, and metadata display.\n * \n * @publicApi\n * \n * @example\n * ```html\n * <ng-template columnHeaderTpt let-column=\"column\">\n *   <div class=\"custom-header\">\n *     <h2>{{ column.title }}</h2>\n *     <span class=\"card-count\">{{ column.cards.length }} items</span>\n *     <button (click)=\"addCard(column)\">Add Card</button>\n *   </div>\n * </ng-template>\n * ```\n */\n@Directive({\n\tselector: '[columnHeaderTpt]',\n\tstandalone: true\n})\nexport class BoardColumnHeaderDirective {\n\t/**\n\t * Creates a new BoardColumnHeaderDirective instance.\n\t * \n\t * @param templateRef - The template reference that contains the custom column header layout\n\t */\n\tconstructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n/**\n * Directive that allows customization of the drag preview (drag image) for cards.\n *\n * This directive defines a custom template for the visual element that follows\n * the cursor when dragging a card. The template receives the dragged card and\n * the source column as context variables.\n *\n * @publicApi\n *\n * @example\n * ```html\n * <hub-board [board]=\"board\">\n *   <ng-template cardDragPreview let-card=\"card\" let-column=\"column\">\n *     <div class=\"custom-drag-preview\">\n *       <i class=\"bi bi-grip-vertical\"></i>\n *       <span>{{ card.title }}</span>\n *     </div>\n *   </ng-template>\n * </hub-board>\n * ```\n */\n@Directive({\n\tselector: '[cardDragPreview]',\n\tstandalone: true\n})\nexport class CardDragPreviewDirective {\n\t/**\n\t * Creates a new CardDragPreviewDirective instance.\n\t *\n\t * @param templateRef - The template reference that contains the custom drag preview layout\n\t */\n\tconstructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Structural directive used to define a custom placeholder template for cards during drag operations.\n *\n * When a card is being dragged, the placeholder shows where the card will be dropped.\n * By default, an empty space with a dashed border is shown. Use this directive to customize\n * the placeholder appearance.\n *\n * @usageNotes\n *\n * ### Basic usage\n *\n * ```html\n * <hub-board [board]=\"board\">\n *   <ng-template cardPlaceholder let-card=\"card\" let-column=\"column\">\n *     <div class=\"my-custom-placeholder\">\n *       <span>Drop \"{{ card?.title }}\" here</span>\n *     </div>\n *   </ng-template>\n * </hub-board>\n * ```\n *\n * ### Context variables\n *\n * The template context provides:\n * - `card`: The card being dragged (may be undefined)\n * - `column`: The target column where the card will be dropped\n *\n * @publicApi\n */\n@Directive({\n\tselector: '[cardPlaceholder]',\n\tstandalone: true\n})\nexport class CardPlaceholderDirective {}\n","import { Directive, TemplateRef } from '@angular/core';\n\n/**\n * Directive that allows customization of card templates within board columns.\n * \n * This directive is used to define custom templates for rendering board cards.\n * It provides access to the template reference that can be used by the board component\n * to render cards with custom layouts and styling.\n * \n * @publicApi\n * \n * @example\n * ```html\n * <ng-template cardTpt let-card=\"item\" let-column=\"column\">\n *   <div class=\"custom-card\">\n *     <h3>{{ card.title }}</h3>\n *     <p>{{ card.description }}</p>\n *   </div>\n * </ng-template>\n * ```\n */\n@Directive({\n\tselector: '[cardTpt]',\n\tstandalone: true\n})\nexport class CardTemplateDirective {\n\t/**\n\t * Creates a new CardTemplateDirective instance.\n\t * \n\t * @param templateRef - The template reference that contains the custom card layout\n\t */\n\tconstructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n/**\n * Directive that allows customization of the drag preview (drag image) for columns.\n *\n * This directive defines a custom template for the visual element that follows\n * the cursor when dragging a column. The template receives the dragged column\n * as a context variable.\n *\n * @publicApi\n *\n * @example\n * ```html\n * <hub-board [board]=\"board\">\n *   <ng-template columnDragPreview let-column=\"column\">\n *     <div class=\"custom-column-drag-preview\">\n *       <i class=\"bi bi-kanban\"></i>\n *       <span>{{ column.title }}</span>\n *       <span class=\"badge\">{{ column.cards.length }} cards</span>\n *     </div>\n *   </ng-template>\n * </hub-board>\n * ```\n */\n@Directive({\n\tselector: '[columnDragPreview]',\n\tstandalone: true\n})\nexport class ColumnDragPreviewDirective {\n\t/**\n\t * Creates a new ColumnDragPreviewDirective instance.\n\t *\n\t * @param templateRef - The template reference that contains the custom drag preview layout\n\t */\n\tconstructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Structural directive used to define a custom placeholder template for columns during drag operations.\n *\n * When a column is being dragged, the placeholder shows where the column will be dropped.\n * By default, an empty space with a dashed border is shown. Use this directive to customize\n * the placeholder appearance.\n *\n * @usageNotes\n *\n * ### Basic usage\n *\n * ```html\n * <hub-board [board]=\"board\">\n *   <ng-template columnPlaceholder let-column=\"column\">\n *     <div class=\"my-custom-placeholder\">\n *       <span>Drop \"{{ column?.title }}\" here</span>\n *     </div>\n *   </ng-template>\n * </hub-board>\n * ```\n *\n * ### Context variables\n *\n * The template context provides:\n * - `column`: The column being dragged (may be undefined)\n *\n * @publicApi\n */\n@Directive({\n\tselector: '[columnPlaceholder]',\n\tstandalone: true\n})\nexport class ColumnPlaceholderDirective {}\n","/**\n * Array move/transfer helpers used when reordering cards and columns.\n *\n * These come from the shared `ng-hub-ui-utils` drag-and-drop core — a dependency-free,\n * behaviour-identical implementation shared by every ng-hub-ui library — and are re-exported\n * here so the board's public API is unchanged.\n *\n * @publicApi\n */\nexport { moveItemInArray, transferArrayItem } from 'ng-hub-ui-utils';\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n\tComponent,\n\tElementRef,\n\tSignal,\n\tTemplateRef,\n\tcomputed,\n\tcontentChild,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild\n} from '@angular/core';\nimport { BoardColumnFooterDirective } from '../../directives/board-column-footer.directive';\nimport { BoardColumnHeaderDirective } from '../../directives/board-column-header.directive';\nimport { CardDragPreviewDirective } from '../../directives/card-drag-preview.directive';\nimport { CardPlaceholderDirective } from '../../directives/card-placeholder.directive';\nimport { CardTemplateDirective } from '../../directives/card-template.directive';\nimport { ColumnDragPreviewDirective } from '../../directives/column-drag-preview.directive';\nimport { ColumnPlaceholderDirective } from '../../directives/column-placeholder.directive';\nimport { Board } from '../../models/board';\nimport { BoardCard } from '../../models/board-card';\nimport { BoardColumn } from '../../models/board-column';\nimport { createNativeDragImage } from 'ng-hub-ui-utils';\nimport { moveItemInArray, transferArrayItem } from '../../models/array-helpers';\nimport { BoardDragItem, CardDragDropEvent, ColumnDragDropEvent } from '../../models/drag-drop-event';\nimport { ReachedEndEvent } from '../../models/reached-end-event';\n\n/**\n * Internal interface for tracking drag state.\n */\ninterface DragState {\n\ttype: 'column' | 'card';\n\tsourceColumnIndex: number;\n\tsourceCardIndex?: number;\n\titem: BoardColumn | BoardCard;\n\telement?: HTMLElement;\n}\n\n/**\n * Defines how the dragged element behaves visually during drag operations.\n * - 'ghost': Element becomes semi-transparent but remains visible and occupies space\n * - 'hide': Element is hidden but still occupies space (invisible placeholder)\n * - 'collapse': Element is completely hidden and its space is collapsed\n * @publicApi\n */\nexport type DragBehavior = 'ghost' | 'hide' | 'collapse';\n\n/**\n * Standalone Kanban-style board component that provides column-based drag-and-drop,\n * custom templates and infinite-scroll detection.\n *\n * @publicApi\n */\n@Component({\n\tselector: 'hub-board, hub-ui-board',\n\ttemplateUrl: './board.component.html',\n\tstyleUrl: './board.component.scss',\n\timports: [NgClass, NgTemplateOutlet],\n\thost: {\n\t\tclass: 'hub-board',\n\t\t'[attr.data-variant]': 'variant() ?? null',\n\t\t'[style.--hub-board-accent]': 'groupAccent()'\n\t}\n})\nexport class HubBoardComponent {\n\t/**\n\t * Reactive input containing the full board definition (columns and cards).\n\t */\n\treadonly board = input<Board>();\n\n\t/**\n\t * Semantic accent applied to the drag/drop placeholder. The built-in values\n\t * (`primary` / `success` / `danger` / `warning` / `info`) render with the\n\t * design-system tints; any other string is also accepted — the board reads\n\t * `--hub-sys-color-<variant>` from the host application, so a custom accent\n\t * palette interconnects with no changes to this library. Defaults to `primary`.\n\t */\n\treadonly variant = input<'primary' | 'success' | 'danger' | 'warning' | 'info' | (string & {}) | undefined>(undefined);\n\n\t/**\n\t * Inline accent fed to the board styles: `var(--hub-sys-color-<variant>)` for\n\t * the active variant, or `null` to keep the `primary` default. Keeps the\n\t * variant set open to any accent token the host application defines.\n\t */\n\treadonly groupAccent = computed(() => {\n\t\tconst variant = this.variant();\n\t\treturn variant ? `var(--hub-sys-color-${variant})` : null;\n\t});\n\n\t/**\n\t * Pixel threshold used when determining whether a column has reached scroll end.\n\t * Allows for fractional scroll values across different browsers.\n\t */\n\tprivate readonly scrollDetectionPadding = 1;\n\n\t/**\n\t * Internal signal to track column updates and force re-renders.\n\t */\n\tprivate readonly _columnsVersion = signal(0);\n\n\t/**\n\t * Derived list of board columns exposed as a signal to the template.\n\t * Depends on both the board input and internal version counter to ensure\n\t * re-renders after in-place array mutations.\n\t */\n\tcolumns: Signal<Array<BoardColumn>> = computed(() => {\n\t\t// Subscribe to version changes to force re-computation after mutations\n\t\tthis._columnsVersion();\n\t\treturn this.board()?.columns ?? [];\n\t});\n\n\t/**\n\t * When true, column reordering via drag-and-drop is disabled.\n\t */\n\treadonly columnSortingDisabled = input<boolean>(false);\n\n\t/**\n\t * Controls how dragged elements behave visually during drag operations.\n\t * - 'ghost': Element becomes semi-transparent (50% opacity) but remains visible\n\t * - 'hide': Element is hidden but still occupies its space\n\t * - 'collapse': Element is completely hidden and its space is collapsed (default)\n\t */\n\treadonly dragBehavior = input<DragBehavior>('collapse');\n\n\t/**\n\t * Custom card template supplied via the `cardTpt` structural directive.\n\t */\n\treadonly cardTpt = contentChild(CardTemplateDirective, {\n\t\tread: TemplateRef<unknown>\n\t});\n\n\t/**\n\t * Custom column header template supplied via the `columnHeaderTpt` structural directive.\n\t */\n\treadonly columnHeaderTpt = contentChild(BoardColumnHeaderDirective, {\n\t\tread: TemplateRef<unknown>\n\t});\n\n\t/**\n\t * Custom column footer template supplied via the `columnFooterTpt` structural directive.\n\t */\n\treadonly columnFooterTpt = contentChild(BoardColumnFooterDirective, {\n\t\tread: TemplateRef<unknown>\n\t});\n\n\t/**\n\t * Custom card placeholder template supplied via the `cardPlaceholder` structural directive.\n\t * Used to customize the appearance of the drop zone when dragging cards.\n\t */\n\treadonly cardPlaceholderTpt = contentChild(CardPlaceholderDirective, {\n\t\tread: TemplateRef<unknown>\n\t});\n\n\t/**\n\t * Custom column placeholder template supplied via the `columnPlaceholder` structural directive.\n\t * Used to customize the appearance of the drop zone when dragging columns.\n\t */\n\treadonly columnPlaceholderTpt = contentChild(ColumnPlaceholderDirective, {\n\t\tread: TemplateRef<unknown>\n\t});\n\n\t/**\n\t * Custom card drag preview template supplied via the `cardDragPreview` structural directive.\n\t * Used to customize the visual element that follows the cursor when dragging cards.\n\t * The template receives `card` (the dragged card) and `column` (the source column) as context.\n\t */\n\treadonly cardDragPreviewTpt = contentChild(CardDragPreviewDirective, {\n\t\tread: TemplateRef<unknown>\n\t});\n\n\t/**\n\t * Custom column drag preview template supplied via the `columnDragPreview` structural directive.\n\t * Used to customize the visual element that follows the cursor when dragging columns.\n\t * The template receives `column` (the dragged column) as context.\n\t */\n\treadonly columnDragPreviewTpt = contentChild(ColumnDragPreviewDirective, {\n\t\tread: TemplateRef<unknown>\n\t});\n\n\t/**\n\t * Reference to the hidden container where drag preview elements are rendered.\n\t */\n\treadonly dragPreviewContainer = viewChild<ElementRef<HTMLElement>>('dragPreviewContainer');\n\n\t/**\n\t * Disposer for the currently active custom drag preview, or `null`.\n\t */\n\tprivate dragPreviewDestroy: (() => void) | null = null;\n\n\t/**\n\t * Emits each time a card is clicked within the board.\n\t */\n\treadonly onCardClick = output<BoardCard>();\n\n\t/**\n\t * Emits when a card has been repositioned, either within the same column or into another column.\n\t */\n\treadonly onCardMoved = output<CardDragDropEvent<any>>();\n\n\t/**\n\t * Emits when columns are reordered through drag-and-drop.\n\t */\n\treadonly onColumnMoved = output<ColumnDragDropEvent<any>>();\n\n\t/**\n\t * Emits when a column body is scrolled to its end, enabling infinite-scroll behaviour.\n\t */\n\treadonly reachedEnd = output<ReachedEndEvent>();\n\n\t/**\n\t * Internal drag state tracking.\n\t */\n\treadonly dragState = signal<DragState | null>(null);\n\n\t/**\n\t * Signal for tracking the currently hovered column index during card drag.\n\t */\n\treadonly hoveredColumnIndex = signal<number | null>(null);\n\n\t/**\n\t * Signal for tracking the drop indicator position within a column.\n\t */\n\treadonly dropIndicatorIndex = signal<number | null>(null);\n\n\t/**\n\t * Signal for tracking the column drop indicator position.\n\t */\n\treadonly columnDropIndicatorIndex = signal<number | null>(null);\n\n\t/**\n\t * Default predicate that allows any card to be dropped into any column.\n\t *\n\t * @returns Always `true`, indicating that drop operations are permitted.\n\t */\n\tdefaultEnterPredicateFn = () => true;\n\n\t/**\n\t * Returns the card currently being dragged, if any.\n\t *\n\t * @returns The dragged card or null if no card is being dragged.\n\t */\n\tget draggedCard(): BoardCard | null {\n\t\tconst state = this.dragState();\n\t\treturn state?.type === 'card' ? (state.item as BoardCard) : null;\n\t}\n\n\t/**\n\t * Returns the column currently being dragged, if any.\n\t *\n\t * @returns The dragged column or null if no column is being dragged.\n\t */\n\tget draggedColumn(): BoardColumn | null {\n\t\tconst state = this.dragState();\n\t\treturn state?.type === 'column' ? (state.item as BoardColumn) : null;\n\t}\n\n\t/**\n\t * Emits the clicked card through {@link onCardClick}.\n\t *\n\t * @param item - The card that triggered the click event.\n\t */\n\tcardClick(item: BoardCard) {\n\t\tthis.onCardClick.emit(item);\n\t}\n\n\t/**\n\t * Track function for columns to ensure proper re-rendering.\n\t * Uses column id if available, otherwise falls back to index.\n\t *\n\t * @param index - The index of the column.\n\t * @param column - The column object.\n\t * @returns A unique identifier for the column.\n\t */\n\ttrackColumnById(index: number, column: BoardColumn): string | number {\n\t\treturn (column as any).id ?? index;\n\t}\n\n\t/**\n\t * Checks if the given column is currently being dragged.\n\t *\n\t * @param column - The column to check.\n\t * @returns Whether the column is being dragged.\n\t */\n\tisDraggingColumn(column: BoardColumn): boolean {\n\t\tconst state = this.dragState();\n\t\treturn state?.type === 'column' && state.item === column;\n\t}\n\n\t/**\n\t * Checks if the given card is currently being dragged.\n\t *\n\t * @param card - The card to check.\n\t * @returns Whether the card is being dragged.\n\t */\n\tisDraggingCard(card: BoardCard): boolean {\n\t\tconst state = this.dragState();\n\t\treturn state?.type === 'card' && state.item === card;\n\t}\n\n\t/**\n\t * Handles the drag start event for columns.\n\t *\n\t * @param event - The native drag event.\n\t * @param column - The column being dragged.\n\t * @param columnIndex - The index of the column in the board.\n\t */\n\tonColumnDragStart(event: DragEvent, column: BoardColumn, columnIndex: number): void {\n\t\tif (this.columnSortingDisabled() || column.disabled) {\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tconst element = event.currentTarget as HTMLElement;\n\n\t\tif (event.dataTransfer) {\n\t\t\tevent.dataTransfer.effectAllowed = 'move';\n\t\t\tevent.dataTransfer.setData('text/plain', `column:${columnIndex}`);\n\n\t\t\t// Use custom drag preview if template is provided\n\t\t\tconst previewTemplate = this.columnDragPreviewTpt();\n\t\t\tif (previewTemplate) {\n\t\t\t\tconst previewElement = this.createDragPreview(previewTemplate, { column });\n\t\t\t\tif (previewElement) {\n\t\t\t\t\tevent.dataTransfer.setDragImage(previewElement, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set drag state after a micro-delay to allow the browser to capture the drag image\n\t\t// before we hide the element\n\t\trequestAnimationFrame(() => {\n\t\t\tthis.dragState.set({\n\t\t\t\ttype: 'column',\n\t\t\t\tsourceColumnIndex: columnIndex,\n\t\t\t\titem: column,\n\t\t\t\telement\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Handles the drag end event for columns.\n\t *\n\t * @param _event - The native drag event (unused).\n\t */\n\tonColumnDragEnd(_event: DragEvent): void {\n\t\tthis.destroyDragPreview();\n\t\tthis.columnDropIndicatorIndex.set(null);\n\t\tthis.dragState.set(null);\n\t}\n\n\t/**\n\t * Handles the drag over event for the board container.\n\t * Calculates the drop position based on mouse position relative to columns.\n\t *\n\t * @param event - The native drag event.\n\t */\n\tonBoardDragOver(event: DragEvent): void {\n\t\tconst state = this.dragState();\n\t\tif (!state || state.type !== 'column') {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tif (event.dataTransfer) {\n\t\t\tevent.dataTransfer.dropEffect = 'move';\n\t\t}\n\n\t\t// Find which column we're over based on mouse position\n\t\tconst boardElement = event.currentTarget as HTMLElement;\n\t\tconst columnElements = boardElement.querySelectorAll('.hub-board__column-container');\n\t\tconst mouseX = event.clientX;\n\n\t\tlet dropIndex = this.columns().length; // Default to end\n\n\t\tfor (let i = 0; i < columnElements.length; i++) {\n\t\t\tconst columnElement = columnElements[i] as HTMLElement;\n\t\t\tconst rect = columnElement.getBoundingClientRect();\n\t\t\tconst columnMiddle = rect.left + rect.width / 2;\n\n\t\t\tif (mouseX < columnMiddle) {\n\t\t\t\tdropIndex = i;\n\t\t\t\tbreak;\n\t\t\t} else if (mouseX < rect.right) {\n\t\t\t\tdropIndex = i + 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.columnDropIndicatorIndex.set(dropIndex);\n\t}\n\n\t/**\n\t * Handles the drop event for the board container (column reordering).\n\t *\n\t * @param event - The native drag event.\n\t */\n\tonBoardDrop(event: DragEvent): void {\n\t\tevent.preventDefault();\n\t\tconst state = this.dragState();\n\n\t\tif (!state || state.type !== 'column') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst dropIndicator = this.columnDropIndicatorIndex();\n\t\tif (dropIndicator === null) {\n\t\t\t// No valid drop position - reset state\n\t\t\tthis.columnDropIndicatorIndex.set(null);\n\t\t\tthis.dragState.set(null);\n\t\t\treturn;\n\t\t}\n\n\t\tconst columns = this.columns();\n\t\tconst previousIndex = state.sourceColumnIndex;\n\n\t\t// Calculate the actual target index\n\t\t// If dropping after the source, we need to subtract 1 because the source will be removed first\n\t\tlet currentIndex = dropIndicator;\n\t\tif (dropIndicator > previousIndex) {\n\t\t\tcurrentIndex = dropIndicator - 1;\n\t\t}\n\n\t\tif (previousIndex !== currentIndex) {\n\t\t\tmoveItemInArray(columns, previousIndex, currentIndex);\n\n\t\t\t// Force re-render by incrementing the version counter\n\t\t\tthis._columnsVersion.update((v) => v + 1);\n\n\t\t\tconst dropEvent: ColumnDragDropEvent = {\n\t\t\t\tpreviousIndex,\n\t\t\t\tcurrentIndex,\n\t\t\t\tcontainer: { data: columns },\n\t\t\t\tpreviousContainer: { data: columns },\n\t\t\t\titem: { data: state.item as BoardColumn },\n\t\t\t\tisPointerOverContainer: true\n\t\t\t};\n\n\t\t\tthis.onColumnMoved.emit(dropEvent);\n\t\t}\n\n\t\tthis.columnDropIndicatorIndex.set(null);\n\t\tthis.dragState.set(null);\n\t}\n\n\t/**\n\t * Handles the drag start event for cards.\n\t *\n\t * @param event - The native drag event.\n\t * @param card - The card being dragged.\n\t * @param columnIndex - The index of the column containing the card.\n\t * @param cardIndex - The index of the card within the column.\n\t */\n\tonCardDragStart(event: DragEvent, card: BoardCard, columnIndex: number, cardIndex: number): void {\n\t\tif (card.disabled) {\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tevent.stopPropagation();\n\n\t\tconst element = event.currentTarget as HTMLElement;\n\t\tconst sourceColumn = this.columns()[columnIndex];\n\n\t\tif (event.dataTransfer) {\n\t\t\tevent.dataTransfer.effectAllowed = 'move';\n\t\t\tevent.dataTransfer.setData('text/plain', `card:${columnIndex}:${cardIndex}`);\n\n\t\t\t// Use custom drag preview if template is provided\n\t\t\tconst previewTemplate = this.cardDragPreviewTpt();\n\t\t\tif (previewTemplate) {\n\t\t\t\tconst previewElement = this.createDragPreview(previewTemplate, { card, column: sourceColumn });\n\t\t\t\tif (previewElement) {\n\t\t\t\t\tevent.dataTransfer.setDragImage(previewElement, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set drag state after a micro-delay to allow the browser to capture the drag image\n\t\t// before we hide the element\n\t\trequestAnimationFrame(() => {\n\t\t\tthis.dragState.set({\n\t\t\t\ttype: 'card',\n\t\t\t\tsourceColumnIndex: columnIndex,\n\t\t\t\tsourceCardIndex: cardIndex,\n\t\t\t\titem: card,\n\t\t\t\telement\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Handles the drag end event for cards.\n\t *\n\t * @param _event - The native drag event (unused).\n\t */\n\tonCardDragEnd(_event: DragEvent): void {\n\t\tthis.destroyDragPreview();\n\t\tthis.hoveredColumnIndex.set(null);\n\t\tthis.dropIndicatorIndex.set(null);\n\t\tthis.dragState.set(null);\n\t}\n\n\t/**\n\t * Handles the drag over event for column bodies (card drop zones).\n\t *\n\t * @param event - The native drag event.\n\t * @param column - The column being dragged over.\n\t * @param columnIndex - The index of the column.\n\t */\n\tonCardDragOver(event: DragEvent, column: BoardColumn, columnIndex: number): void {\n\t\tconst state = this.dragState();\n\t\tif (!state || state.type !== 'card') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if the column accepts this card via predicate\n\t\tconst predicate = column.predicate ?? this.defaultEnterPredicateFn;\n\t\tconst dragItem: BoardDragItem<BoardCard> = { data: state.item as BoardCard, element: state.element };\n\n\t\tif (!predicate(dragItem) || column.cardSortingDisabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tif (event.dataTransfer) {\n\t\t\tevent.dataTransfer.dropEffect = 'move';\n\t\t}\n\n\t\tthis.hoveredColumnIndex.set(columnIndex);\n\n\t\t// Calculate drop position based on mouse Y position\n\t\tconst containerElement = event.currentTarget as HTMLElement;\n\t\tconst cards = containerElement.querySelectorAll('.hub-board__card:not(.hub-board__card--dragging)');\n\t\tconst mouseY = event.clientY;\n\n\t\tlet dropIndex = column.cards.length;\n\n\t\tfor (let i = 0; i < cards.length; i++) {\n\t\t\tconst cardElement = cards[i] as HTMLElement;\n\t\t\tconst rect = cardElement.getBoundingClientRect();\n\t\t\tconst cardMiddle = rect.top + rect.height / 2;\n\n\t\t\tif (mouseY < cardMiddle) {\n\t\t\t\t// Adjust index to account for the dragged card if in same column\n\t\t\t\tif (state.sourceColumnIndex === columnIndex && state.sourceCardIndex !== undefined) {\n\t\t\t\t\tdropIndex = i <= state.sourceCardIndex ? i : i;\n\t\t\t\t} else {\n\t\t\t\t\tdropIndex = i;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.dropIndicatorIndex.set(dropIndex);\n\t}\n\n\t/**\n\t * Handles the drag leave event for column bodies.\n\t *\n\t * @param event - The native drag event.\n\t * @param columnIndex - The index of the column being left.\n\t */\n\tonCardDragLeave(event: DragEvent, columnIndex: number): void {\n\t\tconst relatedTarget = event.relatedTarget as HTMLElement | null;\n\t\tconst currentTarget = event.currentTarget as HTMLElement;\n\n\t\t// Only clear if we're actually leaving the container (not entering a child)\n\t\tif (!relatedTarget || !currentTarget.contains(relatedTarget)) {\n\t\t\tif (this.hoveredColumnIndex() === columnIndex) {\n\t\t\t\tthis.hoveredColumnIndex.set(null);\n\t\t\t\tthis.dropIndicatorIndex.set(null);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Handles the drop event for cards.\n\t *\n\t * @param event - The native drag event.\n\t * @param column - The target column.\n\t * @param columnIndex - The index of the target column.\n\t */\n\tonCardDrop(event: DragEvent, column: BoardColumn, columnIndex: number): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst state = this.dragState();\n\t\tif (!state || state.type !== 'card' || state.sourceCardIndex === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst columns = this.columns();\n\t\tconst sourceColumn = columns[state.sourceColumnIndex];\n\t\tconst targetColumn = column;\n\n\t\tconst previousIndex = state.sourceCardIndex;\n\t\tlet currentIndex = this.dropIndicatorIndex() ?? targetColumn.cards.length;\n\n\t\t// Adjust for same-column moves\n\t\tif (state.sourceColumnIndex === columnIndex && previousIndex < currentIndex) {\n\t\t\tcurrentIndex--;\n\t\t}\n\n\t\tconst isSameContainer = state.sourceColumnIndex === columnIndex;\n\n\t\tif (isSameContainer) {\n\t\t\tif (previousIndex !== currentIndex) {\n\t\t\t\tmoveItemInArray(targetColumn.cards, previousIndex, currentIndex);\n\t\t\t}\n\t\t} else {\n\t\t\ttransferArrayItem(sourceColumn.cards, targetColumn.cards, previousIndex, currentIndex);\n\t\t}\n\n\t\t// Force re-render by incrementing the version counter\n\t\tthis._columnsVersion.update((v) => v + 1);\n\n\t\tconst dropEvent: CardDragDropEvent = {\n\t\t\tpreviousIndex,\n\t\t\tcurrentIndex,\n\t\t\tcontainer: { data: targetColumn },\n\t\t\tpreviousContainer: { data: sourceColumn },\n\t\t\titem: { data: state.item as BoardCard },\n\t\t\tisPointerOverContainer: true\n\t\t};\n\n\t\tthis.onCardMoved.emit(dropEvent);\n\n\t\tthis.hoveredColumnIndex.set(null);\n\t\tthis.dropIndicatorIndex.set(null);\n\t\tthis.dragState.set(null);\n\t}\n\n\t/**\n\t * Determines if a column should show the drop indicator.\n\t *\n\t * @param columnIndex - The index position to check for the drop indicator.\n\t * @returns Whether the drop indicator should be shown at this position.\n\t */\n\tshouldShowColumnDropIndicator(columnIndex: number): boolean {\n\t\tconst state = this.dragState();\n\t\tif (state?.type !== 'column') {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.columnDropIndicatorIndex() === columnIndex;\n\t}\n\n\t/**\n\t * Determines if a card drop indicator should be shown at a specific position.\n\t *\n\t * @param columnIndex - The index of the column.\n\t * @param cardIndex - The index where the indicator would appear.\n\t * @returns Whether the drop indicator should be shown.\n\t */\n\tshouldShowCardDropIndicator(columnIndex: number, cardIndex: number): boolean {\n\t\tconst state = this.dragState();\n\t\tif (state?.type !== 'card') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn this.hoveredColumnIndex() === columnIndex && this.dropIndicatorIndex() === cardIndex;\n\t}\n\n\t/**\n\t * Emits {@link reachedEnd} once a column body is scrolled to its bottom.\n\t *\n\t * @param index - Index of the scrolled column within the board.\n\t * @param event - Browser scroll event originating from the column body element.\n\t */\n\tonScroll(index: number, event: Event) {\n\t\tconst el = event.target as HTMLElement | null;\n\t\tif (!el) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst scrolledToBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - this.scrollDetectionPadding;\n\n\t\tif (!scrolledToBottom) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst column = this.board()?.columns?.[index];\n\t\tif (!column) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.reachedEnd.emit({\n\t\t\tindex,\n\t\t\tdata: column\n\t\t});\n\t}\n\n\t/**\n\t * Creates a custom drag preview element from a template and renders it in a hidden container.\n\t * The element must be in the DOM for setDragImage to work properly.\n\t *\n\t * @param template - The template to render as the drag preview.\n\t * @param context - The context to pass to the template.\n\t * @returns The native HTML element to use as the drag image, or null if creation failed.\n\t */\n\tprivate createDragPreview(template: TemplateRef<unknown>, context: Record<string, unknown>): HTMLElement | null {\n\t\t// Destroy any existing preview first.\n\t\tthis.destroyDragPreview();\n\n\t\tconst container = this.dragPreviewContainer();\n\t\tif (!container) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Render the template into the hidden container using the shared drag-image helper.\n\t\tconst image = createNativeDragImage(template, context, container.nativeElement);\n\t\tif (!image) {\n\t\t\treturn null;\n\t\t}\n\t\tthis.dragPreviewDestroy = image.destroy;\n\t\treturn image.node;\n\t}\n\n\t/**\n\t * Destroys the current drag preview view and cleans up related resources. The disposer\n\t * returned by `createNativeDragImage` removes both the embedded view and the rendered\n\t * nodes, so no manual container clearing is required.\n\t */\n\tprivate destroyDragPreview(): void {\n\t\tthis.dragPreviewDestroy?.();\n\t\tthis.dragPreviewDestroy = null;\n\t}\n}\n","@if (columns().length) {\n<div class=\"hub-board__drop-list\" (dragover)=\"onBoardDragOver($event)\" (drop)=\"onBoardDrop($event)\">\n\t<div class=\"hub-board__columns\">\n\t\t@for (column of columns(); let index = $index; track trackColumnById($index, column)) {\n\t\t<!-- Column placeholder (before column) -->\n\t\t@if (shouldShowColumnDropIndicator(index)) {\n\t\t<div class=\"hub-board__column-placeholder\">\n\t\t\t@if (columnPlaceholderTpt()) {\n\t\t\t<ng-container\n\t\t\t\t[ngTemplateOutlet]=\"columnPlaceholderTpt()!\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ column: draggedColumn }\"\n\t\t\t></ng-container>\n\t\t\t}\n\t\t</div>\n\t\t}\n\t\t<div\n\t\t\tclass=\"hub-board__column-container\"\n\t\t\t[class.hub-board__column-container--disabled]=\"column.disabled\"\n\t\t\t[class.hub-board__column-container--dragging-ghost]=\"isDraggingColumn(column) && dragBehavior() === 'ghost'\"\n\t\t\t[class.hub-board__column-container--dragging-hide]=\"isDraggingColumn(column) && dragBehavior() === 'hide'\"\n\t\t\t[class.hub-board__column-container--dragging-collapse]=\"isDraggingColumn(column) && dragBehavior() === 'collapse'\"\n\t\t\t[attr.draggable]=\"!columnSortingDisabled() && !column.disabled\"\n\t\t\t[attr.data-column-index]=\"index\"\n\t\t\t(dragstart)=\"onColumnDragStart($event, column, index)\"\n\t\t\t(dragend)=\"onColumnDragEnd($event)\"\n\t\t>\n\t\t\t<div class=\"hub-board__column\" [ngClass]=\"column.classlist\" [style]=\"column.style\">\n\t\t\t\t<div class=\"hub-board__column-header\">\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"columnHeaderTpt() || defaultColumnHeaderTpt\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ column: column }\"\n\t\t\t\t\t>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-board__column-body\"\n\t\t\t\t\t[class.hub-board__column-body--drag-over]=\"hoveredColumnIndex() === index\"\n\t\t\t\t\t(scroll)=\"onScroll(index, $event)\"\n\t\t\t\t\t(dragover)=\"onCardDragOver($event, column, index)\"\n\t\t\t\t\t(dragleave)=\"onCardDragLeave($event, index)\"\n\t\t\t\t\t(drop)=\"onCardDrop($event, column, index)\"\n\t\t\t\t>\n\t\t\t\t\t@for (card of column.cards; let cardIndex = $index; track card) {\n\t\t\t\t\t<!-- Card placeholder (before card) -->\n\t\t\t\t\t@if (shouldShowCardDropIndicator(index, cardIndex)) {\n\t\t\t\t\t<div class=\"hub-board__card-placeholder\">\n\t\t\t\t\t\t@if (cardPlaceholderTpt()) {\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"cardPlaceholderTpt()!\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ card: draggedCard, column: column }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"hub-board__card\"\n\t\t\t\t\t\t[class.hub-board__card--disabled]=\"card.disabled\"\n\t\t\t\t\t\t[class.hub-board__card--dragging-ghost]=\"isDraggingCard(card) && dragBehavior() === 'ghost'\"\n\t\t\t\t\t\t[class.hub-board__card--dragging-hide]=\"isDraggingCard(card) && dragBehavior() === 'hide'\"\n\t\t\t\t\t\t[class.hub-board__card--dragging-collapse]=\"isDraggingCard(card) && dragBehavior() === 'collapse'\"\n\t\t\t\t\t\t[attr.draggable]=\"!card.disabled && !column.cardSortingDisabled\"\n\t\t\t\t\t\t(dragstart)=\"onCardDragStart($event, card, index, cardIndex)\"\n\t\t\t\t\t\t(dragend)=\"onCardDragEnd($event)\"\n\t\t\t\t\t\t(click)=\"cardClick(card)\"\n\t\t\t\t\t\t(mousedown)=\"card.disabled ? $event.stopPropagation() : null\"\n\t\t\t\t\t\t[ngClass]=\"card.classlist\"\n\t\t\t\t\t\t[style]=\"card.style\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div class=\"hub-board__card-body\">\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"cardTpt() || defaultCardTpt\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\titem: card,\n\t\t\t\t\t\t\t\t\tcolumn\n\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t\t<!-- Card placeholder at the end -->\n\t\t\t\t\t@if (shouldShowCardDropIndicator(index, column.cards.length)) {\n\t\t\t\t\t<div class=\"hub-board__card-placeholder\">\n\t\t\t\t\t\t@if (cardPlaceholderTpt()) {\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"cardPlaceholderTpt()!\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ card: draggedCard, column: column }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\n\t\t\t\t@if (columnFooterTpt()) {\n\t\t\t\t<div class=\"hub-board__column-footer\">\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"columnFooterTpt() ?? null\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\tcolumn: column\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t\t}\n\t\t<!-- Column placeholder at the end -->\n\t\t@if (shouldShowColumnDropIndicator(columns().length)) {\n\t\t<div class=\"hub-board__column-placeholder\">\n\t\t\t@if (columnPlaceholderTpt()) {\n\t\t\t<ng-container\n\t\t\t\t[ngTemplateOutlet]=\"columnPlaceholderTpt()!\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ column: draggedColumn }\"\n\t\t\t></ng-container>\n\t\t\t}\n\t\t</div>\n\t\t}\n\t</div>\n</div>\n}\n\n<ng-template #defaultCardTpt let-item=\"item\">\n\t<h6 class=\"hub-board__card-title\">{{ item.title }}</h6>\n\t<p class=\"hub-board__card-subtitle\">{{ item.description }}</p>\n</ng-template>\n\n<ng-template #defaultColumnHeaderTpt let-column=\"column\">\n\t<div class=\"d-flex flex-column\">\n\t\t<h5 class=\"hub-board__column-header-title\">\n\t\t\t{{ column.title }}\n\t\t</h5>\n\t\t<h6 class=\"hub-board__column-header-subtitle\">\n\t\t\t{{ column.description }}\n\t\t</h6>\n\t</div>\n</ng-template>\n\n<!-- Hidden container for rendering drag preview elements -->\n<div #dragPreviewContainer class=\"hub-board__drag-preview-container\" aria-hidden=\"true\"></div>\n","import { NgModule } from '@angular/core';\nimport { HubBoardComponent } from './components/board/board.component';\nimport { BoardColumnFooterDirective } from './directives/board-column-footer.directive';\nimport { BoardColumnHeaderDirective } from './directives/board-column-header.directive';\nimport { CardPlaceholderDirective } from './directives/card-placeholder.directive';\nimport { CardTemplateDirective } from './directives/card-template.directive';\nimport { ColumnPlaceholderDirective } from './directives/column-placeholder.directive';\n\n/**\n * Angular module that provides board functionality with drag-and-drop support.\n * \n * This module includes all the necessary components and directives for creating\n * Kanban-style boards with customizable columns, cards, and templates.\n * \n * @deprecated Use standalone components instead. Import individual components and directives directly.\n * @publicApi\n * \n * @example\n * ```typescript\n * // Legacy module approach (not recommended)\n * import { BoardModule } from 'ng-hub-ui-board';\n * \n * @NgModule({\n *   imports: [BoardModule]\n * })\n * export class AppModule {}\n * \n * // Recommended standalone approach\n * import { HubBoardComponent, CardTemplateDirective } from 'ng-hub-ui-board';\n * \n * @Component({\n *   standalone: true,\n *   imports: [HubBoardComponent, CardTemplateDirective]\n * })\n * export class MyComponent {}\n * ```\n */\n@NgModule({\n\tdeclarations: [],\n\timports: [\n\t\tHubBoardComponent,\n\t\tCardTemplateDirective,\n\t\tBoardColumnHeaderDirective,\n\t\tBoardColumnFooterDirective,\n\t\tCardPlaceholderDirective,\n\t\tColumnPlaceholderDirective\n\t],\n\texports: [\n\t\tHubBoardComponent,\n\t\tCardTemplateDirective,\n\t\tBoardColumnHeaderDirective,\n\t\tBoardColumnFooterDirective,\n\t\tCardPlaceholderDirective,\n\t\tColumnPlaceholderDirective\n\t]\n})\nexport class BoardModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Converts a hexadecimal color string into its inverted counterpart, offering both\n * high-contrast black/white and full-spectrum inversion modes.\n *\n * @publicApi\n */\n@Pipe({\n\tname: 'invertColor',\n\tstandalone: true\n})\nexport class InvertColorPipe implements PipeTransform {\n\t/**\n\t * Inverts a HEX color value.\n\t *\n\t * @param hex - Color expressed as a 3- or 6-digit HEX string with or without a hash prefix.\n\t * @param bw - When `true`, returns either black or white based on perceived brightness to maximise contrast.\n\t * @returns The inverted color represented as a 6-digit HEX string (always prefixed with `#`).\n\t * @throws Error if the provided value cannot be parsed as a valid HEX color.\n\t */\n\ttransform(hex: string, bw: boolean): string {\n\t\tif (!hex) {\n\t\t\treturn '#000000';\n\t\t}\n\n\t\tlet normalizedHex = hex;\n\t\tif (normalizedHex.indexOf('#') === 0) {\n\t\t\tnormalizedHex = normalizedHex.slice(1);\n\t\t}\n\n\t\tif (normalizedHex.length === 3) {\n\t\t\t// Convert shorthand notation (e.g., #abc) to full length (#aabbcc)\n\t\t\tnormalizedHex =\n\t\t\t\tnormalizedHex[0] +\n\t\t\t\tnormalizedHex[0] +\n\t\t\t\tnormalizedHex[1] +\n\t\t\t\tnormalizedHex[1] +\n\t\t\t\tnormalizedHex[2] +\n\t\t\t\tnormalizedHex[2];\n\t\t}\n\n\t\tif (normalizedHex.length !== 6) {\n\t\t\tthrow new Error('Invalid HEX color.');\n\t\t}\n\n\t\tconst r = parseInt(normalizedHex.slice(0, 2), 16);\n\t\tconst g = parseInt(normalizedHex.slice(2, 4), 16);\n\t\tconst b = parseInt(normalizedHex.slice(4, 6), 16);\n\n\t\tif (bw) {\n\t\t\t// http://stackoverflow.com/a/3943023/112731\n\t\t\treturn r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF';\n\t\t}\n\n\t\tconst invertedR = (255 - r).toString(16).padStart(2, '0');\n\t\tconst invertedG = (255 - g).toString(16).padStart(2, '0');\n\t\tconst invertedB = (255 - b).toString(16).padStart(2, '0');\n\n\t\treturn `#${invertedR}${invertedG}${invertedB}`;\n\t}\n}\n","/**\n * Represents a drag-and-drop event for board operations.\n * This interface replaces the CDK's CdkDragDrop to provide a lightweight,\n * dependency-free alternative.\n *\n * @template C The type of the container data.\n * @template P The type of the previous container data (defaults to C).\n * @template I The type of the dragged item data (defaults to any).\n * @publicApi\n */\nexport interface BoardDragDropEvent<C, P = C, I = any> {\n\t/**\n\t * The index of the item in its previous container before dragging.\n\t */\n\tpreviousIndex: number;\n\n\t/**\n\t * The index where the item was dropped in the current container.\n\t */\n\tcurrentIndex: number;\n\n\t/**\n\t * Data associated with the container where the item was dropped.\n\t */\n\tcontainer: BoardDropContainer<C>;\n\n\t/**\n\t * Data associated with the container from which the item was dragged.\n\t */\n\tpreviousContainer: BoardDropContainer<P>;\n\n\t/**\n\t * The dragged item data.\n\t */\n\titem: BoardDragItem<I>;\n\n\t/**\n\t * Whether the item was dropped in the same container it started in.\n\t */\n\tisPointerOverContainer: boolean;\n\n\t/**\n\t * The distance the item was dragged.\n\t */\n\tdistance?: { x: number; y: number };\n\n\t/**\n\t * The point where the item was dropped.\n\t */\n\tdropPoint?: { x: number; y: number };\n}\n\n/**\n * Represents a drop container in the board.\n *\n * @template T The type of data associated with the container.\n * @publicApi\n */\nexport interface BoardDropContainer<T> {\n\t/**\n\t * The data associated with this container.\n\t */\n\tdata: T;\n\n\t/**\n\t * The DOM element of the container.\n\t */\n\telement?: HTMLElement;\n}\n\n/**\n * Represents a dragged item in the board.\n *\n * @template T The type of data associated with the item.\n * @publicApi\n */\nexport interface BoardDragItem<T> {\n\t/**\n\t * The data associated with this item.\n\t */\n\tdata: T;\n\n\t/**\n\t * The DOM element of the dragged item.\n\t */\n\telement?: HTMLElement;\n}\n\n/**\n * Type alias for card drag-drop events.\n * @publicApi\n */\nexport type CardDragDropEvent<T = any> = BoardDragDropEvent<\n\timport('./board-column').BoardColumn<T>,\n\timport('./board-column').BoardColumn<T>,\n\timport('./board-card').BoardCard<T>\n>;\n\n/**\n * Type alias for column drag-drop events.\n * @publicApi\n */\nexport type ColumnDragDropEvent<T = any> = BoardDragDropEvent<\n\timport('./board-column').BoardColumn<T>[],\n\timport('./board-column').BoardColumn<T>[],\n\timport('./board-column').BoardColumn<T>\n>;\n\n// The array move/transfer helpers used when reordering cards and columns now live in the\n// shared `ng-hub-ui-utils` drag-and-drop core and are re-exported from `./array-helpers`\n// (kept in a dedicated file so the external re-export does not sit alongside the inline\n// `import('./board-column')` type references above, which trips ng-packagr's compiler).\n","/*\n * Public API Surface of board\n */\n\n// module\nexport * from './lib/board.module';\n\n// directives\nexport * from './lib/directives/board-column-footer.directive';\nexport * from './lib/directives/board-column-header.directive';\nexport * from './lib/directives/card-drag-preview.directive';\nexport * from './lib/directives/card-placeholder.directive';\nexport * from './lib/directives/card-template.directive';\nexport * from './lib/directives/column-drag-preview.directive';\nexport * from './lib/directives/column-placeholder.directive';\n\n// components\nexport * from './lib/components/board/board.component';\n\n// pipes\nexport * from './lib/pipes/invert-color.pipe';\n\n// models\nexport * from './lib/models/array-helpers';\nexport * from './lib/models/board';\nexport * from './lib/models/board-card';\nexport * from './lib/models/board-column';\nexport * from './lib/models/drag-drop-event';\nexport * from './lib/models/reached-end-event';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;AAEA;;;;;;;;;;;;;;;;;;;;;AAqBG;MAKU,0BAA0B,CAAA;AAMnB,IAAA,WAAA;AALnB;;;;AAIG;AACH,IAAA,WAAA,CAAmB,WAAiC,EAAA;QAAjC,IAAA,CAAA,WAAW,GAAX,WAAW;IAAyB;uGAN3C,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;ACzBD;;;;;;;;;;;;;;;;;;;AAmBG;MAKU,0BAA0B,CAAA;AAMnB,IAAA,WAAA;AALnB;;;;AAIG;AACH,IAAA,WAAA,CAAmB,WAAiC,EAAA;QAAjC,IAAA,CAAA,WAAW,GAAX,WAAW;IAAyB;uGAN3C,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;ACvBD;;;;;;;;;;;;;;;;;;;;AAoBG;MAKU,wBAAwB,CAAA;AAMjB,IAAA,WAAA;AALnB;;;;AAIG;AACH,IAAA,WAAA,CAAmB,WAAiC,EAAA;QAAjC,IAAA,CAAA,WAAW,GAAX,WAAW;IAAyB;uGAN3C,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;ACxBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;MAKU,wBAAwB,CAAA;uGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;AChCD;;;;;;;;;;;;;;;;;;AAkBG;MAKU,qBAAqB,CAAA;AAMd,IAAA,WAAA;AALnB;;;;AAIG;AACH,IAAA,WAAA,CAAmB,WAAiC,EAAA;QAAjC,IAAA,CAAA,WAAW,GAAX,WAAW;IAAyB;uGAN3C,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;ACtBD;;;;;;;;;;;;;;;;;;;;;AAqBG;MAKU,0BAA0B,CAAA;AAMnB,IAAA,WAAA;AALnB;;;;AAIG;AACH,IAAA,WAAA,CAAmB,WAAiC,EAAA;QAAjC,IAAA,CAAA,WAAW,GAAX,WAAW;IAAyB;uGAN3C,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;ACzBD;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;MAKU,0BAA0B,CAAA;uGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;ACjCD;;;;;;;;AAQG;;ACyCH;;;;;AAKG;MAYU,iBAAiB,CAAA;AAC7B;;AAEG;AACM,IAAA,KAAK,GAAG,KAAK;yFAAS;AAE/B;;;;;;AAMG;IACM,OAAO,GAAG,KAAK,CAAoF,SAAS;gFAAC;AAEtH;;;;AAIG;AACM,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;QAC9B,OAAO,OAAO,GAAG,CAAA,oBAAA,EAAuB,OAAO,CAAA,CAAA,CAAG,GAAG,IAAI;IAC1D,CAAC;oFAAC;AAEF;;;AAGG;IACc,sBAAsB,GAAG,CAAC;AAE3C;;AAEG;IACc,eAAe,GAAG,MAAM,CAAC,CAAC;wFAAC;AAE5C;;;;AAIG;AACH,IAAA,OAAO,GAA+B,QAAQ,CAAC,MAAK;;QAEnD,IAAI,CAAC,eAAe,EAAE;QACtB,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,IAAI,EAAE;IACnC,CAAC;gFAAC;AAEF;;AAEG;IACM,qBAAqB,GAAG,KAAK,CAAU,KAAK;8FAAC;AAEtD;;;;;AAKG;IACM,YAAY,GAAG,KAAK,CAAe,UAAU;qFAAC;AAEvD;;AAEG;IACM,OAAO,GAAG,YAAY,CAAC,qBAAqB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,IAAI,GAAE,WAAoB,CAAA,EAAA,CACzB;AAEF;;AAEG;IACM,eAAe,GAAG,YAAY,CAAC,0BAA0B,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,8BAAA,EAAA,CAAA,EACjE,IAAI,GAAE,WAAoB,CAAA,EAAA,CACzB;AAEF;;AAEG;IACM,eAAe,GAAG,YAAY,CAAC,0BAA0B,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,8BAAA,EAAA,CAAA,EACjE,IAAI,GAAE,WAAoB,CAAA,EAAA,CACzB;AAEF;;;AAGG;IACM,kBAAkB,GAAG,YAAY,CAAC,wBAAwB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,8BAAA,EAAA,CAAA,EAClE,IAAI,GAAE,WAAoB,CAAA,EAAA,CACzB;AAEF;;;AAGG;IACM,oBAAoB,GAAG,YAAY,CAAC,0BAA0B,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,8BAAA,EAAA,CAAA,EACtE,IAAI,GAAE,WAAoB,CAAA,EAAA,CACzB;AAEF;;;;AAIG;IACM,kBAAkB,GAAG,YAAY,CAAC,wBAAwB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,8BAAA,EAAA,CAAA,EAClE,IAAI,GAAE,WAAoB,CAAA,EAAA,CACzB;AAEF;;;;AAIG;IACM,oBAAoB,GAAG,YAAY,CAAC,0BAA0B,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,8BAAA,EAAA,CAAA,EACtE,IAAI,GAAE,WAAoB,CAAA,EAAA,CACzB;AAEF;;AAEG;IACM,oBAAoB,GAAG,SAAS,CAA0B,sBAAsB;6FAAC;AAE1F;;AAEG;IACK,kBAAkB,GAAwB,IAAI;AAEtD;;AAEG;IACM,WAAW,GAAG,MAAM,EAAa;AAE1C;;AAEG;IACM,WAAW,GAAG,MAAM,EAA0B;AAEvD;;AAEG;IACM,aAAa,GAAG,MAAM,EAA4B;AAE3D;;AAEG;IACM,UAAU,GAAG,MAAM,EAAmB;AAE/C;;AAEG;IACM,SAAS,GAAG,MAAM,CAAmB,IAAI;kFAAC;AAEnD;;AAEG;IACM,kBAAkB,GAAG,MAAM,CAAgB,IAAI;2FAAC;AAEzD;;AAEG;IACM,kBAAkB,GAAG,MAAM,CAAgB,IAAI;2FAAC;AAEzD;;AAEG;IACM,wBAAwB,GAAG,MAAM,CAAgB,IAAI;iGAAC;AAE/D;;;;AAIG;AACH,IAAA,uBAAuB,GAAG,MAAM,IAAI;AAEpC;;;;AAIG;AACH,IAAA,IAAI,WAAW,GAAA;AACd,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,OAAO,KAAK,EAAE,IAAI,KAAK,MAAM,GAAI,KAAK,CAAC,IAAkB,GAAG,IAAI;IACjE;AAEA;;;;AAIG;AACH,IAAA,IAAI,aAAa,GAAA;AAChB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,GAAI,KAAK,CAAC,IAAoB,GAAG,IAAI;IACrE;AAEA;;;;AAIG;AACH,IAAA,SAAS,CAAC,IAAe,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;AAEA;;;;;;;AAOG;IACH,eAAe,CAAC,KAAa,EAAE,MAAmB,EAAA;AACjD,QAAA,OAAQ,MAAc,CAAC,EAAE,IAAI,KAAK;IACnC;AAEA;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,MAAmB,EAAA;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;QAC9B,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;IACzD;AAEA;;;;;AAKG;AACH,IAAA,cAAc,CAAC,IAAe,EAAA;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;QAC9B,OAAO,KAAK,EAAE,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;IACrD;AAEA;;;;;;AAMG;AACH,IAAA,iBAAiB,CAAC,KAAgB,EAAE,MAAmB,EAAE,WAAmB,EAAA;QAC3E,IAAI,IAAI,CAAC,qBAAqB,EAAE,IAAI,MAAM,CAAC,QAAQ,EAAE;YACpD,KAAK,CAAC,cAAc,EAAE;YACtB;QACD;AAEA,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAA4B;AAElD,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACvB,YAAA,KAAK,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM;YACzC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,CAAA,OAAA,EAAU,WAAW,CAAA,CAAE,CAAC;;AAGjE,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,EAAE;YACnD,IAAI,eAAe,EAAE;AACpB,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC;gBAC1E,IAAI,cAAc,EAAE;oBACnB,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtD;YACD;QACD;;;QAIA,qBAAqB,CAAC,MAAK;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AAClB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,iBAAiB,EAAE,WAAW;AAC9B,gBAAA,IAAI,EAAE,MAAM;gBACZ;AACA,aAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACH;AAEA;;;;AAIG;AACH,IAAA,eAAe,CAAC,MAAiB,EAAA;QAChC,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB;AAEA;;;;;AAKG;AACH,IAAA,eAAe,CAAC,KAAgB,EAAA;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;QAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;YACtC;QACD;QAEA,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACvB,YAAA,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM;QACvC;;AAGA,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,aAA4B;QACvD,MAAM,cAAc,GAAG,YAAY,CAAC,gBAAgB,CAAC,8BAA8B,CAAC;AACpF,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO;QAE5B,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;AAEtC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,YAAA,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAgB;AACtD,YAAA,MAAM,IAAI,GAAG,aAAa,CAAC,qBAAqB,EAAE;YAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AAE/C,YAAA,IAAI,MAAM,GAAG,YAAY,EAAE;gBAC1B,SAAS,GAAG,CAAC;gBACb;YACD;AAAO,iBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE;AAC/B,gBAAA,SAAS,GAAG,CAAC,GAAG,CAAC;gBACjB;YACD;QACD;AAEA,QAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC;IAC7C;AAEA;;;;AAIG;AACH,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC3B,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;QAE9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;YACtC;QACD;AAEA,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,wBAAwB,EAAE;AACrD,QAAA,IAAI,aAAa,KAAK,IAAI,EAAE;;AAE3B,YAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YACxB;QACD;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,iBAAiB;;;QAI7C,IAAI,YAAY,GAAG,aAAa;AAChC,QAAA,IAAI,aAAa,GAAG,aAAa,EAAE;AAClC,YAAA,YAAY,GAAG,aAAa,GAAG,CAAC;QACjC;AAEA,QAAA,IAAI,aAAa,KAAK,YAAY,EAAE;AACnC,YAAA,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,CAAC;;AAGrD,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAEzC,YAAA,MAAM,SAAS,GAAwB;gBACtC,aAAa;gBACb,YAAY;AACZ,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAC5B,gBAAA,iBAAiB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AACpC,gBAAA,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAmB,EAAE;AACzC,gBAAA,sBAAsB,EAAE;aACxB;AAED,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;QACnC;AAEA,QAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB;AAEA;;;;;;;AAOG;AACH,IAAA,eAAe,CAAC,KAAgB,EAAE,IAAe,EAAE,WAAmB,EAAE,SAAiB,EAAA;AACxF,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,KAAK,CAAC,cAAc,EAAE;YACtB;QACD;QAEA,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAA4B;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC;AAEhD,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACvB,YAAA,KAAK,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM;AACzC,YAAA,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,CAAA,KAAA,EAAQ,WAAW,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC;;AAG5E,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE;YACjD,IAAI,eAAe,EAAE;AACpB,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;gBAC9F,IAAI,cAAc,EAAE;oBACnB,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtD;YACD;QACD;;;QAIA,qBAAqB,CAAC,MAAK;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AAClB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,iBAAiB,EAAE,WAAW;AAC9B,gBAAA,eAAe,EAAE,SAAS;AAC1B,gBAAA,IAAI,EAAE,IAAI;gBACV;AACA,aAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACH;AAEA;;;;AAIG;AACH,IAAA,aAAa,CAAC,MAAiB,EAAA;QAC9B,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB;AAEA;;;;;;AAMG;AACH,IAAA,cAAc,CAAC,KAAgB,EAAE,MAAmB,EAAE,WAAmB,EAAA;AACxE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;QAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;YACpC;QACD;;QAGA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,uBAAuB;AAClE,QAAA,MAAM,QAAQ,GAA6B,EAAE,IAAI,EAAE,KAAK,CAAC,IAAiB,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;QAEpG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,mBAAmB,EAAE;YACvD;QACD;QAEA,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACvB,YAAA,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM;QACvC;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC;;AAGxC,QAAA,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAA4B;QAC3D,MAAM,KAAK,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,kDAAkD,CAAC;AACnG,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO;AAE5B,QAAA,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;AAEnC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAgB;AAC3C,YAAA,MAAM,IAAI,GAAG,WAAW,CAAC,qBAAqB,EAAE;YAChD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAE7C,YAAA,IAAI,MAAM,GAAG,UAAU,EAAE;;AAExB,gBAAA,IAAI,KAAK,CAAC,iBAAiB,KAAK,WAAW,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE;AACnF,oBAAA,SAAS,GAAG,CAAC,IAAI,KAAK,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC;gBAC/C;qBAAO;oBACN,SAAS,GAAG,CAAC;gBACd;gBACA;YACD;QACD;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;IACvC;AAEA;;;;;AAKG;IACH,eAAe,CAAC,KAAgB,EAAE,WAAmB,EAAA;AACpD,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAAmC;AAC/D,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAA4B;;QAGxD,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAC7D,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,WAAW,EAAE;AAC9C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;YAClC;QACD;IACD;AAEA;;;;;;AAMG;AACH,IAAA,UAAU,CAAC,KAAgB,EAAE,MAAmB,EAAE,WAAmB,EAAA;QACpE,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE;YAC3E;QACD;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;QAC9B,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC;QACrD,MAAM,YAAY,GAAG,MAAM;AAE3B,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,eAAe;AAC3C,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM;;QAGzE,IAAI,KAAK,CAAC,iBAAiB,KAAK,WAAW,IAAI,aAAa,GAAG,YAAY,EAAE;AAC5E,YAAA,YAAY,EAAE;QACf;AAEA,QAAA,MAAM,eAAe,GAAG,KAAK,CAAC,iBAAiB,KAAK,WAAW;QAE/D,IAAI,eAAe,EAAE;AACpB,YAAA,IAAI,aAAa,KAAK,YAAY,EAAE;gBACnC,eAAe,CAAC,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,YAAY,CAAC;YACjE;QACD;aAAO;AACN,YAAA,iBAAiB,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,YAAY,CAAC;QACvF;;AAGA,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAEzC,QAAA,MAAM,SAAS,GAAsB;YACpC,aAAa;YACb,YAAY;AACZ,YAAA,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;AACjC,YAAA,iBAAiB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;AACzC,YAAA,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAiB,EAAE;AACvC,YAAA,sBAAsB,EAAE;SACxB;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;AAEhC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB;AAEA;;;;;AAKG;AACH,IAAA,6BAA6B,CAAC,WAAmB,EAAA;AAChD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,IAAI,KAAK,EAAE,IAAI,KAAK,QAAQ,EAAE;AAC7B,YAAA,OAAO,KAAK;QACb;AACA,QAAA,OAAO,IAAI,CAAC,wBAAwB,EAAE,KAAK,WAAW;IACvD;AAEA;;;;;;AAMG;IACH,2BAA2B,CAAC,WAAmB,EAAE,SAAiB,EAAA;AACjE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,IAAI,KAAK,EAAE,IAAI,KAAK,MAAM,EAAE;AAC3B,YAAA,OAAO,KAAK;QACb;AAEA,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,KAAK,WAAW,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,SAAS;IAC5F;AAEA;;;;;AAKG;IACH,QAAQ,CAAC,KAAa,EAAE,KAAY,EAAA;AACnC,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAA4B;QAC7C,IAAI,CAAC,EAAE,EAAE;YACR;QACD;AAEA,QAAA,MAAM,gBAAgB,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB;QAExG,IAAI,CAAC,gBAAgB,EAAE;YACtB;QACD;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,GAAG,KAAK,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE;YACZ;QACD;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACpB,KAAK;AACL,YAAA,IAAI,EAAE;AACN,SAAA,CAAC;IACH;AAEA;;;;;;;AAOG;IACK,iBAAiB,CAAC,QAA8B,EAAE,OAAgC,EAAA;;QAEzF,IAAI,CAAC,kBAAkB,EAAE;AAEzB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,EAAE;QAC7C,IAAI,CAAC,SAAS,EAAE;AACf,YAAA,OAAO,IAAI;QACZ;;AAGA,QAAA,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,aAAa,CAAC;QAC/E,IAAI,CAAC,KAAK,EAAE;AACX,YAAA,OAAO,IAAI;QACZ;AACA,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,OAAO;QACvC,OAAO,KAAK,CAAC,IAAI;IAClB;AAEA;;;;AAIG;IACK,kBAAkB,GAAA;AACzB,QAAA,IAAI,CAAC,kBAAkB,IAAI;AAC3B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;IAC/B;uGAxpBY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA+DG,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAC9C,WAAW,+EAMsB,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAC3D,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAMsB,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAC3D,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAOyB,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAC5D,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAO2B,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAChE,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAQyB,wBAAwB,2BAC5D,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAQ2B,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAChE,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClLnB,yrLA4IA,EAAA,MAAA,EAAA,CAAA,+jfAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjFW,OAAO,oFAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAOvB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAX7B,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,WAG1B,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAA,IAAA,EAC9B;AACL,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,qBAAqB,EAAE,mBAAmB;AAC1C,wBAAA,4BAA4B,EAAE;AAC9B,qBAAA,EAAA,QAAA,EAAA,yrLAAA,EAAA,MAAA,EAAA,CAAA,+jfAAA,CAAA,EAAA;AAiE+B,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,qBAAqB,CAAA,EAAA,EAAA,GAAE;4BACtD,IAAI,GAAE,WAAoB;AAC1B,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAKuC,0BAA0B,CAAA,EAAA,EAAA,GAAE;4BACnE,IAAI,GAAE,WAAoB;AAC1B,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAKuC,0BAA0B,CAAA,EAAA,EAAA,GAAE;4BACnE,IAAI,GAAE,WAAoB;AAC1B,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAM0C,wBAAwB,CAAA,EAAA,EAAA,GAAE;4BACpE,IAAI,GAAE,WAAoB;AAC1B,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAM4C,0BAA0B,CAAA,EAAA,EAAA,GAAE;4BACxE,IAAI,GAAE,WAAoB;AAC1B,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAO0C,wBAAwB,CAAA,EAAA,EAAA,GAAE;4BACpE,IAAI,GAAE,WAAoB;AAC1B,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAO4C,0BAA0B,CAAA,EAAA,EAAA,GAAE;4BACxE,IAAI,GAAE,WAAoB;AAC1B,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAKkE,sBAAsB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEhL1F;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;MAoBU,WAAW,CAAA;uGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,YAhBtB,iBAAiB;YACjB,qBAAqB;YACrB,0BAA0B;YAC1B,0BAA0B;YAC1B,wBAAwB;AACxB,YAAA,0BAA0B,aAG1B,iBAAiB;YACjB,qBAAqB;YACrB,0BAA0B;YAC1B,0BAA0B;YAC1B,wBAAwB;YACxB,0BAA0B,CAAA,EAAA,CAAA;wGAGf,WAAW,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAnBvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACR,iBAAiB;wBACjB,qBAAqB;wBACrB,0BAA0B;wBAC1B,0BAA0B;wBAC1B,wBAAwB;wBACxB;AACA,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACR,iBAAiB;wBACjB,qBAAqB;wBACrB,0BAA0B;wBAC1B,0BAA0B;wBAC1B,wBAAwB;wBACxB;AACA;AACD,iBAAA;;;ACrDD;;;;;AAKG;MAKU,eAAe,CAAA;AAC3B;;;;;;;AAOG;IACH,SAAS,CAAC,GAAW,EAAE,EAAW,EAAA;QACjC,IAAI,CAAC,GAAG,EAAE;AACT,YAAA,OAAO,SAAS;QACjB;QAEA,IAAI,aAAa,GAAG,GAAG;QACvB,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACrC,YAAA,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC;AAEA,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;;YAE/B,aAAa;gBACZ,aAAa,CAAC,CAAC,CAAC;oBAChB,aAAa,CAAC,CAAC,CAAC;oBAChB,aAAa,CAAC,CAAC,CAAC;oBAChB,aAAa,CAAC,CAAC,CAAC;oBAChB,aAAa,CAAC,CAAC,CAAC;oBAChB,aAAa,CAAC,CAAC,CAAC;QAClB;AAEA,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;QACtC;AAEA,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACjD,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACjD,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QAEjD,IAAI,EAAE,EAAE;;YAEP,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,SAAS,GAAG,SAAS;QACvE;AAEA,QAAA,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACzD,QAAA,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACzD,QAAA,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAEzD,QAAA,OAAO,IAAI,SAAS,CAAA,EAAG,SAAS,CAAA,EAAG,SAAS,EAAE;IAC/C;uGAhDY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACL,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;ACiGD;AACA;AACA;AACA;;AC/GA;;AAEG;AAEH;;ACJA;;AAEG;;;;"}